Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
gaunmanuel gaunmanuel is offline
Miembro
 
Registrado: may 2015
Posts: 40
Poder: 0
gaunmanuel Va por buen camino
Object Was Open

Que tal comunidad.
Tengo un detalle con una consulta, la cual al ejecutarla me marca: Object Was Open
Características de la aplicación:
  • Delphi 7
  • TADOQuery
  • SQL Server 2012
  • El resultado son mas de 400,000 registros y como 50 columnas(Sé que este es el problema el error es normal con está cantidad de información)
ahora bien, buscando en la red, encontré que para solucionar estableces:
Código Delphi [-]
qry.CursorLocation := clUseServer;
qry.CursorType: ctOpenForwardOnly;
Es correcto, con esto funciona el query, sin embargo el problema ahora esta al momento de desplegar la información en un DBGrid, no se puede desplegar ya que los DBGrid usando bookmarks

Pues bien, seguí investigando para ver si lo graba algo y cual fue mi sorpresa...
Pero me resulto algo que fue lo que hizo que escribiera a este foro:
  • Hice otra aplicación X en delphi, para estar probando...
  • y cual fue mi sorpresa, que en esta aplicación X el mismo query funciona bien!!.

Sin embargo, en mi aplicación principal, es decir en el sistema que desarrollamos, ahí no funciona, aquí sigue marcando Object was Open.
Si a alguien le paso algo similiar, le agredecería sus comentarios y/o ayuda, porque en una simple aplicacion de una forma funciona bien, pero en la otra aplicación grande ya no funciona?

Codigo Delphi:
Código Delphi [-]
query.Connection := ADOConnection;
query.Active := true;
//ambos sistemas tiene exactamente la misma ejecución
gracias.
saludos.
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.259
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Eliminas el query y vuelves a ponerlo, se han oido cosas de esas algunas veces
Responder Con Cita
  #3  
Antiguo Hace 3 Semanas
gaunmanuel gaunmanuel is offline
Miembro
 
Registrado: may 2015
Posts: 40
Poder: 0
gaunmanuel Va por buen camino
No funciono
hice la prueba creando un query nuevo, pero no.
De hecho este query se crea en runtime, por lo tanto siempre es nuevo.
Responder Con Cita
  #4  
Antiguo Hace 3 Semanas
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.947
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Prueba con las sigientes propiedades:
  • CursorLocation: clUseServer
  • CursorType: ctOpenForwardOnly
  • EnableBCD: False
  • LockType: ltReadOnly
Tener una consulta con más de 400.000 registros y un CursorLocation que no sea "server" no se si tiene mucho sentido.
Al igual que lanzar una consulta con esos resultados para mostrarlos en un Grid.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo Hace 3 Semanas
gaunmanuel gaunmanuel is offline
Miembro
 
Registrado: may 2015
Posts: 40
Poder: 0
gaunmanuel Va por buen camino
Que tal Neftali.
Si eso ya lo probé, y si funciona...
y como tu dices, no tiene sentido tener la consulta con un CursorLocation que no sea server, si es correcto!!
Aquí la cuestión era, porque en una aplicación simple que hice de prueba para verificar el query si funcionaba y en el sistema ya real no funcionaba, marcaba el :Object Was Open.

Sin embargo, creo que ya logre saber porque en una si funciona y en otra no...
Todo parece indicar que es por que la aplicación principal tiene otros queries abiertos en base a lo que necesita, por lo tanto al ejecutar este query tan grande ya no lo soporta...
En cambio la aplicación simple de prueba que hice, pues no tiene carga de nada, solo el query grande y este si lo ejecuta, sin embargo si lo ejecuto una segunda vez sin haber cerrado la aplicación, ahora si marca el error de: Object Was Open, no se si me explique?
Es decir, como que la conexión solo tiene capacidad de al menos ejecutar una vez el query pero una segunda ya no... quizá el asunto este en liberar la conexión o la memoria, pero esto no se como hacerlo, si tienes alguna idea, te lo agradecería...

gracias.
saludos.
Responder Con Cita
  #6  
Antiguo Hace 3 Semanas
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 203
Poder: 11
orodriguezca Va por buen camino
Codigo Delphi:
Código Delphi [-]
query.Connection := ADOConnection;
query.Active := true;
//ambos sistemas tiene exactamente la misma ejecución

¿Y la aplicación "X" también está conectada a un DBGRID?, ¿ y también tiene clUseServer y ctOpenForwardOnly?. Por lo general cuando se abre un cursor mantenido por el servidor (clUseServer) y de solo lectura hacia adelante (ctOpenForwardOnly) es porque se quiere hacer un procesamiento masivo de datos, quizás generar un reporte o algo similar, no para mostrarlo en un Grid, ya que el Grid requiere que el cursor pueda moverse en ambos sentidos.

Por otro lado: ¿Es realmente necesario mostrar esos 400,000 registros en un grid?
Responder Con Cita
  #7  
Antiguo Hace 3 Semanas
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.947
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por gaunmanuel Ver Mensaje
...sin embargo si lo ejecuto una segunda vez sin haber cerrado la aplicación, ahora si marca el error de: Object Was Open, no se si me explique?
Es decir, como que la conexión solo tiene capacidad de al menos ejecutar una vez el query pero una segunda ya no... quizá el asunto este en liberar la conexión o la memoria, pero esto no se como hacerlo, si tienes alguna idea, te lo agradecería...
Yo creo que los problemas vienen por lo que comentas al final. Es un tema de recursos o capacidad a la hora de gestionar Datasets muy grandes.
El error interno que se genera en ADO es DB_E_OBJECTOPEN, y está asociado a operaciones o consultas con gran cantidad de datos.
A partir de ese momento, obtienes en ADO el error que comentas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Acceso a un <object></object> carpato18 HTML, Javascript y otros 1 22-01-2008 09:18:01
Sobre error "Object reference not set to an instance of an object" fer21unmsm .NET 2 11-05-2007 21:56:46
object reference not set to arantzal Varios 3 27-01-2005 12:05:55
Install Com+ Object mrojass Providers 0 20-09-2004 18:13:05
Could not find object Raptor API de Windows 3 19-01-2004 18:11:55


La franja horaria es GMT +2. Ahora son las 06:53:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi