![]() |
mensaje de error al hacer consulta sql sin resultados
Hola a todos,
Con delphi6 e interbase7, dialect3. Tengo una aplicación, en la que, entre otras cosas, realizo varias consulta. Una de ellas, es una busqueda. Tengo un TEdit, en el que inserto lo que quiero buscar, y al pulsar un botón de "Buscar", me ejecuta una consulta sql, donde lo que he escrito, se busca en el campo correspondiente, usando un where field like 'TEdit.text%' Todo esto me funciona OK, mientras lo que escriba en el Tedit se encuentra en ese campo realmente, No así, cuando en respuesta a esta consulta, no hay registros resultantes. En cuyo caso, me devuelve un mensaje de error. Sé que hay una manera de manipular los mensajes de error que resultan, y me gustaría saber como se hace esto, para poner algún mensaje algo más claro, en lugar del que se muestra. Muchas gracias, Virginia |
if query1.IsEmpty then
bla....bla.. Un Saludo. |
Gracias marcoszorrilla,
pero, ¿no hay un modo de modificar o gestionar los mensajes de error resultantes? Creo recordar haber visto en algún sitio algo así, usando el try ... expect. ¿Donde pongo ese procedure? Quiero decir, si lo pongo en la tabla, en beforeopen, me abre el mensaje nada más abrir la tabla al inicio, pero no me evita que salga el error después de mostrar mi mensaje. Gracias de nuevo, Virginia |
si lo que te da error es el Open del SQL prueba a hacer algo como
Código:
try Si el error es porque la consulta está vacía y tu intentas seleccionar algún registro luego, utiliza lo que te muestra el amigo Marcos Espero te sirva |
El error que me aparece es:
Dynamic SQL Error SQL error code=-104 Unexpected end of command Como ya explique antes, me surge cuando ejecuto la consulta SQL y no encuetra registros que coincidan con los parámetros que le indico en un campo TEdit. El problema es que si me sale este mensaje, se me cierra otra tabla, que está relaccionada con esta, aunque no tiene que ver nada en la consulta, por lo que necesito poder controlar el error. Gracias por todo, a todos. Virginia |
Este error te da por una mala construcción en la sentencia SQL. Por eso te decía que siempre saques el error original de Delphi aunque lo pintes algo más bonito de la forma que te comentaba en el Post anterior. Si sólo hubieras sacado tu error personalizado, no te hubieras dado cuenta ;)
Para verificar la sentencia SQL, te recomiendo mires lo que estás lanzando con un Query.SQL.SaveToFile('c:\lolo.txt'); (por ejemplo) :) |
Hola,
Cita:
Pero, si es por una mala construcción en el SQL, ¿por que sólo me falla cuando no resultan registros de la busqueda?, esto es, cuando, por ejemplo aparece un espacio de algo que no tiene que tenerlo, o estoy buscando en un campo de text algo que comience por 'Mn' y no encuentra nada en la tabla que comience así. En cualquier caso, este es el código que tengo para la busqueda: //para, dependiendo del campo por el que vamos a querer que nos ordene la tabla //así añadir el código IF EditBuscar.Text = '' THEN BEGIN //Si no hay datos en el campo de texto para buscar //Salimos del procedure Exit; ShowMessage ('No ha insertado parámetros de busqueda'); END ELSE BEGIN //si hay parámetros de búsqueda Try FrmDModule.TbAlumnos.DisableControls; FrmDModule.TbAlumnos.Close; FrmDModule.TbAlumnos.SelectSQL.Clear; //le asignamos el SQL que tenía al inicio la tabla FrmDModule.TbAlumnos.SelectSQL.Add(FrmDModule.VAlumnosSQL); // Dependiendo del campo en el que vayamos a buscar así hacemos la busqueda con un where = o un where like IF (RCampo = 'NUMALU') THEN BEGIN //Los datos introducidos en el campo //tienen que ser numéricos //insertamos los parámetros de búsqueda en la sentencia selectSQL FrmDModule.TbAlumnos.SelectSQL.Add('WHERE ' + RCampo + ' = ' + EditBuscar.Text ); //ordenamos por ... FrmDModule.TbAlumnos.SelectSQL.Add( 'ORDER BY ' + RCampo); //abrimos la tabla END ELSE BEGIN //buscamos en campos con texto //insertamos los parámetros de búsqueda en la sentencia selectSQL FrmDModule.TbAlumnos.SelectSQL.Add('WHERE ' + RCampo + ' LIKE ''' + EditBuscar.Text + '%'' ' ); //ordenamos por ... FrmDModule.TbAlumnos.SelectSQL.Add( 'ORDER BY ' + RCampo); //abrimos la tabla END; //una vez que se ha creado la consulta es cuando abrimos la tabla FrmDModule.TbAlumnos.Open; Finally //volvemos a habilitar los controles de la tabla FrmDModule.TbAlumnos.EnableControls; End; END; Por cierto, ¿hay algún sitio donde me pueda documentar mejor sobre la manipulación de los errores?, vamos, para tener claro lo que implica el código que me has recomendado, y así poder manejarlo según mis necesidades. Muchas gracias por la ayuda, Virginia |
Cita:
Cita:
Código:
try Por cierto, has mirado qué sentencia SQL te está lanzando??? Espero te sirva |
Hola,
Cita:
select ALIASALU, APELALU, CCA, CCCALU, CODPALU, DOMIALU, EMAIL, FNACALU, INFORMALU, INFORMALU2, LASTUPDATE, NACIONAL, NIC, NIFALU, NOMAILALU, NOMALU, NOMCLAN, NUMALU, PAISALU, POBALU, PROFALU, PROVALU, RELAC, RUBRALU, SEXALU, TELFALU, TRATAMIE, TUTOR, VIAALU from ALUMNOS WHERE APELALU LIKE 'ROMERO BACHILLER%' ORDER BY APELALU Esta SI me da problemas: select ALIASALU, APELALU, CCA, CCCALU, CODPALU, DOMIALU, EMAIL, FNACALU, INFORMALU, INFORMALU2, LASTUPDATE, NACIONAL, NIC, NIFALU, NOMAILALU, NOMALU, NOMCLAN, NUMALU, PAISALU, POBALU, PROFALU, PROVALU, RELAC, RUBRALU, SEXALU, TELFALU, TRATAMIE, TUTOR, VIAALU from ALUMNOS WHERE APELALU LIKE 'ROMERO BACHILLER %' ORDER BY APELALU No encuentra en el campo "Apelalu" nada que tenga ese texto, con un espacio detras... y da error Cita:
Estoy echandole un vistazo al try ...except ..end; que me recomiendas, esto es lo que tengo: try FrmDModule.TbAlumnos.Open; except on E: Exception do begin str := 'Error abriendo TbAlumnos con el mensaje : ' + E.Message; Application.MessageBox(PChar(str), 'Atención', MB_OK); end; end; Pero al checkear el código, antes de lanzarlo, me resulta el siguiente error en el delphi: [Error] selealu.pas(169): '(' expected but ':=' found [Error] selealu.pas(169): Incompatible types [Error] selealu.pas(170): '(' expected but ')' found [Error] selealu.pas(170): Incompatible types Saludos, y gracias por la ayuda. Virginia |
acabo de probarlo y, esto compila
Código:
var |
Hola,
Cita:
También probé el código que me pasaste para el tema del mensaje de error, y efectivamente me funciona, pero tengo una duda al respecto: ¿Es necesario que el try ... expect afecte a todo el procedure? o podría aplicarlo, sólo a una parte, como hago con los try ...finally? l Lo digo porque me funciona si incluye a todo el procedure, sino, no me funciona. Es por saber si estoy haciendo algo mal yo. Por cierto, que aunque pueda controlar el mensaje, tengo un problema, y es que cada vez que me aparece este mensaje, hay una tabla, que está ligada a la tabla alumnos, por el datesource, que tiene los comentarios que de estos hacemos, y que después de este mensaje de error, se me queda cerrada. Esto me preocupa pues casi todas las tablas de mi aplicación tienen algún tipo de relacción con la de alumnos, y si se cierran cuando se escriban en la busqueda, datos de más, o nombres que no existen, va a darme muchos problemas. Gracias por la ayuda, la agradezco sinceramente. Virginia |
Cita:
|
Gracias,
efectivamente estaba haciendo algo mal. Le echaré un vistazo a la configuración de las tablas, a ver si encuentro el motivo por el que se me cierran las tablas vinculadas con la de alumnos, cuando me salta le famoso error. Saludos, Virginia |
La franja horaria es GMT +2. Ahora son las 04:37:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi