Delphi - Quien conoce bien el TQuery?

 
Vista:

Quien conoce bien el TQuery?

Publicado por Juancho (11 intervenciones) el 26/06/2003 22:22:43
Hola a todos los foristas, tengo el siguiente problema con mi aplicación, una de las Form q tengo se puede varias veces al mismo tiempo, esta hace una consulta con un TQuery, el problema esta cuando dos Form abren el mismo Query al mismo tiempo, la q primero abrio el query y comenzo a navegar con los datos arroja un error, porq la segunda consulta borra los datos de la primera.
Como pued hacer para q el resultado de un Query pasen a otro local q yo pueda manejar y q quede desconectado del query principal.
Intente hacer lo siguiente
Querylocal: TQuery;
QueryLocal:=QuieryGeneral
Pero el QueryLocal solo es un apuntador del General, no me funciono..
Agradeceria mucho su ayuda o cualquier orientación...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

es primo mio

Publicado por yoyo (2 intervenciones) el 27/06/2003 02:16:36
:-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quien conoce bien el TQuery?

Publicado por mamcx (533 intervenciones) el 27/06/2003 03:51:26
Pues o haces 2 TQuery o los conectas a ClientDataSet...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quien conoce bien el TQuery?

Publicado por Juancho (11 intervenciones) el 27/06/2003 15:09:23
mamcx en eso pense, pero la form se puede abrir n veces, hay es donde esta mi problema, no puedo limitar el numero de aperturas..
No se si me explico bien..
Gracias de todos modos por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quien conoce bien el TQuery?

Publicado por mamcx (533 intervenciones) el 27/06/2003 16:28:22
Es indiferente si se abre la misma forma o varias formas abren los mismos datos, necesitas un modelo desconectado...

Basicamente, el mecanismo es. Abrir una conexion a la base de datos 2- Ejecutar la consulta 3- pasar los datos a memoria y desconectar...

En este caso, el uso de un TClientDataSet seria ideal, porque es una representacion en MEMORIA de los datos, como una fotografia en el instante, que ademas si lo requieres, permitiria actualizar los cambios que se le hagan y administrar los posibles conflictos. El uso de TClientDataSet NO requiere licencia en Delphi 6 e inferior si lo usas en la misma aplicacion y en Delphi 7 es totalmente gratuito, por fin!

Otra opcion, si requieres un acceso directo (aunque no es lo mas recomendado) es crear TQuerys en runtime y retornarlos, algo asi.

Funcion ObtenerConsulta(lcSql:String):TQuery
var Query:TQuery
begin
Query:=TQuery.Create...
//Te conectas y ejecutas la consulta, pones los parametros, etc...
result:=Query

Seria un codigo similar con TClientDataSet, solo que adicionalmente se desconecta la conexion a la base de datos. Para un Codigo mas robusto, te recomiento que tambien la conexion se cree en tiempo de ejecucion, ya que permitira aprovechar el pool de conexiones y el paralelismo que manejan motores como Sql Server, Interbase o Oracle. Si es un motor desktop, entonces tal vez no se obtenga una ganacia aparte de un codigo mas reusable...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

a ver si entendi

Publicado por Juancho (11 intervenciones) el 27/06/2003 18:43:12
mamcx, yo me conecto con una BD mssql a travez datamodulo q tiene un componente Tdataset y un Tquery (BDE), segun t entiendo una vez q hago una consulta con el Tquery, y comienzo a navegar por el query, todavia sigo conectado a mi BD??
Yo tenia endendido una vez q mi consulta la tenia el query, ya se desconectaba de la BD, corrigeme si estoy en un error... y no veo en donde coloco el TClientDataSet en mi datamodulo y a quien sustituiria???
Gracias de antemano por tu ayuda..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:a ver si entendi

Publicado por mamcx (533 intervenciones) el 28/06/2003 00:14:21
Pues si aun tiene asignada la propiedad conexion si esta conectado. Otra cosa es que requiera la conexion todo el tiempo. El punto es simple:

- Un Query da para un dataset
- Un query referido pro muchos dataset causa que cada dataset afecte a los otros (se referencia pero no se copia)
- Necesitas n querys x n dataset o n dataclient x n dataset.

El TClientDataset se usaria para copiar los datos del query a la memoria, se desconecta y luego se pasa al form. Es INDISPENSABLE hacerlo por codigo como te mostre, lo cual es la tecnica mas importante para lograr un ambiente escalable, cliente/servidor o multitread/multiacceso como lo necesitas.

Una vez mas:

1- Ejecuta el query tal cual, crea en codigo un tclientdataset, le pasas los datos, le asignas a nil la conexion o el query del tcliendataset y lo devuelves como una funcion o
2- Crea un query en codigo, lo ejecutas, lo desconectas y lo devuelves.

Sin embargo ahora que lo pienso BDE la conexion del tquery es indispensable (lo cual es distinto en ADO, puedes desconectarlo). Asi que la opcion 1 es la unica viable en tu caso...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:a ver si entendi

Publicado por Juancho (11 intervenciones) el 28/06/2003 00:40:50
mamcx muchas gracias por tu tiempo, voy a probar lo q me dijistes a ver q tal...
Gracias....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar