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 05-01-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 22
David Va por buen camino
Smile Una Query me da error al pasarle una SQL larga

Hola

Explico lo que me ocurre, saco un listado de Clientes, con sus facturas, uso firebird, utilizo una una IBQuery al que engancho un provider y un TClienteDataSet. Lo que hago es que antes de abrir el client dataSet, le añado a la Query, en su SQL una cadena con los clientes que necesito, que pueden ser 100, 200, etc..., el caso es que cuando hay muchos clientes, me da error al abrir el clientDataSet.

Explico con un ejemplo más visual(los nombres de los componentes me los invento, para que se entienda mejor)
La Query , QueryCliente , tiene esta SQL : Select misCampos from TablaClientes (donde digo mis campos, pues obviamente estan CodigoCliente,Nombre,Telefono,Direccion,etc...

Código Delphi [-]

ClientDataSetCliente.Close;

// si hasta unos 100 clientes funciona bien,pero si pongo más 150 o así, ya da error
QueryCliente.SQL[3] := 'Where (Cliente in (1,2,3,4,10,12));

ClientDataSetCliente.open;

Como digo funciona hasta un número de clientes, luego da error, como si no se puediera hacer la SQL tan larga, he intentando poner la SQL en varias lineas, algo así:

Where (Cliente in (1,31,3131,12,33,
12,313,313,3131));

pero da igual, sigue dando error al pasarle una cadena de una cierta longitud.


Es inevitable, que pase esto ? o hay alguna solución, esa es mi pregunta.

Un saludo
Responder Con Cita
  #2  
Antiguo 05-01-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Hola David

Que error es el que te da en forma precisa... te da algun mensaje...

no te saldria mejor que en vez de poner el codigo, pongas algun campo en la tabla y realizas el filtro por los que cumplen dicha condicion

Salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 05-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
La cláusula IN en Firebird 1.5 tiene un límite de 1.500 elementos, puesto que dices da error en 100 o 200, creo es la forma de añadirlo al query.

No entiendo por qué accedes al SQL con índices (entre corchetes), no deberías pensar que tienes espacio en memoria asignado para trabajar con él. Dicho de otra forma, usa los métodos Add que tiene la propiedad sql.


Supongo que dicha restricción del where, lo haces en tiempo de ejecución, así que no tendrás problemas con los strings. Atención al "Add":
Código Delphi [-]
ClientDataSetCliente.Close;

QueryCliente.SQL.Add('Where (Cliente in (1,2,3,4,10,12))');
ClientDataSetCliente.open;
También podrías partir la cadena, incluso para hacerla más legible:
Código Delphi [-]
QueryCliente.SQL.Add('Where ');
QueryCliente.SQL.Add(' Cliente in (1,2,3,4,' );
QueryCliente.SQL.Add('              10,12)');

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
¿Sentencia sql muy larga? ancara MySQL 6 28-06-2007 17:54:24
URL demasiado larga halizia PHP 3 20-12-2006 14:37:38
PAsarle parametros a un trigger .. ingel SQL 2 19-05-2006 18:36:32
Pasarle un objeto a una DLL adlfv OOP 3 19-08-2005 20:42:49
Pasarle un parameto al With ...??? ingel Varios 4 30-01-2004 22:29:41


La franja horaria es GMT +2. Ahora son las 17:27:47.


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