AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Alternative für SQLite auf Android Gerät (fmx)

Alternative für SQLite auf Android Gerät (fmx)

Ein Thema von stalkingwolf · begonnen am 12. Sep 2017 · letzter Beitrag vom 15. Sep 2017
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#1

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:13
es liegt definitiv an sqlite.
Ich lade die Daten per JSON herunter.
Aber wenn ich in der Schleife um den JSONArray das ExecSQL von meinem TDataset auskommentiere, dann rast er durch den Array.

Ich lasse das aktuell noch unter Windows laufen.
Bisher auf einem UNC Pfade und nun habe ich es lokal auf meine Platte geschrieben.
Programm 0% Auslast und die Platte rattert sich nen Ast.
Und selbst auf meiner SSD ist es nicht schneller ( nur leiser )

evtl habe ich auch meine Tabelle falsch definiert.
Code:
const createflgpl_1 = 'CREATE TABLE IF NOT EXISTS FLGPL_1 ('+
        ' LG_NR TEXT NOT NULL PRIMARY KEY,'+
        ' LG_FIL TEXT,'+
        ' LG_PLATZ TEXT,'+
        ' LG_ARTIKEL TEXT,'+
        ' LG_TEIL TEXT,'+
        ' LG_BMGB REAL,'+
        ' LG_BMGV REAL,'+
        ' LG_EKPR REAL,'+
        ' LG_BMGB_ORG REAL,'+
        ' LG_BMGV_ORG REAL,'+
        ' LG_EKPR_ORG REAL,'+
        ' LG_WEDATUM TEXT,'+
        ' LG_ERSTWE TEXT,'+
        ' LG_LETZTERWE TEXT,'+
        ' LG_AEDT REAL)';


.
.
.

            if feld = 'LG_NR' then flgpl_1_insert.parambyname('LG_NR').asstring := myvalue;
            if feld = 'LG_FIL' then flgpl_1_insert.parambyname('LG_FIL').asstring := myvalue;
            if feld = 'LG_PLATZ' then flgpl_1_insert.parambyname('LG_PLATZ').asstring := myvalue;
            if feld = 'LG_ARTIKEL' then flgpl_1_insert.parambyname('LG_ARTIKEL').asstring := myvalue;
            if feld = 'LG_TEIL' then flgpl_1_insert.parambyname('LG_TEIL').asstring := myvalue;
            if feld = 'LG_BMGB' then begin
                flgpl_1_insert.parambyname('LG_BMGB').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_BMGB_ORG').asstring := myvalue;
            end;
            if feld = 'LG_BMGV' then begin
                flgpl_1_insert.parambyname('LG_BMGV').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_BMGV_ORG').asstring := myvalue;
            end;
            if feld = 'LG_EKPR' then begin
                flgpl_1_insert.parambyname('LG_EKPR').asstring := myvalue;
                flgpl_1_insert.parambyname('LG_EKPR_ORG').asstring := myvalue;
            end;
            if feld = 'LG_WEDATUM' then flgpl_1_insert.parambyname('LG_WEDATUM').asstring := myvalue;
            if feld = 'LG_ERSTWE' then flgpl_1_insert.parambyname('LG_ERSTWE').asstring := myvalue;
            if feld = 'LG_LETZTERWE' then flgpl_1_insert.parambyname('LG_LETZTERWE').asstring := myvalue;
        end;

        flgpl_1_insert.ExecSQL; // <- Kommentiere ich das aus, rennt er durch den Array

Edit : Die DB hat mit den 10.000 Datensätze dann eine Größe von 2.320kb. Also nichts.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:26
Da fehlt irgendwie der entscheidende Teil der Schleife in deinem Beispiel oben. Das "Create Table" wird aber nur einmal ausgeführt und nicht bei jedem der 10.000 Schritte, oder?

Mache mal vor (außerhalb) der Schleife ein StartTransaction und danach ein Commit. Wenn der jede Abfrage einzeln Commited wird das sicher auch langsam. Das dürfte bei anderen Datenbanken aber nicht besser sein.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:46
Interessant wäre es zu sehen, wie das Insert-Statement aussieht, im obigen Beispiel sieht man ja nur die Parameterbefüllung.

Ließe die sich eventuell etwas vereinfachen?
Delphi-Quellcode:
   if feld = 'LG_BMGBthen begin
     flgpl_1_insert.parambyname('LG_BMGB').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_BMGB_ORG').asstring := myvalue;
   end else
   if feld = 'LG_BMGVthen begin
     flgpl_1_insert.parambyname('LG_BMGV').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_BMGV_ORG').asstring := myvalue;
   end else
   if feld = 'LG_EKPRthen begin
     flgpl_1_insert.parambyname('LG_EKPR').asstring := myvalue;
     flgpl_1_insert.parambyname('LG_EKPR_ORG').asstring := myvalue;
   end else begin
     flgpl_1_insert.parambyname(feld).asstring := myvalue;
   end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:49
Vielleicht sollte man sich Array DML einmal anschauen, oder das Ganze zumindest versuchsweise in eine Transaktion packen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#5

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 11:56
Die fehlende Transaktion war es. Dachte ich könnte mir diese sparen, da wenn das Ding auf dem Pad läuft eh nu einer zugreift.

Danke für den Tipp.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#6

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 15:23
Was hast du in eine Transaktion geklammert - nur das Statement oder alles?
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
698 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 15:25
Ich bin mir nicht ganz sicher, aber ich meine dass SqlLite eh nur mit einer transaction geht. Zumindest hatte meine mobile app gemeckert, alt ich 2 transaktions gleichzeitig laufen lassen wollte
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#8

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 12. Sep 2017, 16:13
Hab nun alles drin.
musste den Code noch für Android extra anpassen, aber es funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.251 Beiträge
 
Delphi 12 Athens
 
#9

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 13. Sep 2017, 06:48
Schön für dich. Es wäre nett, wenn du die Lösung auch noch postest.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#10

AW: Alternative für SQLite auf Android Gerät (fmx)

  Alt 13. Sep 2017, 08:04
Code:
{$IFNDEF NEXTGEN}
var TD : TTransactionDesc;
 {$ENDIF !NEXTGEN}
begin
    .
    .
    {$IFNDEF NEXTGEN}
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREADCOMMITTED;  
    MobilConnection.StartTransaction(td);
    {$ELSE}
    MobilConnection.BeginTransaction;
    {$ENDIF !NEXTGEN}
    .
    .
    .
    {$IFNDEF NEXTGEN}
    MobilConnection.Commit(td);
    {$ELSE}
    MobilConnection.Commit;
    {$ENDIF !NEXTGEN}
Wobei es unter Android (Samsung Galaxy S2) immer noch langsamer als unter Windows ist. D.h ca 3sek Windows mit 10k Datensätzen zu 20s auf dem Tablet.
  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 12:54 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