Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DSQLite - Insert (https://www.delphipraxis.net/149080-dsqlite-insert.html)

aurikel_Max 13. Mär 2010 17:33

Datenbank: SQLite • Version: 3.6.22 • Zugriff über: DSQLite3 Personal

DSQLite - Insert
 
Hey,

nachdem ich das mit dem 'Select'-"Sachen" jetzt hinbekommen habe, möchte ich etwas in meine Datenbank schreiben, allerdings durchschau ich nicht wirklich, wie das bei DSQLite3 geht.

Ich hab verschiedene Ansätze ausprobiert und da ich noch am Anfang steh, seh ich eher so :?: also so aus :idea:.

Also es geht darum, dass ich in einer Prozedur ein TDISQLite3UniDirQuery erstelle, darüber greif ich zuerst auf eine Datenbank zu und möchte später wieder mehrere Werte speichern.

Meine Ansätze waren folgende:

Delphi-Quellcode:
sql.InsertSQL :=
      'INSERT INTO tabelle2(wert1,wert2,wert3) VALUES (' + #39 +
      (sql.FieldByName('wert1').AsString)
      + #39 + ', ' + #39 + wert2 + #39 + ', ' + #39 + wert3 +
      #39 + ');';
sql.Insert;
sql.Next;
(die verschiedenen Sachen heißen anders, die Namen sollen nur zur Verdeutlichung dienen)

Dabei bekomme ich bei "sql.Next" die folgende Fehlermeldung (die auch auftritt, wenn da ein anderer Befehl wie sql.Close steht)
Zitat:

Cannot modify a read-only dataset.
Das kann ich mir eigentlich nicht erklären, da weder die TDISQLite3UniDirQuery noch die Komponente, über die der Zugriff auf die Datenbank (TDISQLite3Database), eine read-only Eigenschaft besitzen. (im Admintool hab ich (bewusst) auch nichts dergleichen eingetragen)


Mein nächster Ansatz war, dass ich die TDISQLite3Database-Komponente benutze, die ich für den Zugriff auf die Datenbank sowieso benutze. Mein Ansatz sah so aus:

Delphi-Quellcode:
DISQlite3Database.Execute('INSERT INTO tabelle2(wert1,wert2,wert3) VALUES (' + #39 +
      (sql.FieldByName('wert1').AsString)
      + #39 + ', ' + #39 + wert2 + #39 + ', ' + #39 + wert3 +
      #39 + ');');
Dabei tritt die folgende Fehlermeldung auf:
Zitat:

SQLite3 Error 5 - database is locked.
Das kann ich mir auch nicht erklären, da ich nichts dergleichen veranlasst habe.


Ich hoffe, ihr könnt etwas mit meiner Beschreibung anfangen :(

Ich danke euch jedenfalls

Liebe Grüße.

ryLIX 13. Mär 2010 21:50

Re: DSQLite - Insert
 
Delphi-Quellcode:
DISQLite3db.Execute16('INSERT INTO ' + tblName + ' VALUES (NULL,"' + Wert + '","' + WERT + '", "")');
Schau dir die Demos von Disqlite an. Da ist alles dabei.
Disqlite bietet mehrere Möglichkeiten Transaktionen auszuführen.

aurikel_Max 13. Mär 2010 22:42

Re: DSQLite - Insert
 
Zitat:

Zitat von ryLIX
Delphi-Quellcode:
DISQLite3db.Execute16('INSERT INTO ' + tblName + ' VALUES (NULL,"' + Wert + '","' + WERT + '", "")');
Schau dir die Demos von Disqlite an. Da ist alles dabei.
Disqlite bietet mehrere Möglichkeiten Transaktionen auszuführen.

Um mal die Demo-Dateien außer Acht zu lassen (die schau ich mir morgen nochmal genau an, das hatte ich zwar in den letzten Tagen schonmal gemacht, allerdings nicht mit dem erhofften Ergebnis), ist das was du oben schreibst, nicht das gleiche, wie ich es ausführe (nur mit Execute16), wobei auch hier ja auch der Fehler mit "locked database" auftritt (hab es mit Execute16 ausprobiert) und ich nicht weiß, woran das liegt. (oder vertue ich mich da jetzt)
Danke für Deinen Beitrag, die Demo-Dateien schau ich mir morgen nochmal an (wie gesagt) und dann editier ich diesen Post oder schreib einen neuen.

Gute nacht. :cat:

Edit: Klappt mittlerweile alles, mein "Fehler" bestand darin, dass ich nicht wusste, dass mein ClientDataSet die Datenbankkomponente, obwohl ich sie kurz zuvor disconnecten ließ, erneut connecten ließ.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz