Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error "Statement too long" en ADO sobre Foxpro (https://www.clubdelphi.com/foros/showthread.php?t=41750)

basti 24-03-2007 12:58:36

Error "Statement too long" en ADO sobre Foxpro
 
Hola, tengo el siguiente problema trabajando con ADO y tablas DBF de Foxpro (índices CDX).

Tengo que enviar datos de mi aplicación a otra aplicación ajena que no puedo modificar, que guarda los datos en formato Foxpro.

La conexión la hago mediante ADO, ya probé también con BDE pero estropea los índices. La tabla tiene una cantidad grande de campos (casi 130), por lo que supongo el el error "Statement too long" al insertar un nuevo registro, es culpa de la cantidad de campos.

He intentado hacer un insert sólo con los campos que utilizo realmente, unos 15, pero entonces me da el error de que los campos no pueden tener el valor NULL, sea cual sea el campo que dejo fuera del insert.

Lo he intentado tanto con ADOTable como con ADOQuery, con el mismo resultado.

Resumiendo, me encuentro en un círculo vicioso, si utilizo todos los campos me da el error "Statement too long" si quito campos para evitar ese error, obtento "Field xxx: cannot be null", error que arreglaría volviendo a poner todos los campos...

Gracias por adelantado.

ContraVeneno 24-03-2007 17:15:33

¿estas haciendo la modificación mediante una consulta?

si es así, esto podría ser que estas escribiendo demasiado texto en una sola línea, para lo cuál deberías partirlo en varias líneas...

utilizando:
Código Delphi [-]
with TuConsulta do begin
 ...
 SQL.Add('Update...');
 SQL.Add('campos...');
 SQl.Add('mascampos..');
 SQl.Add('where...');
 ExceSQL
 ...
end;

mightydragonlor 24-03-2007 19:27:20

Puede ser que los valores que no icluyes sea requeridos, hay que averiguar que tipo de datos almacena para poder enviar un " " o Un "0" o un Null.

basti 24-03-2007 22:07:21

Cita:

Empezado por ContraVeneno
¿estas haciendo la modificación mediante una consulta?

si es así, esto podría ser que estas escribiendo demasiado texto en una sola línea, para lo cuál deberías partirlo en varias líneas...

Sí, ahora uso una consulta, pero también lo he intentado con ADOTable y con ADOCommand y obtengo el mismo resultado. Acabo de probar separando las líneas pero sigue dando el mismo problema.

Cita:

Empezado por mightydragonlor
Puede ser que los valores que no icluyes sea requeridos, hay que averiguar que tipo de datos almacena para poder enviar un " " o Un "0" o un Null.

Ya lo intenté, pero ahí es donde está el problema. Si dejo cualquier campo sin valor me da el error de que ese campo no puede ser nulo, si le asigno valores a todos los campos (un espacio o un 0 dependiendo del tipo), me da el error "Statement too long".

Gracias por vuestras respuestas, seguiré buscando a ver si encuentro la solución.

basti 24-03-2007 22:53:48

Bueno, al fin encontré la solución, la pongo aquí por si alguien tiene el mismo problema.

Como dijo Contraveneno, tuve que separar la consulta en varias líneas. Pero aún así no iba. Lo que tuve que hacer además de separarla es usar parámetros para cada uno de los campos y darle el valor a los parámetros.

gracias por vuestra ayuda.


La franja horaria es GMT +2. Ahora son las 17:12:58.

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