Una de Clases

Una de Clases

Postby softruz » Wed Apr 21, 2010 10:15 am

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

Re: Una de Clases

Postby wmormar » Wed Apr 21, 2010 8:19 pm

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

Re: Una de Clases

Postby softruz » Thu Apr 22, 2010 5:33 pm

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

Re: Una de Clases

Postby wmormar » Thu Apr 22, 2010 7:11 pm

softruz,

Algo asi.
Code: Select all  Expand view  RUN
function main()
 oEmpresa := TEmpresa()
 oEmpresa:cTabla := "mitabla"
 oEmpresa:new()
return nil



Espero sea de utilidad
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: Una de Clases

Postby softruz » Fri Apr 23, 2010 5:33 pm

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

Postby softruz » Wed Apr 28, 2010 11:22 am

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

Un Saludo.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: Una de Clases

Postby wmormar » Wed Apr 28, 2010 12:11 pm

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 63 guests