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
oakley

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

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
 
#2

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
 
#3

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
 
#4

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
Rollo62

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

AW: SQLite unter Android

  Alt 1. Jul 2019, 14:58
Ich arbeite jetzt weder mit UniDacx, noch mit TMS, aber es müsste so etwas in der Art wie unten dort geben um das UI-Update beim Zeicnen zu verhindern, so das erst nach dem ganzen Update der Screen upgedatet wird.
Das s.u. könnte das Problem erklären wenn Du schon sehr viele Datensätze in der DB hast.

Super onShow funktioniert es mit UniConnection1.Connect;
Code:
    TMSFMXGrid1.BeginUpdate;
    UniQuery1.ControlsDisable; // Kenne UniDac nicht, müsste es aber geben
    try

   
    finally
        UniQuery1.ControlsEnable;
        TMSFMXGrid1.EndUpdate;
    end;
Ob dein Ansatz mit Execute funktioniert bei UniDac habe ich nicht gecheckt, aber Du köntest stattdessen einfach UniQuery1.Active := True; setzen, es könnte aber auch alles Mögliche bei der Konfiguration in die Hose gehen.

Wenn die DB noch leer ist würde ich erstmal debuggen bis zu welcher Stelle Du kommst, um festzustellen was genau jetzt nicht geht.

Zitat:
Rollo Du schreibst Du legst Dir die Aktionen zeitversetzt. Machst Du das mit Timern?
Im Prinzip ja, ich habe mir da aber eine bequeme, threadsichere Klasse drumrum gekapselt.
Mit dieser Klasse kann ich eine anonyme Prozedur aufrufen, die dann mit einem Delay aufgerufen wird um Timings zu erzeugen.

Im Prinzip gibt es für solche Zwecke auch den TIdleWorker von Sir Rufo, ich hatte damit allerdings irgendwann mal ein Problem unter Android, dass die IdleMessages nicht aufgerufen wurden, seitdem bin ich wieder auf die Timerversion umgestiegen.
Trat immer nur selten und sporadisch auf, musste aber deswegen von dem IdleWorker wieder Abstand nehmen.
Eigentlich sollte der TIdleWorker aber super funktionieren, ich habe ihn nur danach nicht mehr getestet
(guter Hinweis das ich mir das nochmal auf die ToDo Liste schreibe ).

Geändert von Rollo62 ( 1. Jul 2019 um 15:02 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: SQLite unter Android

  Alt 1. Jul 2019, 18:32
Hallo,
Zitat:
UniQuery1.Execute;
Müsste es nicht Open (und zum Schluss dann Close) ein.
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: SQLite unter Android

  Alt 1. Jul 2019, 21:33
Zitat:
Müsste es nicht Open (und zum Schluss dann Close) ein.
Ja. Den ein Execute liefert keine Ergebnismenge zurück.
Markus Kinzler
  Mit Zitat antworten Zitat
oakley

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

AW: SQLite unter Android

  Alt 2. Jul 2019, 08:24
Ist das Open - Close eventuell für Android spezifisch?
Denn wenn ich etwas für die Windows Plattform mache bekomme ich eine Ergebnismenge mit Execute.

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:30 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