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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2018
Arturo.Molina Arturo.Molina is offline
Miembro
 
Registrado: feb 2018
Posts: 28
Poder: 0
Arturo.Molina Va por buen camino
SQLQuery no encuentra una tabla

Hola a todos,
en un pequeño proyecto que estoy haciendo en Delphi 10.2, estoy usando una base de datos SQLite3 que tiene 2 tablas (libros y ventas).

Para atacarla, he colocado un SQLConnection y un SQLQuery, ambos de DBExpress.
Tengo en el directorio de la aplicación el archivo sqlite3.dll versión 3.23.0100, descargado esta misma mañana.
La conexión usa el driver sqlite, le coloco como parámetro la dirección de la base de datos y conecto:
Código Delphi [-]
procedure TDM.DataModuleCreate(Sender: TObject);
begin
   Conexion.LoginPrompt := false;
   Conexion.DriverName := 'sqlite';
   Conexion.Params.Add( 'Directorio = ' + ExtractFilePath( ParamStr(0) ) + 'feria.db' );
   try
     Conexion.Open;
   except
     on E: Exception do
       ShowMessage( 'Hubo un error al conectar con la base de datos' );
   end;
 end;
Hasta aquí, sin problemas.
Para obtener los datos, uso el SQLQuery así:
Código Delphi [-]
procedure TfAgregarLibros.edtISBNExit(Sender: TObject);
begin
   if edtISBN.Text <> '' then     // Buscamos si existe el libro
     if DM.QueryLibros.Active then
       Close;
     DM.QueryLibros.SQL.Clear;
     DM.QueryLibros.SQL.Add( 'SELECT * FROM libros WHERE isbn = :isbn1;' );
     DM.QueryLibros.Params.ParamByName( 'isbn1' ).AsString := edtISBN.Text;
     DM.QueryLibros.Active := true;
     ...

Y aquí me salta un error diciendo que no encuentra la tabla "libros"...
¿Álguien sabe que estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 28-05-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Para empezar deberías asegurarte de que está atacando a la base de datos que supones.
Bastaría con poner un Label.
Código Delphi [-]
Conexion.Params.Add( 'Directorio = ' + ExtractFilePath( ParamStr(0) ) + 'feria.db' );
LConexion.Caption := 'Directorio = ' + ExtractFilePath( ParamStr(0) ) + 'feria.db';

También puedes ver si en ese punto la conexión está activa. (Justo antes de hacer la consulta)
Código Delphi [-]
procedure TfAgregarLibros.edtISBNExit(Sender: TObject);
begin
   if edtISBN.Text <> '' then     // Buscamos si existe el libro
     if DM.Consexion.Active then
     begin
        if DM.QueryLibros.Active then
        [...]
     end
     else
        // Mensaje de error: La conexión no está activa

Por otro lado deberías asegurarte de que que la tabla exista en esa base de datos mediante otra herramienta.

¿Cuál es el mensaje de error, sin traducir ni interpretar, que te da la aplicación y en qué punto de la aplicación exactamente?
¿Puede ser que sea CASE SENSITIVE y la tabla se llame LIBROS o Libros?
¿Estás ejecutando la aplicación desde una unidad de red? Después de la actualización de Windos10 esto puede darte problemas.

No tengo experiencia con SQLLite específicamente, pero estas son algunas cosas que se me ocurren...
Responder Con Cita
  #3  
Antiguo 29-05-2018
Arturo.Molina Arturo.Molina is offline
Miembro
 
Registrado: feb 2018
Posts: 28
Poder: 0
Arturo.Molina Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Para empezar deberías asegurarte de que está atacando a la base de datos que supones.
Bastaría con poner un Label.


También puedes ver si en ese punto la conexión está activa. (Justo antes de hacer la consulta)


Por otro lado deberías asegurarte de que que la tabla exista en esa base de datos mediante otra herramienta.


¿Cuál es el mensaje de error, sin traducir ni interpretar, que te da la aplicación y en qué punto de la aplicación exactamente?
¿Puede ser que sea CASE SENSITIVE y la tabla se llame LIBROS o Libros?


¿Estás ejecutando la aplicación desde una unidad de red? Después de la actualización de Windos10 esto puede darte problemas.
No tengo experiencia con SQLLite específicamente, pero estas son algunas cosas que se me ocurren...

Hola duilioisola, gracias por tu interés.
Antes de responderte (no te ofendas, no lo digo con ningún tipo de acritud) te comento que llevo ya unos cuantos años desarrollando con Delphi y Lazarus, aunque perdí mi cuenta de Club Delphi y por eso aparezco sin post.

