AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SQLite unter Android

Ein Thema von oakley · begonnen am 26. Mär 2019 · letzter Beitrag vom 2. Jul 2019
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.175 Beiträge
 
Delphi 12 Athens
 
#1

AW: SQLite unter Android

  Alt 27. Mär 2019, 12:16
Dafür brachst Du kein UniDac, es geht mit FireDac.
Und die Datei kannst Du der App per Deployment mitgeben, falls dir das etwas weiterhilft.
Auf externe Files wirst du u.U. nur begrenzt zugreifen können, weil die App in einer Sandbox lebt.
Dann wäre es eventuell besser eine DB-Datei per Internet auszutauschen.

Rollo
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#2

AW: SQLite unter Android

  Alt 27. Mär 2019, 12:34
Hallo Rollo,

Danke für die Info. Ich habe das gerade mal probiert.
Als Verzeichnis habe ich im Deployment einfach "./" gewälht.

Ich habe in der testdb.sqlite eine Tabelle namens testtab, die ich unter Windows mit SQLiteManager erzeugt habe.

Wenn ich nun die Verbindung mache bekomme ich "no table testtab". Woher kommt das?
Aber die Verbindung funktioniert jetzt.

Ich nutze folgenden Code:

UniConnection1.Database := './testdb.sqlite';
UniConnection1.Connect;

if UniConnection1.Connected = false then
ShowMessage('Keine Verbindung zur Datenbank')
else
ShowMessage('Verbunden'); <- Zeigt er so an !

UniQuery1.Close;
UniQuery1.SQL.Text := 'SELECT * from testtab';
UniQuery1.Execute; <- no such table testtab

LG

Mirko
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.175 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQLite unter Android

  Alt 27. Mär 2019, 12:47
Du kannst versuchen einfach über Projekt\Resources und Images die Datei als Ressource anzulegen.
Das sollte normalerweise ein Deployment korrekt anlegen, auch wenn man die Resource nicht nutzt.
Der Pfad wäre dann "..\assets\internal\" wenn ich es richtig sehe.

Die Datei kann man dann wie beschrieben erreichen.
Ich würde immer erstmal mit FileExists prüfen was wo da ist.
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#4

AW: SQLite unter Android

  Alt 27. Mär 2019, 15:00
Danke für Deine Hilfe !!!

Das hat an der Resource gelegen denke ich.
Ich habe jetzt eine Verbindung und bekomme auch etwas aus der Tabelle gelesen.

Lg

Mirko
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#5

AW: SQLite unter Android

  Alt 1. Jul 2019, 13:27
Ich wollte nicht noch ein neues Thema starten weil es im Prinzip noch um die gleiche Sache geht.
Die Verbindung zu SQLite funktioniert jetzt einwandfrei mit Unidac.

Ich verwende aktuell beim onClick Event eines Buttons:

Code:

  UniConnection1.Database := TPath.Combine(TPath.GetDocumentsPath, 'testdb.sqlite');

  if UniConnection1.Connected = false then UniConnection1.Connect;
Wenn ich das gleiche nun im onCreate des Formulars mache blockiert die App.

Weil jemand woran das liegt?

LG

Mirko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: SQLite unter Android

  Alt 1. Jul 2019, 13:49
Verwende ein DataModule, welches dann als erstes erzeugt wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.175 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQLite unter Android

  Alt 1. Jul 2019, 13:54
Wenn ich das gleiche nun im onCreate des Formulars mache blockiert die App.
Am Besten legst Du alle zeitaufwändigen Operationen in OnShow der Form, im OnCreate könnte Android dich rauswerfen wenn der Thread zu lange blockiert.
Ich lege mir teilweise diese Operationen zeitversetzt in Funktionen nach OnShow, damit schonmal die App startet,
und eventuelle Datenoperationen können im Hintergrund, später erfolgen.

Ach ja, der Tipp mit DatenModulen bleibt davon natürlich unberührt, da gilt das Gleiche.
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#8

AW: SQLite unter Android

  Alt 1. Jul 2019, 14:18
Super onShow funktioniert es mit UniConnection1.Connect;
Wenn ich allerdings danach einen SELECT mache ist schon wieder Ende, die App blockt.

Code:
if UniConnection1.Connected then
begin
  UniQuery1.Close;
  UniQuery1.SQL.Text := 'SELECT * from testtable';
  UniQuery1.Execute;

  while not UniQuery1.EOF do
  begin
    TMSFMXGrid1.RowCount := TMSFMXGrid1.RowCount + 1;
    TMSFMXGrid1.Cells[0,TMSFMXGrid1.RowCount-1] := UniQuery1.FieldByName('test1').AsString;
    TMSFMXGrid1.Cells[1,TMSFMXGrid1.RowCount-1] := UniQuery1.FieldByName('test2').AsString;
    UniQuery1.Next();
  end;
end;
Wieso macht er den Connect aber die Abfrage schafft er dann nicht mehr?

Rollo Du schreibst Du legst Dir die Aktionen zeitversetzt. Machst Du das mit Timern?

LG

Mirko
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz