Newsgroup: it.comp.lang.delphi
Titolo: [Dove sbaglio-XE10] Connessione a db sqlite su device android

Salve ragazzi!
Premetto che ho seguito alla lettera questo articolo:
 
http://docwiki.embarcadero.com/RADStudio/XE8/en/Mobile_Tutorial:_Using_FireDAC_in_Mobile_Applications_%28iOS_and_Android%29
 
 
...ho un problema....
Nel mio striminzito progettino faccio una semplice connessione ad un db 
(nessun errore di connessione) e provo a fare una semplice query...però 
dice sempre che non trova la tabella
 
[FIREDAC][Phys][SQLite] ERROR: no such table: anag.
 
Sono certo che la tabella anag esiste poichè se faccio una query sul 
medesimo db da windows, i dati saltano fuori.
La query è semplicissima:
 
query:='SELECT nome FROM anag';
 
e la eseguo così:
 
FDConnection1.ExecSQL(query,nil,results);
 
la connessione la faccio così:
 
   FDConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'cathealt.db');
   FDConnection1.Connected:=True;
 
e se controllo FDConnection1.Connected risulta true (quindi è connesso)
 
nelle impostazioni di deployment il remote path è ".\asset\internal"
 
 
Idee? Sono ore che ci sbatto la testa... :(
 
 
PS: L'unica cosa che vedo di diverso è che nel deployment il local path 
è vuoto...

Elimina il nome della connessione che è utilizzato sotto Windows(rimanendolo vuoto in designtime o da codice usi ifdef Windows o android, ioshit se ti serve x entrambe le piattaforme e gestisci il nomeconnessione) selezioni il driver sqlite che viene cancellato quando elimini il nome della connessione. 
 
In beforeconnection puoi anche usare
 
FDConnection1.params.database:=etc.etc.
 
Se non attivi la connessione al db di conseguenza non puoi collegare ne tabella ne interrogarla ed e normale che da esso non visualizzi dati e ti dovrebbe ti dovrebbe dare un errore tipo non trovo nome tabella se ti risulta questo errore significa che non hai fatto i collegamenti giusti. Infatti rileggendo ciò che hai scritto e il tipo di errore che riporta in tal caso. 
 

 
Scusate il ritardo nella risposta...ma sono stato fuori città per lavoro...
Dunque...windows propro non lo considero, lavoro sul device e basta...
La stringa di connessione la genero al runtime così:
 
FDConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'cathealt.db');
 
FDConnection1.Connected:=True;
 
e se controllo lo stato di connessione è a true...quindi è connesso...
 
Altre idee?
 

 e se controllo lo stato di connessione è a true...quindi è connesso...
 
Perché usi il componente *TFDConnection* per eseguire direttamente la query e non uno dei componenti preposti a questo scopo? :|
 
-- 
MARCO BREVEGLIERI (Software and Web Developer)
 #Home: 
http://www.marco.breveglieri.name
 
 #Blog: 
http://www.compilaquindiva.com
 
 #DelphiPodcast: 
http://www.delphipodcast.com
 

Ha ragione Marco. Usa fdquery


 
Grazie! funge!
 
Potresti comunque spiegarmi perchè è meglio usare il componente di query 
invece del metodo che stavo tendando io? (per chiarirmi le idee....ci 
mancherebbe altro!)
 
 

 mancherebbe altro!)
 
Ho avuto il "sospetto" che il metodo ExecSQL() fosse più indicato per l'esecuzione di statement di modifica dei dati (UPDATE, DELETE, INSERT, ecc.) o DDL (modifica della struttura del DB) e non di selezione (SELECT).
 
La documentazione sembrerebbe confermare:
http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.Client.TFDCustomConnection.ExecSQL
 
 
Ciao,
  Marco.
