Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   unable to open database file (https://www.clubdelphi.com/foros/showthread.php?t=84359)

barakuda 10-10-2013 03:56:24

unable to open database file
 
Buenas noches, o días ...
Cita:

Exception class TDBXError with message 'unable to open database file'. Process Project2.apk (22789)
Pues ese es precisamente el mensaje de error que me devuelve la aplicación al ejecutar mi código al compilar para android sin embargo si lo compilo para win32 funciona sin problemas.
Estoy intentando conectar a una BD en SQLite pero sin éxito al hacerlo para Android; les dejo el código por si ven algo que me pueda dar una idea que por que esta fallando, gracias de ante mano y un saludo.
Código Delphi [-]
procedure TForm2.connectButtonClick(Sender: TObject);
begin

  SQLConnection1.Params.Add('database=C:\test.db');
  try
    SQLConnection1.Connected := true;
    executeButton.Enabled := true;
    outputMemo.Text := 'Connection established!';
  except
    on E: EDatabaseError do
      ShowMessage('Exception raised with message' + E.Message);
  end;
end;

procedure TForm2.executeButtonClick(Sender: TObject);
var
  results: TDataSet;
  query: String;
begin
  query := 'SELECT * FROM Usuarios;';

  try
    SQLConnection1.Execute(query, nil, results);
  except
    on E: Exception do
      outputMemo.Text := 'Exception raised with message: ' + E.Message;
  end;
  while NOT results.Eof  do
   begin
  Form2.outputMemo.Lines.Add(results.FieldByName('nombre').AsString);
   results.Next;
   end;
end;

Casimiro Notevi 10-10-2013 10:17:17

Código:

SQLConnection1.Params.Add('database=C:\test.db');
Android no entiende esa ruta típica de sistemas windows.

Neftali [Germán.Estévez] 10-10-2013 10:48:20

Échale un vistazo a este documento.
Tal y como dice Casimiro, el path tal y como lo has puesto fallará en Android.

Para ello hay una clase TPath. Revisa la propiedad GetDocumentsPath.

Aquí tienes otro ejemplo.

barakuda 11-10-2013 02:20:19

Buenas de nuevo;

Primero quiero dar las gracias a Casimiro por comentar en donde y por que estaba el fallo
En segundo lugar (voy por orden), a Neftali por darme la pista por donde indagar
Ya resolví el problema y ya, por fin, me conecta les comento por si a alguien le puede servir también de ayuda.
  • Primero deben de dar de "alta" su BBDD en el Deployment Manager
  • Y luego llamarla:
Código Delphi [-]
SQLConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetSharedDocumentsPath, 'test.db');

Total de codigo:
Código Delphi [-]
procedure TForm2.connectButtonClick(Sender: TObject);
begin
   SQLConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetSharedDocumentsPath, 'test.db');
  try
    SQLConnection1.Connected := true;
    executeButton.Enabled := true;
    outputMemo.Text := 'Conexión Establecida !!!!';
  except
    on E: EDatabaseError do
      ShowMessage('Exception raised with message' + E.Message);
  end;
end;

procedure TForm2.executeButtonClick(Sender: TObject);
var
  results: TDataSet;
  query: String;
begin
  query := 'SELECT * FROM testtable;';

  try
    SQLConnection1.Execute(query, nil, results);
  except
    on E: Exception do
      outputMemo.Text := 'Exception raised with message: ' + E.Message;
  end;
  while NOT results.Eof  do
   begin
  Form2.outputMemo.Lines.Add(results.FieldByName('Name').AsString);
   results.Next;
   end;
end;

Gracias y un saludo.!!!

Neftali [Germán.Estévez] 11-10-2013 14:22:19

Gracias a tí por compartir el código.
^\||/

gandalf_uy 15-10-2013 02:38:16

Cita:

Empezado por barakuda (Mensaje 468175)
  • Primero deben de dar de "alta" su BBDD en el Deployment Manager

Como hago para darla de alta en el "Deployment Manager"?

Yo lo que quiero hacer es tener una base SQLite en mi PC y poder copiarla a mi dispositivo Android.

Alguna idea?


Gracias!
Saludos

barakuda 15-10-2013 04:37:46

nas..!
En la barra ... Project > Deployment
Clic en Add file, el icono "posit con chispa" y buscas allá donde tengas la bbdd.
En Plataforms clic en [...] y deseleccionas los sistemas que no quieras yo solo dejo Android.
En Remote Path pon: assets\

te dejaría una captura pero no puedo

Casimiro Notevi 15-10-2013 10:28:46

Cita:

Empezado por barakuda (Mensaje 468318)
te dejaría una captura pero no puedo

¿Por qué no puedes?

gandalf_uy 15-10-2013 17:04:45

Ya hice lo de agregar la bd al Deployment Manager con "assets\" en el Remote Path.

Esto debería hacer que cuando compilo y ejecuto la aplicación directamente sobre mi dispositivo real (no emulador), me copia esta base local al dispositivo?

Si es así no estoy logrando que suceda... El remote path "assets\" que significa?

Gracias...

barakuda 15-10-2013 18:06:54

Nas ...
Cita:

Empezado por Casimiro Notevi (Mensaje 468334)
¿Por qué no puedes?

No puedo pq cuando le doy al icono de insertar imagen no me hace nada.

Cita:

Casimiro Notevi
por lo de antes nada, recorde que con [img]____[/img] se puede hacer tambien, sorry!!
Cita:

Esto debería hacer que cuando compilo y ejecuto la aplicación directamente sobre mi dispositivo real (no emulador), me copia esta base local al dispositivo?
Si
Cita:

Si es así no estoy logrando que suceda... El remote path "assets\" que significa?
assets: es donde se guardan los fichero que iremos necesitando una vez el programa este en marcha.
El directorio donde te deja la bbdd que se encuentra dentro de tu projecto.... Android\Debug\tu projecto\assets cuando compila
Acuerdate luego de llamarla:
Código Delphi [-]
SQLConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetSharedDocumentsPath, 'aqui_tu_bbdd');
Si ves que no te funciona pega parte de tu código y le echamos un vistazo.

Casimiro Notevi 15-10-2013 18:23:19

1 Archivos Adjunto(s)
Cita:

Empezado por barakuda (Mensaje 468361)
No puedo pq cuando le doy al icono de insertar imagen no me hace nada.

¿No te sale una ventanita pidiendo la URL de la imagen?

barakuda 15-10-2013 18:26:42

Cita:

Empezado por Casimiro Notevi (Mensaje 468362)
¿No te sale una ventanita pidiendo la URL de la imagen?

Tienes toda la razón el problema es y me pasa a menudo tengo activado el bloqueador de pop-up y no es la 1ª vez que me sucede, ya lo desbloquee para futuros post
gracias y perdón por las molestias.

barakuda 16-10-2013 03:12:43

Vuelvo a subir la imagen que por manazas borre! :(


Neftali [Germán.Estévez] 16-10-2013 10:08:11

Muchas gracias.
^\||/^\||/

gandalf_uy 16-10-2013 13:17:26

Muchas gracias barakuda!

No estaba seleccionando la plataforma Android, por eso no me pasaba la bbdd!

A seguir probando...

NicolasP 26-03-2014 02:08:18

Puede ser la ver de sqlite?
 
Yo cree la base con Sqlite Administrator, en versión 3.

y seguí esta guía
docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App
pero nada, me da error "unable open database file"

Chequeo en la carpeta donde se genera el proyecto andoid y aparece bien la DB.
Probé poner el remote path
assets/
y
assets/internal
cambiando la forma de indicar el archivo en el TFDconexion (como dice al final el tutorial que cito)
pero me da el mismo error.

La copio manualmente al celular en la carpeta /Documents y le pongo así:
BASE_TM.Params.values['Database'] := '/sdcard/Documents/base.s3db';

Tampoco funciona , no encuentra el archivo.

En windows funciona perfecto. Pero en Android nada. La verdad me mató.....:

Casimiro Notevi 26-03-2014 02:15:57

Por si acaso, recuerda que en android los nombres de ficheros, directorios etc. son distintos en minúsculas y mayúsculas.

DarthGomis 04-04-2019 09:20:25

Solución
 
Después de estar investigando este hilo, al tener el mismo problema, he encontrado una solución. Básicamente hay un método de la clase TPath que te lleva a la carpeta de assets de tu proyecto.

Código Delphi [-]
TPath.GetPublicPath;

De manera que para cargar la base de datos, o cualquier archivo sería algo así.

Código Delphi [-]
FDConnection1.Params.Database := TPathCombine(TPath.GetPublicPath, 'nombrebbdd.db');

Espero que os sirva, un saludo.


La franja horaria es GMT +2. Ahora son las 03:40:57.

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