[RESUELTO] Error cantidad de caracteres en consulta sql
#1
Posted 20 September 2009 - 11:43 PM
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 :
como se debe manejar esto?
#2
Posted 21 September 2009 - 07:54 AM
Saludos!
#3
Posted 21 September 2009 - 08:43 AM
DMmantenimiento.ZQSERVICIOS.close; DMmantenimiento.ZQSERVICIOS.SQL.Clear; DMmantenimiento.ZQSERVICIOS.SQL.ADD(' SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid'); DMmantenimiento.ZQSERVICIOS.SQL.Add(OPCION); DMmantenimiento.ZQSERVICIOS.SQL.Add('order by acmsub.csid desc'); DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= '%'+Edit2.Text+'%'; DMmantenimiento.ZQSERVICIOS.open;
Donde opcion es una variable tipo string que se llena por ejemplo:
IF COMBOBOX1.Text='CSID' THEN OPCION:=' WHERE ACMSUB.CSID LIKE :SCSID '
Lo probé en IBexpert y el error no me lo da.
Que estoy haciendo mal?
#4
Posted 21 September 2009 - 09:02 AM
Verifica que el parámetro SCSID también sea un VarChar de 8 caracteres.
Salud OS
#5
Posted 21 September 2009 - 11:01 AM
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?
#6
Posted 21 September 2009 - 11:08 AM
De cualquier forma te adjunto una imagen de los parametros.
Salud OS
#7
Posted 21 September 2009 - 11:34 AM
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?
#8
Posted 21 September 2009 - 11:54 AM
Salud OS
#9
Posted 21 September 2009 - 12:07 PM
Lo raro de todo esto raro es que en IBexpert no me da error.
seguire probando a ver que es.
#10
Posted 21 September 2009 - 12:09 PM
Intenta modificando esta linea así:
DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= QuotedStr('%'+Edit2.Text+'%');
Salud OS
#11
Posted 21 September 2009 - 03:17 PM
#12
Posted 21 September 2009 - 04:07 PM
DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').value := QuotedStr('%'+Edit2.Text+'%');
Saludos.
#13
Posted 22 September 2009 - 07:56 AM
Gracias Felipe por responder, el codigo del query es el siguiente:
delphi
DMmantenimiento.ZQSERVICIOS.close; DMmantenimiento.ZQSERVICIOS.SQL.Clear; DMmantenimiento.ZQSERVICIOS.SQL.ADD(' SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid'); DMmantenimiento.ZQSERVICIOS.SQL.Add(OPCION); DMmantenimiento.ZQSERVICIOS.SQL.Add('order by acmsub.csid desc'); DMmantenimiento.ZQSERVICIOS.ParamByName('scsid').AsString:= '%'+Edit2.Text+'%'; DMmantenimiento.ZQSERVICIOS.open;
Donde opcion es una variable tipo string que se llena por ejemplo:
delphi
IF COMBOBOX1.Text='CSID' THEN 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?
strSQL := 'SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid ' + 'WHERE ACMSUB.CSID LIKE '+QuotedStr('%'+Edit2.Text+'%')+' order by acmsub.csid desc'; DMmantenimiento.ZQSERVICIOS.close; DMmantenimiento.ZQSERVICIOS.SQL.Clear; DMmantenimiento.ZQSERVICIOS.SQL.ADD(strSQL); 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.
#14
Posted 22 September 2009 - 09:53 AM
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
#15
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:
strSQL := 'SELECT * FROM acmsub left join servicios on acmsub.csid=servicios.csid'; IF COMBOBOX1.Text='CSID' THEN strSQL := strSQL+' WHERE ACMSUB.CSID LIKE :SCSID order by acmsub.csid desc' with DMmantenimiento do begin SQL.Clear; SQL.Add(strSQL); ParamByName('SCSID').DataType := ftString; ParamByName('SCSID').ParamType := ptInput; ParamByName('SCSID').AsString := '%'+Edit2.Text+'%'; Open; end;
Asi también debería funcionar, a esto es a lo que me refiero con definir el parámetro.
saludos