Startseite › Foren › Deutsches LiveCode-Forum › Probleme mit sqlite
- Dieses Thema hat 6 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Monaten, 1 Woche von sardus.
-
AutorBeiträge
-
-
November 9, 2023 um 09:01 Uhr #47786
Guten Morgen
Ich benötige für meine Apps Zugriff auf eine sqlite-Datenbank. Das Auslesen von Daten funktioniert wunderbar. Beim Einfügen oder Ändern von Daten habe ich jedoch Probleme. Sind die folgenden Strukturen korrekt?
INSERT
put"INSERT INTO Lernstand (Aufgabe, Status) VALUES (:1,:2)" into sql revExecuteSQL dbid, sql, "gAufgabeID", "2" revCloseDatabase dbid
UPDATE
put "UPDATE Lernstand SET Status = 2 WHERE Aufgabe = gAufgabeID" into sql revExecuteSQL dbid, sql revCloseDatabase dbid<b></b>
Hätte mir da jemand einen Tipp?
-
November 9, 2023 um 12:21 Uhr #47787
Moin saardus,
ich bin nciht sicher, ob das erste Beispiel so funktioniert, bin allerdings auch kein DB Experte..
So sollte es aber funktionieren:revExecuteSQL dbid, "INSERT INTO Lernstand (Aufgabe, Status) VALUES (:1,:2)", "gAufgabeID", "2" revCloseDatabase dbid
Beim Update übergibst Du offenbar nur den NAMEN Deiner LC Variablen -> gAufgabeID
aber nicht dessen Wert.## put "UPDATE Lernstand SET Status = 2 WHERE Aufgabe = gAufgabeID" into sql ## Daher: put "UPDATE Lernstand SET Status = 2 WHERE Aufgabe = " & gAufgabeID into sql revExecuteSQL dbid, sql revCloseDatabase dbid
Probier das mal aus und berichte.
Gruß
Klaus
-
November 9, 2023 um 20:10 Uhr #47788
Herzlichen Dank Klaus! Leider funktioniert da etwas immer noch nicht.
Es könnte aber auch mit der Tabelle zu tun haben. Ich versuche mal, den Inhalt der Tabelle „Lernstand“ auszulesen.
-
November 9, 2023 um 22:27 Uhr #47789
OK, bitte halt mich auf dem Laufenden!
-
November 10, 2023 um 08:55 Uhr #47790
Guten Morgen
Leider komme ich da nicht weiter. Die Felder in der Datenbank sind alles INTEGER. Hängt es eventuell mit dem zusammen oder mit meiner Version 9.6.9?
Das Auslesen aus der Datenbank funktioniert gut. Die anderen Funktionen INSERT oder UPDATE bereiten einfach Probleme.
-
November 11, 2023 um 11:42 Uhr #47791
Hallo,
“Status” könnte ein “reserved word” sein. Also besser die Feld- & Tabellen-Namen (Lernstand, Aufgabe, Status …) immer in Backticks (numToChar(96)) setzen, gerade SQLite ist da recht heikel!
Abgesehen davon:
Mit der “(:1,:2)”-Notation bin ich schon so oft in Probleme gelaufen, ich verwende die nicht mehr.
Wenn ich SQL schreibe, mach ich das so:Zuerst formuliere ich die Query in HeidiSQL, mit Dummy-Argumenten, bis das SQL sauber läuft.
Dann kopiere ich die Query in den Text-Editor, wo ich die Zeilenlängen anpasse & meine Dummy-Argumente mit:
” & myX & ”
ersetze. Dann füge ich per Makro das “put … into strSQL” sowie die Quotes & Zeilenumbrüche (” & \) ein.Das kopiere ich nun wiederum in den LC-Editor, wo ich dann die “myX” mit den aktuellen Variablen-Namen ersetze.
Vorteil: Ich bekomme einen kompletten “strSQL”, den ich mir beim Debuggen anschauen kann.
LC macht auch nix anderes – es baut eine nurText SQL-Query, und schickt die zum Server. Und in Deinem Fall siehst Du nur mit einem Netzwerk-Sniffer, was es da eigentlich schickt :/Viel Spaß!
-
November 11, 2023 um 16:42 Uhr #47792
Danke Axwald
Ich habe eine Lösung gefunden. Anschenend gibt es Probleme, wenn ich Werte direkt in den sql-String schreiben. Wenn ich den Umweg über Variablen mache, funktioniert alles wunderbar:
put Wert1 into Input1 put Wert2 into Input2 put "INSERT INTO Lernstand (Aufgabe, Status) VALUES (:1,:2)" into sql revExecuteSQL dbid, sql, "Input1", "Input2" revCloseDatabase dbid
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.