FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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:
Y, posteriormente, hago un loadFromDataset para cargarlo en una tKbmMemTable:
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. |
#2
|
|||
|
|||
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.
|
#3
|
||||
|
||||
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. |
#4
|
|||
|
|||
Cita:
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. |
|
|
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 |
|