PDA

Ver la Versión Completa : unable to open database file


barakuda
10-10-2013, 03:56:24
Buenas noches, o días ...
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.
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
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 (http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App).
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 (http://stackoverflow.com/questions/18877955/delphi-xe5-sqlite-database-deployment-to-android-device-what-path)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:

SQLConnection1.Params.Values['Database'] := TPath.Combine(TPath.GetSharedDocumentsPath, 'test.db');

Total de codigo:
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
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
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 ...
¿Por qué no puedes?
No puedo pq cuando le doy al icono de insertar imagen no me hace nada.
http://farm4.staticflickr.com/3749/10293655733_92b19a0dc2_b.jpg
Casimiro Notevi por lo de antes nada, recorde que con ____ se puede hacer tambien, sorry!!
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
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:
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
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
¿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! :(

http://imageshack.us/scaled/large/197/wj0a.jpg

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
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
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.

TPath.GetPublicPath;

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

FDConnection1.Params.Database := TPathCombine(TPath.GetPublicPath, 'nombrebbdd.db');

Espero que os sirva, un saludo.