https://foro.gambas-es.org/viewtopic.php?f=1&t=7668
-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 09:36

Mismo Result Como Parametro De Varias Clases
-----------------------------------
Hola

Tengo varias clases, digamos clase "Cuadricula", "Calendario", "Lista" y para mi seria perfecto enviar el mismo "Result"

Pero he comprobado que tras pasarlo como parámetro a la primera clase, me obliga abrir un nuevo "Exec" y crear un nuevo "Result" para extraer los mismos datos.

1. ¿Es posible tras extraer el primer Result hacer copia a otra variable Result?
2. ¿Es posible usar el mismo Result?
3. ¿Tengo que crear un nuevo Result cada vez que lo paso a una nueva Clase?

Es pregunta de novato. Gracias.


-----------------------------------
shordi
Jueves, 29 Agosto 2019, 10:55

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
¿El código de la clase?


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 11:11

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45966"]¿El código de la clase?[/quote]

Parto de esto:
oResultado = gConn.Exec(sSQL)
oCuadricula.Cuadricula(Me, Gridviewdatos, oResultado, iColumnas)

oCuadricula.Cuadricula(Me, Gridviewdatos, oResultado, iColumnas) ' Esto me da error dentro de la clase

Esto se resuelve:

oResultado = gConn.Exec(sSQL)
oCuadricula.Cuadricula(Me, Gridviewdatos, oResultado, iColumnas)
oResultado = gConn.Exec(sSQL)
oCuadricula.Cuadricula(Me, Gridviewdatos, oResultado, iColumnas) ' Funciona, con dos hilos hacia SQLite, pero para mi esto sobrecarga el sistema. Aunque crea poco impacto


Yo he encontrado esto:

Dim aResultado As Array = oResultado.All("Realizado") ' array.all("campo") pero esto es solo un campo de oResultado, ¿que debo hacer para más campos?

Intento quitar impacto dentro del sistema, evitando mas de un hilo hacia SQLite. Pero no se si esta bien o mal, y si crea impacto o no.


-----------------------------------
shordi
Jueves, 29 Agosto 2019, 11:40

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
Ok. Pero ¿Qué es oResultado?¿Cómo está declarado?


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 11:43

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="gambafeliz" post="45968"]

Yo he encontrado esto:

Dim aResultado As Array = oResultado.All("Realizado") ' array.all("campo") pero esto es solo un campo de oResultado, ¿que debo hacer para más campos?

Intento quitar impacto dentro del sistema, evitando mas de un hilo hacia SQLite. Pero no se si esta bien o mal, y si crea impacto o no.[/quote]

Estoy terminando las pruebas pero me parece que me esta siendo útil .All("Campo"), lo que he hecho es dividir por campo lo que necesito y sale menos código y es apreciablemente mas rápido.

Pero sigo con ello, si alguien lo ve igual que yo ahora pues nada seria el camino.


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 11:44

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45970"]Ok. Pero ¿Qué es oResultado?¿Cómo está declarado?[/quote]

Dim oResultado As Result


-----------------------------------
shordi
Jueves, 29 Agosto 2019, 11:48

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
Prueba con 

Public oResult as Result

Pero sin tener un proyectito para debugear y demás... pues es difícil.

Saludos.


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 11:53

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45975"]Prueba con 

Public oResult as Result

Pero sin tener un proyectito para debugear y demás... pues es difícil.

Saludos.[/quote]

Tengo que recoger a mis nenes, después ya te digo. Gracias shordi, 

Saludos.


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 12:42

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45975"]Prueba con 

Public oResult as Result

Pero sin tener un proyectito para debugear y demás... pues es difícil.

Saludos.[/quote]

shordi definitivamente me funciona bien con 

Dim aResultado As Array = oResultado.All("Realizado")

Con lo cual con esto me quedo. Lo que yo he aprendido es que "Result" no se puede reutilizar si lo paso a otra clase como parámetro. ¿Es correcto?


-----------------------------------
shordi
Jueves, 29 Agosto 2019, 13:15

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote] Lo que yo he aprendido es que "Result" no se puede reutilizar si lo paso a otra clase como parámetro. ¿Es correcto?[/quote]
No creo.


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 14:43

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45980"][quote] Lo que yo he aprendido es que "Result" no se puede reutilizar si lo paso a otra clase como parámetro. ¿Es correcto?[/quote]
No creo.[/quote]

Te pasaré el proyecto y me aclaras que ocurre, pero voy a tardar, vale, es que estoy enfrascado en un lio de código. Cuando pueda te paso el proyectito y me das una colleja. Para aclararme.

Gracias, saludos.


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 15:16

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45980"][quote] Lo que yo he aprendido es que "Result" no se puede reutilizar si lo paso a otra clase como parámetro. ¿Es correcto?[/quote]
No creo.[/quote]

