![]() |
Re: TSQLiteDatabase: A SQLite3 Database Wrapper
Entschuldigung das ich mich erst heute wieder melde, hatte recht viel zu tun und das dann über die Arbeit etwas verpennt. Also was dein Problem angeht, so solltest du einfach ein simples Reset vor jedem neuverwenden des Statments aufrufen, dann sollte es gehn. Was die Performance angeht, so ist das Problem, dass wenn du 100 Einträge hinzufügst jedesmal ein Festplattenzugriff gemacht werden muss.
Delphi-Quellcode:
beschleunigt das ganze enorm. (oben Beispiel hinzugefügt)
DB.Execute('BEGIN TRANSACTION');
//INSERTS, INSERTS, INSERTS DB.Execute('END TRANSACTION'); PS: Was die Interfaces angeht, so bin ich da noch nicht ganz durchgestiegen, es ist aber jeder angehalten, der möchte, sich in diesem Bereich an dem Projekt zu beteiliegen. |
Re: TSQLiteDatabase: A SQLite3 Database Wrapper
Also in meinem Fall so:
Delphi-Quellcode:
oder?
procedure TDatabase.AddFile(FileSpecs: TFileSpecs);
var FileCmd: TSQLiteCommand; begin DB.Execute('BEGIN TRANSACTION'); FileCmd := fDB.Command('INSERT INTO FILES (FILE_PATH, FILE_EXT, FILE_TITLE, FILE_ARTIST, FILE_ALBUM, FILE_YEAR, FILE_GENRE, FILE_LENGTH) ' + 'VALUES ( ? , ? , ? , ? , ? , ? , ? , ? );'); FileCmd.Binding[1].AsString := FileSpecs.fFilePath; FileCmd.Binding[2].AsString := FileSpecs.fFileExtType; FileCmd.Binding[3].AsString := FileSpecs.fTitle; FileCmd.Binding[4].AsString := FileSpecs.fArtist; FileCmd.Binding[5].AsString := FileSpecs.fAlbum; FileCmd.Binding[6].AsString := FileSpecs.fYear; FileCmd.Binding[7].AsString := FileSpecs.fGenre; FileCmd.Binding[8].AsInteger := FileSpecs.fLength; FileCmd.Execute; FileCmd.Free; DB.Execute('END TRANSACTION'); end; |
Re: TSQLiteDatabase: A SQLite3 Database Wrapper
Das hätte keine Auswirkung auf die Performance. Du musst, wenn du weißt, dass das mehrere Inserts werden werden, diesen Prozess, z.B. eine For-Schleife, mit der Transaktion umgeben, siehe Beispiel oben. Das ist sowieso bei vielen Änderungen in der Datenbank zu empfehlen, und auch bei den meisten Datenbanken machbar. Wenn z.B. ein Problem auftritt, kannst du dann den ganzen Prozess mit einem Rollback wieder rückgängig machen, siehe dazu
![]() |
Re: TSQLiteDatabase: A SQLite3 Database Wrapper
Ah, ok. :) Und wie genau war das mit dem Reset gemeint?
|
Re: TSQLiteDatabase: A SQLite3 Database Wrapper
Ich nehme mal er meinte das so:
Code:
Achso und warum muss man ".Execute('BEGIN TRANSACTION')" aufrufen? Also ich fand es total unpraktisch und habe es so implementiert, wie bei "BeginUpdate"/"EndUpdate". Weil wenn ich das richtig noch in Erinnerung habe, dann kann man nur einmal "Begin Transaction" aufrufen.
BEGIN TRANSACTION
INSERT ... Schleife: Binds ... Exec ... Reset ... COMMIT MfG xZise |
AW: TSQLiteDatabase: A SQLite3 Database Wrapper
Hallöchen,
gibt es eigentlich eine aktuellere Version des Wrappers? Hat sich daran noch etwas getan? Gruß Wormid |
AW: TSQLiteDatabase: A SQLite3 Database Wrapper
Ich habe mal ein wenig gebuddelt und das Thema hier gefunden.
Ich stelle mir gerade die Frage, ob ich von INI zu SQLite3 umstellen sollte oder eher nicht. In einer INI-Datei meines Projektes können zwischen 1 und 100 Sektionen sein (in der Regel maximal 10) mit etwa (je nach Sektion) 20 bis 30 Schlüsseln. Es wird relativ häufig auf die einzelnen Schlüssel zugegriffen. Eigentlich sogar immer - egal, was man bei meinem Projekt macht, wird irgendetwas ausgelesen. Da stellt sich mir nun die Frage: weiterhin INI oder SQLite3? |
AW: TSQLiteDatabase: A SQLite3 Database Wrapper
Bau dir eine abstrakte Klasse, wo du die Werte abfragen kannst.
Dann dazu die konkrete für eine Ini-Datei (beim reinen Lesen bietet sich auf jeden Fall
Delphi-Quellcode:
an) und bei Bedarf weitere (die dann z.B. mit einer SQlite DB spricht).
TMemIniFile
Dann kannst du die auch direkt vergleichen, was dir genehmer ist oder was im konkreten Fall besser passt. Eine Ableitung von
Delphi-Quellcode:
die dann mit einer SQlite Datenbank spricht ist natürlich auch denkbar.
TCustomIniFile
|
AW: TSQLiteDatabase: A SQLite3 Database Wrapper
So wie ich das verstanden habe, kann ich also einfach TIniFile durch TMemIniFile austauschen.
Und dort wo gespeichert wird, müsste ich dann
Delphi-Quellcode:
aufgerufen werden.
UpdateFile
Richtig oder liege ich total falsch? |
AW: TSQLiteDatabase: A SQLite3 Database Wrapper
Richtig.
Trotz allem würde ich eine Basis-Klasse für die Einstellungen erschaffen und dann konkrete die aus einem bestimmten Topf die Daten beschaffen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 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