Einzelnen Beitrag anzeigen

R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

Zugriff auf SQlite extrem langsam

  Alt 1. Mär 2010, 09:16
Datenbank: SQlite • Zugriff über: sqlitewrap
Hi DP'ler,

ich habe angefangen rudimentäre Tests für ein neues Tool durchzuführen.

Folgende Vorgaben muss ich einhalten:
1.) Das Tool soll voll Datenbankunterstützt laufen.
2.) Die Schnittstelle zur Datenbank soll pur auf SQL basieren. (Rückgabe durch dynamische Arrays.)

Bei mir stellt sich jetzt, in Bezug auf SQlite, folgendes Problem:

Wir benutzen sehr viele einfache Parameterfenster. Beim öffnen der Fenster hole ich die Daten
aus der Datenbank und weisse diese den entsprechenden Feldern (Tedit, Combobox usw) zu.
Das geschieht alles automatisch und funktioniert ohne Probleme.
Beim verlassen der Fenster muss dieser Vorgang umgekehrt laufen.
Dort gibt es massive Performanceprobleme.
Das Updaten dauert für ca 50 Editfelder oder Komboboxen um die 10 Sekunden.

Delphi-Quellcode:
             if li='then li:='empty';
             SQL:='select * from Parameters where NAME = '+chr(39)+name+chr(39);
             tab := db.GetTable(sql);
             If tab.FieldAsString(1)<>li then
                begin
                  SQL:='update Parameters set VALUE = '+chr(39)+li+chr(39)+' where NAME = '+chr(39)+name+chr(39);
                  try
                    DB.ExecSQL(SQL);
                    main_form.memo1.lines.Add('update');
                  except
                    SQL:='insert into Parameters (NAME,VALUE) values ('+chr(39)+name+chr(39)+','+chr(39)+li+chr(39)+')';
                    DB.ExecSQL(SQL);
                    main_form.memo1.lines.Add('insert');
                  end;
                end;
Vielleicht hat irgendjemand eine Idee wie man das Ganze etwas beschleunigen kann.
Die memo-einträge habe ich nur zum Testen im Code!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat