Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Delphi->SQL<-access(error si no hay datos) (https://www.clubdelphi.com/foros/showthread.php?t=35451)

Hades-Plutón 11-09-2006 18:54:07

Delphi->SQL<-access(error si no hay datos)
 
¡Hola a todos! Soy nuevo en el club, y después de echar una ojeada puedo decir que me gusta un montón, Felicidades a todos.

Ahora la pregunta: Estoy aprendiendo a hacer programas en delphi que ataquen bases de datos access. He creado una consulta que funciona sólo si devuelve resultados, si no encuentra nada en la base de datos lanza un error al activar otra consulta:

Proyect p rais exception class EOleException with message 'El valor de bof o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual'. Process stopped

el código del botón que realiza la consulta es simple:

Código Delphi [-]
      Consulta.Close;
      Consulta.SQL.Clear;
      Consulta.SQL.Text:=
      'SELECT * FROM TablaLibro WHERE Título LIKE '+QuotedStr( Ebusqueda.Text );
      flistado.Consulta.OPEN

Para realizar la conexión tengo: tAdoConnection, tDataSource, tAdoQuery y TdbGrid

Gracias.

Caral 11-09-2006 19:24:50

Hola
Trabajo con access y de vez en cuando se vuelve loca, hay que engañarla introcuciendo un registro sin sentido, pero bueno al caso en tu codigo veo que resulta bien asi:
Código Delphi [-]
Consulta.Close;
Consulta.SQL.Clear;
Consulta.SQL.Text:= 'SELECT * FROM TablaLibro WHERE Título LIKE '+QuotedStr( Ebusqueda.Text )+'';
Consulta.Filtered := True;
Tengo un codigo casi igual y funciona, pruebalo tal vez te sirva
Saludos

Hades-Plutón 11-09-2006 20:09:26

¡Muchas gracias! pero...

Si llamo a --> Consulta.Filtered := True;
en vez de a --> Consulta.open;
no aparecen los datos en el DBGrid

¿hay alguna forma de saber si la consulta recibe datos? es decir, algo así:
Código Delphi [-]
adoQuery.Close;
      adoQuery.SQL.Clear;
      adoQuery.SQL.Text:=
      'SELECT * FROM TablaLibro WHERE Título LIKE '+QuotedStr( Ebusqueda.Text )+'';
      if (adoQuery.ConsiguióDatos) then 
         adoQuery.Open

Es que creo que es ese Open el que me falla si la consulta no recibe nada de la BD access.

Gracias de nuevo.

Caral 11-09-2006 20:35:57

Hola
Hay un truco que uso para saber si una consulta se hace bien o que me envia la misma.
Código Delphi [-]
      adoQuery.Close;
      adoQuery.SQL.Clear;
      adoQuery.SQL.Text:= 'SELECT * FROM TablaLibro WHERE Título LIKE '+QuotedStr( Ebusqueda.Text )+'';
 // este mensaje se usa para saber si el sql envia lo correcto
      Showmessage(ADOQuery1.SQL.Text);
Con esto tal vez salgas de alguna duda.
Saludos

Alexander 12-09-2006 06:11:35

Actualizar
 
Esto me pasaba cuando tenia instalada la versión inicial de ADO.

Actualiza la versión y realiza las mismas consultas, para ver si te funciona.

Alexander


La franja horaria es GMT +2. Ahora son las 00:46:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi