Una de Clases

Post Reply
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Una de Clases

Post by softruz »

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.
User avatar
wmormar
Posts: 1075
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Una de Clases

Post by wmormar »

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:

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
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Una de Clases

Post by softruz »

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.
User avatar
wmormar
Posts: 1075
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Una de Clases

Post by wmormar »

softruz,

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
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Una de Clases

Post by softruz »

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.
softruz
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Una de Clases

Post by softruz »

¿Alguien tendría una respuesta a la cuestion anterior?

Un Saludo.
User avatar
wmormar
Posts: 1075
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Una de Clases

Post by wmormar »

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.

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
Post Reply