Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite - Insert / Update beschleunigen (https://www.delphipraxis.net/161472-sqlite-insert-update-beschleunigen.html)

FredlFesl 6. Jul 2011 07:13

AW: SQLite - Insert / Update beschleunigen
 
Ein Refactoring könnte sinnvoll sein, hinterher sollte das so aussehen:

Delphi-Quellcode:
StartTransaction;
Try
  PerformDataUpdate;
  CommitTransaction;
Except
  On E:Exception Do Begin
    RollbackTransaction;
    HandleException(E);
  End
End;
Und z.B.
Delphi-Quellcode:
Procedure PerformDataUpdate;
Var
  i : Integer;

Begin
  For i:=0 to X-1 Do
    PerformSingleRecordUpdate(Data[i]);
End;
und
Delphi-Quellcode:
Procedure PerformSingleRecordUpdate(aRecord : TMyData);
Begin
  If RecordExists(aRecord) then
    PerformSQLUpdate(aRecord)
  Else
    PerformSQLInsert(aRecord);
End;
Delphi-Quellcode:
Function RecordExists (aREcord : TMyData) : Boolean;
Begin
  Result := PerformSQLSelect('Select * from MyDatable Where PKField = '+aRecord.PkField).RecordsAffected > 0;
End;
usw.
PS: Wie machst Du das eigentlich mit gelöschten Daten?

DeddyH 6. Jul 2011 07:23

AW: SQLite - Insert / Update beschleunigen
 
Eine Transaktion bedeutet ja "Alles oder Nichts", d.h. man muss sich überlegen, welche Daten unabdingbar zusammengehören. Im Fehlerfall werden dann natürlich alle Änderungen innerhalb der aktuellen Transaktion verworfen. Außerdem sollte man nach Möglichkeit lang laufende Transaktionen vermeiden. Aus diesem Grund ist es z.B. ungeschickt, Daten clientseitig zu bearbeiten und einzelne Update-Befehle zum Server zu schicken, wenn man das per SQL auch auf den Server abwälzen kann (gut, bei einem INSERT wird das ja nicht anders gehen als Einzelbefehle). Hat man sehr viele Daten, die nicht funktional voneinander abhängig sind, kann ein Commit alle X Datensätze nicht schaden. Man muss sich ja auch vor Augen halten, dass jede Transaktion den Server belastet, schließlich muss er den ganzen Schmu ja erstmal cachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.
Seite 2 von 2     12   

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