PDA

Ver la Versión Completa : superADO en busca del Espacio insuficiente para completar la operación


aig
01-10-2004, 12:10:12
Hola a todos.

Tengo un problema al realizar una select desde un componente tAdoQuery contra una b.d. Sql Server, utilizando Delphi 6.

La select principal tiene varios inner join.
Una columna se obtiene a partir de otra select anidada.
Y por último en el WHERE uno de los valores de una condición se obtiene a partir de una select en otra tabla.
Es decir una select normalita..... ;)

Esta instrucción funciona correctamente desde el Administrador Corporativo de SqlServer. Tambien funciona si se añade directamente a la propiedad SQL del componente tAdoQuery.

Pero el problema aparece si se añade por código a la propiedad
SQL del componente ....sql.add('.... . Al ejecutar la aplicación aparece el error: Espacio insuficiente para completar la operación.

Mas información: si la aplicación se ejecuta fuera de delphi el mensaje de error es un Acces Violation... en el módulo ntdll.dll



(a partir de esta linea el mensaje es irrelevante....solo tiene la función de desahogo personal e intransferible...) :)
No sé si el problema está en el componente, en el equipo local, en el servidor, en el sql server, en los diez mandamientos o el protocolo de Kioto......por tanto no sé donde buscar la solución: en la cara oculta.. , en la biblia (de delphi por supuesto), o en el libro de todas las respuestas que apareció en cronicas ...

marto
01-10-2004, 12:50:36
Wop!

El hecho que el error salte en castellano, me hace pensar que sea un error del servidor, pero no estoy seguro.
En cualquier caso, te propongo una tontería como un piano, pero igual cuela. Cuando haces strings.add, obviamente, generas una nueva linia. Cada cambio de línea son dos caracteres más, ergo... porqué no pruebas a meterlo todo en una linia?

Si esto no te funciona, otra opción es substituir alguna de las subselects por vistas, eso te ahorrará mucho espacio.

Gydba
01-10-2004, 13:32:09
Hola,

No utilizo ADO, pero probaría lo que dice el amigo Marto. Además, y puede ser otra tontería, antes de hacer el ADD deberías comprobar que no te esté agregando eso a otra sentencia anterior, por lo cual un CLEAR (creo que era ese) no vendría nada mal.

Si vos decís que en el Administrador Corporativo te funciona bien entonces en algo le estás errando desde Delphi, o por lo menos eso creo.

rafita
01-10-2004, 13:54:22
Hola,

Yo he utilizado ADO muy poco, lo que unido a mis pocos conocimientos de Delphi y SQL Server me hacen poco apropiado para resolver tu problema, pero quería aportar una idea:

Haz un procedimiento almacenado.

Un saludo.

aig
01-10-2004, 18:03:02
Bueno, muchas gracias por las respuestas..

La solución o el porqué de este problema es algo que se convierte en un reto personal.

La select es para obtener un informe determinado y ya le hemos dado la vuelta para conseguirlo de otra forma.

El tema está ahora en averiguar si estamos metiendo la pata en alguna parte del código o simplemente es un fallo del componente, del Sistema Operativo o de ???

Marto: porqué no pruebas a meterlo todo en una linia?
Esto ya lo habiamos hecho el mensaje de error seguía apareciendo.
Cuando dices mensaje del servidor te refieres al Sql Server?. Lo digo porque normalmente suelen ser en ingles y al ser en español yo pienso mas que puede tratarse de un error en el S.O. local.

Gydba : por lo cual un CLEAR (creo que era ese) no vendría nada mal
Si que hacemos un clear al inicio del código.

Rafita: Haz un procedimiento almacenado
Gracias pero la cuestión es averiguar donde está el fallo (puede que sea nuestro)