Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2024
Christian24 Christian24 is offline
Registrado
 
Registrado: mar 2024
Posts: 2
Poder: 0
Christian24 Va por buen camino
TADODataset "salta" la primera tupla del resultado.

Buenas, foro. Es mi primer mensaje aquí, aunque os llevo leyendo bastante tiempo.

Tengo un problema en una aplicación en la que estoy trabajando en Delphi6. Estoy pasando una serie de módulos de dbf a SQL Server.

Estoy con un módulo de reporting que por una serie de necesidades ya existentes en la aplicación, me fuerza a generar una query con bastantes left join (>15) y bastantes cláusulas en el where según los filtros indicados por el usuario. Hablamos de una tabla que potencialmente (según la instalación), puede tener más de 30 millones de tuplas.

Actualmente, estoy generando dinámicamente un ADODataset, con los siguientes parámetros:
Código Delphi [-]
dataset.CommandTimeout := 900;
dataset.CommandText := [query];
dataset.CursorLocation := clUseServer;
dataset.CursorType := ctOpenForwardOnly;
dataset.EnableBCD := False;
dataset.LockType := ltReadOnly;

Y, posteriormente, hago un loadFromDataset para cargarlo en una tKbmMemTable:
Código Delphi [-]
memTable.LoadFromDataSet(dataset, [mtcpoProperties]);


Con esto la query ejecuta con ligera rapidez (dentro de las circunstancias). Sin embargo, me encuentro que *siempre* se salta el primer registro. Si copio el commandtext que también genero dinámicamente, y lo ejecuto directamente en el mssms, veo que la primera tupla que me arroja directamente la consulta, nunca me la trae el ADODataset, sólo los registros posteriores.

Si pruebo otras configuraciones, como clUseClient, la query me trae los resultados esperados pero es significativamente más lenta, o incluso me arroja un fuera de memoria sin llegar a traer nada.

Como apunte, es el dataset directamente el que "salta" la primera tupla. Es decir, ocurre antes del loadFromDataSet.

Además, he probado a abrir el dataset antes de cargar en la tabla de memoria, hacer first / next, pero tampoco solventa el problema.

¿Alguien sabría echarme un cable para entender la naturaleza del problema?

Gracias de antemano.

Última edición por Neftali [Germán.Estévez] fecha: 27-03-2024 a las 10:37:56. Razón: Añadir TAGs al código.
Responder Con Cita
  #2  
Antiguo 26-03-2024
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 87
Poder: 10
marco3k Va por buen camino
Hola, no me ha ocurrido ese tipo de inconvenientes y siempre uso los cursores del lado del cliente para hacer llenar el adodataset, si dices que es lento la consulta, quizas algun campo donde ejecutas un where no esta indexado y por eso se ejecuta lento, revisa los campos donde haces where y que esten indexados.
Responder Con Cita
  #3  
Antiguo 26-03-2024
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: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
es un problema conocido y antiguo de los componentes ADO.
Aquí tienes un par de páginas donde se habla del tema y se dan algunas soluciones. Revísalas con cariño:
https://borland.public.delphi.databa...onous-fetching
https://supportcenter.devexpress.com...s-ado-datasets

Aunque si buscas referencias a este problema seguro que encuentras más fuentes donde se describe.
__________________
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
  #4  
Antiguo 27-03-2024
Christian24 Christian24 is offline
Registrado
 
Registrado: mar 2024
Posts: 2
Poder: 0
Christian24 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
es un problema conocido y antiguo de los componentes ADO.
Aquí tienes un par de páginas donde se habla del tema y se dan algunas soluciones. Revísalas con cariño:

Aunque si buscas referencias a este problema seguro que encuentras más fuentes donde se describe.
¡Muchas gracias, Neftali!

Estuve googleando antes de preguntar por aquí pero no encontré casi nada, el primer enlace que me pasaste me vino de perlas, con eso conseguí solventar el problema.

Un saludo.
Responder Con Cita
Respuesta



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
Extraño resultado de la función "DateUtils.MinutesBetween" dec Varios 6 23-05-2022 20:00:26
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 17:11:50
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 23:05:40
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 01:03:53
Mi primera "aplicación" turminator Varios 4 25-08-2006 18:50:18


La franja horaria es GMT +2. Ahora son las 19:49:28.


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