Te paso el proyecto. Es que tengo la cabeza hecha un lío. Serias tan amable de darme consejos. Me he liado tanto que no se diferencial que serializar de que no, en fin, no sabia yo que estaba yo tan mal. Necesito que pongas en orden mis conceptos, con pequeños consejos, si no es mucho lio para ti. Para mi eso es lo más importante no molestar o molestar lo mínimo. 

Gracias.

Nota: En la clase Form intento reducir el código pero al hacerlo me lio. La pregunta esta basada en la línea 180 oResultado = gConn.Exec(sSQL) y más abajo quería pasar oResultado pero no funciona y he decidido usar oResultado.All

Otra cosa en el archivo comprimido en la raíz, hay un CSV demo para que lo conviertas en el programa y lo uses para crear una tabla, pero tienes dos problemas.
1. Que no tienes la base de datos SQLite3
2. Que para arrancar el programa empieza buscando la tabla Gastos que en tu caso no existe y el programa va a petar. Esto tenia que haberlo resuelto, yo, pero lo he pospuesto.


-----------------------------------
shordi
Jueves, 29 Agosto 2019, 18:23

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
A lo de la DB y la tabla he añadido esto:
[code linenumbers=false syntax=gambas]
Public Sub Form_Open()

   Dim tDef As Variant[]

   Me.center

   Connections["Connection1"].host = Desktop.GetDirectory("DESKTOP")
   Connections["Connection1"].Name = "econ.db"
   gConn = Connections["Connection1"]
   If Not Exist(Desktop.GetDirectory("DESKTOP") &/ "econ.db") Then
      mDB.CreaDatabase(Desktop.GetDirectory("DESKTOP"), "econ.db")
      gConn.Open()
      gConn.Exec("Create TABLE `Gastos` (`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `Descripción` Text,`Importe` Float,`Cargos` Float,`Lanzamiento` Text,`Vencimiento` Text,`Realizado` Text,`Categoría` Text,`Subcategoría` Text,`Tarjeta` Text,`Cuenta` Text,`Observaciones` Text)")
   Else
      gConn.Open()
   Endif

   definirTableView
....
....
[/code]

A lo del Result... me has enviado la función que "rodea" el problema con eso de los Arrays por lo que no puedo mirar nada, pero me ha surgido una sospecha. 

La pregunta es:
En esa secuencia de funciones que recorrían el Result una tras otra...¿Volvías al principio alguna vez?
Después de un 
[code linenumbers=false syntax=gambas]while oResult.available 
...
...
wend
[/code]
El Result queda Unavailable, o sea no está apuntando a ningún registro porque "se ha pasado". Hay que volver al principio antes de hacer nada con él 
[code linenumbers=false syntax=gambas]oResult.MoveFirst()[/code]


-----------------------------------
gambafeliz
Jueves, 29 Agosto 2019, 18:59

Re: Mismo Result Como Parametro De Varias Clases
-----------------------------------
[quote user="shordi" post="45993"]A lo de la DB y la tabla he añadido esto:
[code linenumbers=false syntax=gambas]
Public Sub Form_Open()

   Dim tDef As Variant[]

   Me.center

   Connections["Connection1"].host = Desktop.GetDirectory("DESKTOP")
   Connections["Connection1"].Name = "econ.db"
   gConn = Connections["Connection1"]
   If Not Exist(Desktop.GetDirectory("DESKTOP") &/ "econ.db") Then
      mDB.CreaDatabase(Desktop.GetDirectory("DESKTOP"), "econ.db")
      gConn.Open()
      gConn.Exec("Create TABLE `Gastos` (`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `Descripción` Text,`Importe` Float,`Cargos` Float,`Lanzamiento` Text,`Vencimiento` Text,`Realizado` Text,`Categoría` Text,`Subcategoría` Text,`Tarjeta` Text,`Cuenta` Text,`Observaciones` Text)")
   Else
      gConn.Open()
   Endif

   definirTableView
....
....
[/code]

A lo del Result... me has enviado la función que "rodea" el problema con eso de los Arrays por lo que no puedo mirar nada, pero me ha surgido una sospecha. 

La pregunta es:
En esa secuencia de funciones que recorrían el Result una tras otra...¿Volvías al principio alguna vez?
Después de un 
[code linenumbers=false syntax=gambas]while oResult.available 
...
...
wend
[/code]
El Result queda Unavailable, o sea no está apuntando a ningún registro porque "se ha pasado". Hay que volver al principio antes de hacer nada con él 
[code linenumbers=false syntax=gambas]oResult.MoveFirst()[/code][/quote]

Seguro que va hacer eso. Eres un genio, no he caído por novato :)

Es mas tiene lógica, lo que ocurre es que lo envío a la clase y cuando lo pido de nuevo en la linea siguiente esta el puntero al final, vaya, es eso.

Muchichisimas gracias.