Sí, está comprobado que la base de datos es esa, que contiene la tabla "libros", que está en el sitio adecuado, y verificado con una utilidad externa, y no, no es case sensitive. La aplicación será de escritorio, nada de red (hubiera usado un SGBD diferente). También he comprobado si estaba activa la conexión antes de activar el query.

El mensaje de error, sin traducir ni interpretar, es:

Project Feria.exe raised exception class TDBXError with message 'no such table: libros'.

Acabo de comprobar que, en diseño, si establezco las propiedades correspondientes, tanto la conexión como el query se activan sin problemas y el sistema funciona, devolviendo los datos correctos... ????????
Responder Con Cita
  #4  
Antiguo 29-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Lo has seguido paso a paso con el depurador hasta que hace la conexión?
Por lógica, si no encuentra la BD es que está en otro sitio, o es otra, o no tiene permisos para acceder a ese directorio.
Eso es independiente de la experiencia de cada uno
Responder Con Cita
  #5  
Antiguo 29-05-2018
Arturo.Molina Arturo.Molina is offline
Miembro
 
Registrado: feb 2018
Posts: 28
Poder: 0
Arturo.Molina Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Lo has seguido paso a paso con el depurador hasta que hace la conexión?
Por lógica, si no encuentra la BD es que está en otro sitio, o es otra, o no tiene permisos para acceder a ese directorio.
Eso es independiente de la experiencia de cada uno

Gracias Casimiro.

Sí, el depurador salta justo al intentar activar el query, y el problema no es la base de datos, la encuentra, y el SQLConnectrion la abre sin problemas, el fallo es que no encuentra la tabla libros dentro de la base de datos (que por supuesto existe y contiene datos).
Lo que más me sorprende es que no falle poniendo las propiedades en tiempo de diseño.

Saludos
Responder Con Cita
  #6  
Antiguo 29-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Qué cosa tan extraña.
Prueba a cambiarle el nombre a la tabla.
Luego crea una nueva tabla libros.


O también genera una nueva base de datos, a ver si hay algún espacio o caracter "raro" por ahí.
Responder Con Cita
  #7  
Antiguo 29-05-2018
Arturo.Molina Arturo.Molina is offline
Miembro
 
Registrado: feb 2018
Posts: 28
Poder: 0
Arturo.Molina Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Qué cosa tan extraña.
Prueba a cambiarle el nombre a la tabla.
Luego crea una nueva tabla libros.


O también genera una nueva base de datos, a ver si hay algún espacio o caracter "raro" por ahí.

Nada Casimiro, que no hay manera.
He creado varias veces la base de datos con nombres diferentes, con la tabla he hecho igual. He colocado sqlite3.dll en el directorio de la aplicación, en el system32 de windows, borrado, descargado de nuevo (por si estuviera corrupto)...
He borrado toda los archivos de la aplicación y he reiniciado el pc, he creado un nuevo proyecto solo con el acceso a la base de datos, y hace exactamente lo mismo.
Si coloco las propiedades en tiempo de diseño, funciona sin problemas, si lo hago en tiempo de ejecución, no encuentra la tabla
Responder Con Cita
  #8  
Antiguo 29-05-2018
Arturo.Molina Arturo.Molina is offline
Miembro
 
Registrado: feb 2018
Posts: 28
Poder: 0
Arturo.Molina Va por buen camino
Bueno, por fin he localizado el problema, parece mentira la de dolores de cabeza que puede dar una tontería.

Coloco la solución, por si a álguien le pasa alguna vez lo mismo:
La línea:
Código Delphi [-]
Conexion.Params.Add( 'Database = ' + ExtractFilePath( ParamStr(0) ) + 'feria.db' );

tiene un error de concepto (fallo mío, por el sistema de codificación que uso)

Debería ser así:
Código Delphi [-]
Conexion.Params.Add( 'Database=' + ExtractFilePath( ParamStr(0) ) + 'feria.db' );


Por si no lo notais, os diré que los espacios que hay antes y después de signo igual eran los que estaban fastidiando.
Gracias a los dos por vuestro interés Casimiro y duilioisola

Saludos a todos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Traer campos que se encuentra en la tabla principal novato_erick SQL 4 27-11-2012 12:36:51
no encuentra tabla, que yo no he llamado! Nomad SQL 1 10-04-2010 17:29:11
estado en el que se encuentra una tabla ercrizeporta Conexión con bases de datos 1 23-10-2006 16:17:29
Insolito, no encuentra la tabla!! Mauro.NET Conexión con bases de datos 1 29-03-2005 21:30:56


La franja horaria es GMT +2. Ahora son las 19:41:20.


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