Jump to content


Photo

[RESUELTO] Error cantidad de caracteres en consulta sql


  • Please log in to reply
14 replies to this topic

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 20 September 2009 - 11:43 PM

Uso Firebird 2.1  con Zeos y delphi 7

Tengo un edit y un combobox y un boton. El combobox tiene una lista de campos que son las opciones por medio de las cuales se realizaran las consultas.

ejemplo  nombre, telefono, direccion.  Cuando escribo en el edit una palabra  aparentemente que el tamaño del campo que voy a buscar, me da un error.  ejemplo: telefono varchar 13, si escribo 123456789101 al presionar buscar me da el siguiente error, sin embargo tengo un campo llamado csid  varchar 8 y si escribo 1234567 me da este mismo error :
Imagen Enviada   



como se debe manejar esto?






  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 21 September 2009 - 07:54 AM

En conclusión, ¿como recibe la consulta tu query?, ¿la has probado directamente en tu manejado de la bd?


Saludos!
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 September 2009 - 08:43 AM

Gracias Felipe por responder, el codigo del query es el siguiente:




delphi
  1. DMmantenimiento.ZQSERVICIOS.close;
  2.   DMmantenimiento.ZQSERVICIOS.SQL.Clear;
  3.   DMmantenimiento.ZQSERVICIOS.SQL.ADD(' SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid');
  4.   DMmantenimiento.ZQSERVICIOS.SQL.Add(OPCION);
  5.   DMmantenimiento.ZQSERVICIOS.SQL.Add('order by acmsub.csid desc');
  6.   DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= '%'+Edit2.Text+'%';
  7.   DMmantenimiento.ZQSERVICIOS.open; 




Donde opcion es una variable tipo string que se llena por ejemplo:



delphi
  1. IF COMBOBOX1.Text='CSID' THEN
  2. OPCION:=' WHERE ACMSUB.CSID LIKE :SCSID '



Lo probé en IBexpert y el error no me lo da.

Que estoy haciendo mal?




  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 21 September 2009 - 09:02 AM

Hola

Verifica que el parámetro SCSID también sea un VarChar de 8 caracteres.

Salud OS
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 September 2009 - 11:01 AM

Gracias Egostar por tu respuesta 

No entiendo bien lo que me dices, pues no sabia que a los parametros se le asignaba una cantidad de caracteres

Donde le asigno esos valores al parametro?
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 21 September 2009 - 11:08 AM

Pues normalmente no se debería, sin embargo y dadas las circunstancias habrá que ver por cualquier lado, yo creo que el problema también puede venir del componente Zeos, ¿porque no intentas hacer esta misma consulta con IBX?.

De cualquier forma te adjunto una imagen de los parametros.

Salud OS
  • 0

#7 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 September 2009 - 11:34 AM

Gracias Egostar por tu respuesta.

Lo que pasa es que estaba creando el parametro en tiempo de ejecucion y por eso no le cambiaba ningun valor.

Hice lo que me indicaste y sigue igual. Estoy pensando en restringir la cantidad de caracteres que se pueden entrar en el edit, dependiendo del campo por el cual se va a realizar la consulta.  Que crees?
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 21 September 2009 - 11:54 AM

Pudiera ser, el asunto es que no coincide la longitud de alguno de los campos, por eso el error.

Salud OS
  • 0

#9 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 September 2009 - 12:07 PM

El campo por el que estoy haciendo la prueba es varchar 8 y solo estoy entrando 7 y me da el error. En ninguno de los registros ese campo pasa de 4 caracteres, pero en el futuro esto cambiara. Crees que pueda tener algo que ver con el indice u algo asi.
Lo raro de todo esto raro es que en IBexpert no me da error.
seguire probando a ver que es.


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 21 September 2009 - 12:09 PM

Hola

Intenta modificando esta linea así:



delphi
  1.   DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= QuotedStr('%'+Edit2.Text+'%');



Salud OS
  • 0

#11 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 21 September 2009 - 03:17 PM

coloca un breakpoint antes de ejecutar la consulta, una vez asignado el parametro y fijate los valores tanto del parametro como del SQL
  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 21 September 2009 - 04:07 PM

Yo creo que en cuanto a parámetros se trata es mejor usar value que especificar el tipo del campo:


delphi
  1. DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').value := QuotedStr('%'+Edit2.Text+'%');



Saludos.
  • 0

#13 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 posts
  • LocationMéxico D.F.

Posted 22 September 2009 - 07:56 AM

Gracias Felipe por responder, el codigo del query es el siguiente:




delphi
  1. DMmantenimiento.ZQSERVICIOS.close;
  2.   DMmantenimiento.ZQSERVICIOS.SQL.Clear;
  3.   DMmantenimiento.ZQSERVICIOS.SQL.ADD(' SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid');
  4.   DMmantenimiento.ZQSERVICIOS.SQL.Add(OPCION);
  5.   DMmantenimiento.ZQSERVICIOS.SQL.Add('order by acmsub.csid desc');
  6.   DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= '%'+Edit2.Text+'%';
  7.   DMmantenimiento.ZQSERVICIOS.open; 




Donde opcion es una variable tipo string que se llena por ejemplo:



delphi
  1. IF COMBOBOX1.Text='CSID' THEN
  2. OPCION:=' WHERE ACMSUB.CSID LIKE :SCSID '



Lo probé en IBexpert y el error no me lo da.

Que estoy haciendo mal?


Que tal Luke, realmente no veo que error te manda porque no está muy legible la imagen, pero porque no intentas con esto?


delphi
  1. strSQL := 'SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid '
  2. + 'WHERE ACMSUB.CSID LIKE '+QuotedStr('%'+Edit2.Text+'%')+' order by acmsub.csid desc';
  3.   DMmantenimiento.ZQSERVICIOS.close;
  4.   DMmantenimiento.ZQSERVICIOS.SQL.Clear;
  5.   DMmantenimiento.ZQSERVICIOS.SQL.ADD(strSQL);
  6.   DMmantenimiento.ZQSERVICIOS.open;


Así como tienes tu código veo que te falta definir el parámetro en runtime, y por eso creo que te manda el error, prueba con esto y así te será más fácil hasta debugear tu query.

saludos.
(y)

  • 0

#14 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 22 September 2009 - 09:53 AM

Gracias por sus respuestas

Egostar, ya habia hecho lo que me indicas, pero si lo hago asi la consulta no me arroja ningun resultado o me da error.

Eduarcol, los valores son correctos, ya tambien habia hecho eso.

Enecumene, tambien le habia cambiado a value, pero me da el mismo error. Ademas en este caso no era un factor porque todos los campos que intervienen en la consulta son varchar.


Razadi, lo que me indicas funciona correctamente,  Gracias por tu ayuda.

Me gustaria me explicaras porque dices que no he definido el parametro en runtime?

Gracias a todos por su ayuda
  • 0

#15 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 posts
  • LocationMéxico D.F.

Posted 22 September 2009 - 11:55 AM

Razadi, lo que me indicas funciona correctamente,  Gracias por tu ayuda.

Me gustaria me explicaras porque dices que no he definido el parametro en runtime?


Claro mira, lo que estas haciendo es solo especificar que hay un parámetro, en runtime pero no le asiganas las propiedades (DataType y ParamType) que necesita para identificar el parámetro, si quieres puedes probar esto usando lo que tu tienes de código:



delphi
  1.   strSQL := 'SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid';
  2.   IF COMBOBOX1.Text='CSID' THEN
  3.     strSQL := strSQL+' WHERE ACMSUB.CSID LIKE :SCSID order by acmsub.csid desc'
  4.  
  5.   with DMmantenimiento do begin
  6.     SQL.Clear;
  7.     SQL.Add(strSQL);
  8.     ParamByName('SCSID').DataType := ftString;
  9.     ParamByName('SCSID').ParamType := ptInput;
  10.     ParamByName('SCSID').AsString := '%'+Edit2.Text+'%';
  11.     Open;
  12.   end;



Asi también debería funcionar, a esto es a lo que me refiero con definir el parámetro.

saludos

  • 0




IP.Board spam blocked by CleanTalk.