Page 1 of 1

iniciar un array en objetos...

PostPosted: Sun May 10, 2009 2:29 am
by goosfancito
Hola.
Voy al grano, tengo este codigo:

Code: Select all  Expand view

CLASS tPadron
   ...
   DATA nColOrdenada
   DATA aColumnasOrdenar
   ...
END CLASS

//-------------------

METHOD new(oConexion, cQuery, lGrande) CLASS tPadron

   ::nColOrdenada     := ::aColumnasOrdenar[1]
   ? ::nColOrdenada
   ...

 


Y desde mi codigo lo llamo asi:

Code: Select all  Expand view
   oPadron                  := tPadron():new(::oConexion, ::cQuery)
   oPadron:aColumnasOrdenar := {2,3,4}
   ...
 


El problema que tengo:
cuando en el metodo NEW se ejecuta ? ::nColordenada me da erro. o sea. los datos que le paso no los considera, porque?

Gracias.

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 4:18 am
by Daniel Garcia-Gil
Hola...

Por lo que puedo ver al momento que llamas a New()
::aColumnasOrdenar no tiene ningina infornacion
y estas haciendo
::nColOrdenada := ::aColumnasOrdenar[1] //aqui no hay nada

y despues es que le agregas informacion a esa data

oPadron := tPadron():new(::oConexion, ::cQuery)
oPadron:aColumnasOrdenar := {2,3,4}

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 4:40 am
by goosfancito
Daniel Garcia-Gil wrote:Hola...

Por lo que puedo ver al momento que llamas a New()
::aColumnasOrdenar no tiene ningina infornacion
y estas haciendo
::nColOrdenada := ::aColumnasOrdenar[1] //aqui no hay nada

y despues es que le agregas informacion a esa data

oPadron := tPadron():new(::oConexion, ::cQuery)
oPadron:aColumnasOrdenar := {2,3,4}


Exacto,
Entonces no puedo hacer eso directamente en la New?
como hago para pasar luego los valores como los hago aca:
desde mi app.?

Code: Select all  Expand view
oPadron:aColumnasOrdenar := {2,3,4}

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 10:18 am
by Ricardo Ramirez E.
Gosfancito...
El detalle es que
DATA aColumnasOrdenar
aqui no hay nada osea aColumnasOrdenar se queda con NIL y luego en New() estas atribuyendo un valor que realmente no existe.

Puedes declarar asi...

DATA aColumnasOrdenar AS ARRAY INIT {0,0,0}


Es solo un ejemplo quizas en tu caso deves declarar INIT {} y en New() atribuir el tamano del array y los valores, osea que New() deverá tener un argumento más.
Code: Select all  Expand view
METHOD New(oConexion, cQuery, lGrande, nColOrd) // nColOrd nuevo argumento
DEFAULT ::nColumnasOrdenar :=  {2,3,4} // aqui estas indicando que si nColOrd no fue enviado entonces se queda por defecto con  {2,3,4}
...
...
Return Self
 

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 1:07 pm
by goosfancito
Perfecto. Pruebo

Ricardo Ramirez E. wrote:Gosfancito...
El detalle es que
DATA aColumnasOrdenar
aqui no hay nada osea aColumnasOrdenar se queda con NIL y luego en New() estas atribuyendo un valor que realmente no existe.

Puedes declarar asi...

DATA aColumnasOrdenar AS ARRAY INIT {0,0,0}


Es solo un ejemplo quizas en tu caso deves declarar INIT {} y en New() atribuir el tamano del array y los valores, osea que New() deverá tener un argumento más.
Code: Select all  Expand view
METHOD New(oConexion, cQuery, lGrande, nColOrd) // nColOrd nuevo argumento
DEFAULT ::nColumnasOrdenar :=  {2,3,4} // aqui estas indicando que si nColOrd no fue enviado entonces se queda por defecto con  {2,3,4}
...
...
Return Self
 

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 1:35 pm
by goosfancito
Voy a ser mas explicito asi se me entiende.

Quiero lograr pasarle como DATA a la clase tPadron las columnas que permito ordenar, ::aColumnasOrdernar pero tengo error ya que nunca toma el valor que le paso, en cambio en las otras variables (tambien arreglos) si los toma...

Code: Select all  Expand view
  DATA aColumnasOrdenar      AS Array INIT {}
   DATA aTamanioColumnas      // Tamaño de las columnas a mostrar.


En la definicion de "aTamanioColumnas" no hago un AS ARRAY INIT {} y sin embargo me toma los valores.

Chequeando un poco veo que aTamanioColumnas si veo su contenido (por debugview) en el metodo NEW tiene valores iniciales que le pongo pero recien en el metodo que las utilizo (cuando defino el browser) ahi recien tiene los valores que le pase al definirlos asi:

Code: Select all  Expand view
  oPadron                  := tPadron():new(::oConexion, ::cQuery)
   oPadron:aTamanioColumnas := {0, 210, 210, 90}
   oPadron:aColumnasOrdenar := {2,3,4}
 


PREGUNTA: cuando se crea el objeto con new no toma los valores que despues le estas pasando?

Gracias.

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 9:30 pm
by Ricardo Ramirez E.
"Que despues le estas pasando"... como? no entendi.

Pq no pasas como argumentos y luego en ::New() asignas los valores como en el ejemplo que mostré.
A ver si esto sirve, o quizas entendi mal :(

Code: Select all  Expand view
oPadron := tPadron():new(::oConexion, ::cQuery,{0, 210, 210, 90},{0, 210, 210, 90})

METHOD New(oConexion,cQuery,aTamanioColunas, aColumnasOrdenar) CLASS tPadron
::aTamanioColumnas := aTamanioColunas
::aColumnasOrdenar := ColumnasOrdenar
...
...
Return Self
 

Re: iniciar un array en objetos...

PostPosted: Sun May 10, 2009 10:32 pm
by goosfancito
Porque se me hacia mas claro pasarlo como comunmente se lo hace, por ejemplo, en la tw....
ahora ya lo resolvi. paso los parametros pero no en el NEW.


Ricardo Ramirez E. wrote:"Que despues le estas pasando"... como? no entendi.

Pq no pasas como argumentos y luego en ::New() asignas los valores como en el ejemplo que mostré.
A ver si esto sirve, o quizas entendi mal :(

Code: Select all  Expand view
oPadron := tPadron():new(::oConexion, ::cQuery,{0, 210, 210, 90},{0, 210, 210, 90})

METHOD New(oConexion,cQuery,aTamanioColunas, aColumnasOrdenar) CLASS tPadron
::aTamanioColumnas := aTamanioColunas
::aColumnasOrdenar := ColumnasOrdenar
...
...
Return Self