Muy buenas, estoy intentando pasar un parametro a una clase antes de que esta se cree, es decir, para explicarme mejor os pongo código:
---------------------------------------------------------
- Así creo dinámicamente la clase "xMySQLClass" pero necesito pasar antes de que se cree dicha clase la variable cTable.
----------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// xMySQLClass
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_HB_CLASS xMySQLClass
function xMySQLClass()
local oRs,nScope,acFields:={}
static s_oClass
// Como puedo pasar la variable cTable
oRs := TMsQuery(oConexion, "show columns from "+alltrim(cTable))
oRs:Open()
if oRs:Reccount()<=0
msgstop( "!!! Error accediendo a la Base de Datos !!!","Creación de Clases con la tabla "+alltrim(cTable),"¡Atención!" )
PostQuitMessage(0)
__Quit()
return .t.
end
nScope := 1
s_oClass := IIF(.F.,,HBClass():new("xMySQLClass",__CLS_PARAM ( "TControl" ) ) )
oRs:first()
while !oRs:eof()
aadd(acFields,{oRs:fieldget(1),TypeByDefault(oRs:readmemo(2)),if(oRs:fieldget(4) = "PRI" .or. oRs:fieldget(4) = "MUL",.t.,.f.),GetDefault(oRs:readmemo(2))})
oRs:next()
end while
oRs:first()
while !oRs:eof()
s_oClass:AddMultiData(,,iif(.F.,1,iif(.F.,2,iif(.F.,4,nScope) ) ) + iif(.F.,16,0 ),{ alltrim(oRs:fieldget(1)) },.F.,.F. )
oRs:next()
end while
s_oClass:AddMultiData(,acfields,iif(.F.,1,iif(.F.,2,iif(.F.,4,nScope) ) ) + iif(.F.,16,0 ),{ "acFields" },.F.,.F. )
s_oClass:AddMultiData(,alltrim(cTable),iif(.F.,1,iif(.F.,2,iif(.F.,4,nScope) ) ) + iif(.F.,16,0 ),{ "cTabla" },.F.,.F. )
oRs:Free()
s_oClass:Create()
return s_oClass:Instance() AS CLASS xMySQLClass
-----------------------------------------------------------------------------
- Asi la llamos desde código para crearla
----------------------------------------------------------------------------
class tEmpresas from xMySQLClass
...
...
...
end class
-----------------------------------------------------------------------------
- Entonces mi problema es que necesito pasar el nombre de la tabla a la clase xMySQLClass para que así se cree dinamicamente con el nombre de la tabla
----------------------------------------------------------------------------
¿ como podemos hacerlo?
Un Saludo.
Una de Clases
Re: Una de Clases
primero que nada, debes de colocar como haces la llamada, por que a partir de ahí es donde se puede hace un planteamiento.
pero suponiendo que lo haces asi:
Desde luego es un ejemplo, bien podría ser de utilidad para ti.
Pero como comenté, no sabemos como lo haces ni como está distribuida la clase.
pero suponiendo que lo haces asi:
Code: Select all | Expand
oSql := tmysql():new( cHost, cUser, cPasw, nPort )
asi se genera la conexion.
otra forma seria:
oSql := tmysql()
oSql:cHost := "localhost"
oSql:cUser := "root"
oSql:cPassword := "fivewin"
oSql:nPort := 3306
oSql:conexion()
Desde luego es un ejemplo, bien podría ser de utilidad para ti.
Pero como comenté, no sabemos como lo haces ni como está distribuida la clase.
William, Morales
Saludos
méxico.sureste
Saludos
méxico.sureste
Re: Una de Clases
Muy buenas, gracias por contestar, mira yo tengo 2 clases
xMySQLClass y tEmpresas, donde tEmpresas hereda de xMySQLClass, entonces sabiendo esto
- Tengo la declaración de la clase tEmpresas:
class tEmpresas from xMySQLClass
...
...
...
end class
- Un Ejemplo de llamada sería:
function main()
tEmpresas():New()
return
- Lo que quiero es pasarle un parámetro a xMySQLClass para que se cree la clase xMySQLClass dinamicamente según este parametro (que en este caso es una tabla mysql)
¿Como puedo pasar dicho parámetro a la clase xMySQLClass para que se cree dicha clase y despues cree la clase tEmpresas?
Un Saludo.
xMySQLClass y tEmpresas, donde tEmpresas hereda de xMySQLClass, entonces sabiendo esto
- Tengo la declaración de la clase tEmpresas:
class tEmpresas from xMySQLClass
...
...
...
end class
- Un Ejemplo de llamada sería:
function main()
tEmpresas():New()
return
- Lo que quiero es pasarle un parámetro a xMySQLClass para que se cree la clase xMySQLClass dinamicamente según este parametro (que en este caso es una tabla mysql)
¿Como puedo pasar dicho parámetro a la clase xMySQLClass para que se cree dicha clase y despues cree la clase tEmpresas?
Un Saludo.
Re: Una de Clases
softruz,
Algo asi.
Espero sea de utilidad
Algo asi.
Code: Select all | Expand
function main()
oEmpresa := TEmpresa()
oEmpresa:cTabla := "mitabla"
oEmpresa:new()
return nil
Espero sea de utilidad
William, Morales
Saludos
méxico.sureste
Saludos
méxico.sureste
Re: Una de Clases
Muy buenas, asi no me sirve porque cuando llamamos a:
oEmpresa := TEmpresa() , aqui ya me crea la clase padre de esta, entonces no puedo pasarle el parámetro a la padre para que así la PADRE se cree dinámicamente con dicho parámetro.
Sería en la definicion de la clase hija pasar a la padre el parametro antes de que esta se cree.
algo asi pero esto NO FUNCIONA
class tEmpresas from xMySQLClass(cTable)
...
...
...
end class
Entonces xMySQLClass se crearía según el parámetro cTable y despues de crear xMySQLClass(PADRE) se crearía tEmpresas (HIJA).
Un Saludo.
oEmpresa := TEmpresa() , aqui ya me crea la clase padre de esta, entonces no puedo pasarle el parámetro a la padre para que así la PADRE se cree dinámicamente con dicho parámetro.
Sería en la definicion de la clase hija pasar a la padre el parametro antes de que esta se cree.
algo asi pero esto NO FUNCIONA
class tEmpresas from xMySQLClass(cTable)
...
...
...
end class
Entonces xMySQLClass se crearía según el parámetro cTable y despues de crear xMySQLClass(PADRE) se crearía tEmpresas (HIJA).
Un Saludo.
Re: Una de Clases
softruz,
Haber, vamos por partes.
Primero que una clase herede a otra no quiere decir que esta se cree en el momento en el que se hace la Herencia, sino que puedes accesar sus datas y metodos desde la clase que hereda. Así, que bien se puede usar lo que comentamos por ejemplo.
Y así llamaríamos los datos.
Espero pueda ayudarte lo expuesto
Haber, vamos por partes.
Primero que una clase herede a otra no quiere decir que esta se cree en el momento en el que se hace la Herencia, sino que puedes accesar sus datas y metodos desde la clase que hereda. Así, que bien se puede usar lo que comentamos por ejemplo.
Code: Select all | Expand
CLASS hija FROM padre
DATA cTitle INIT "Clase hija"
METHOD msghija INLINE msginfo( ::cTitle, "CLASE HIJA" )
ENDCLASS
CLASS padre
DATA cTitle INIT "Clase padre"
METHOD padre INLINE MSGINFO( ::cTitle, "CLASE PADRE" )
ENCLASS
Y así llamaríamos los datos.
Code: Select all | Expand
FUNCTION main()
oHija := hija()
oHija:msghija()
oHija:msgpadre()
oHija:super:padre:cTitle := "Modificado desde MAIN()"
oHija:msgpadre()
? Hasta aqui vamos bien?"
RETURN NIL
Espero pueda ayudarte lo expuesto
William, Morales
Saludos
méxico.sureste
Saludos
méxico.sureste