Probleme mit sqlite

Startseite Foren Deutsches LiveCode-Forum Probleme mit sqlite

Ansicht von 6 Antwort-Themen
  • Autor
    Beiträge
    • #47786
      sardus
      Teilnehmer

        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?

      • #47787
        Klaus Major
        Administrator

          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

        • #47788
          sardus
          Teilnehmer

            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.

          • #47789
            Klaus Major
            Administrator

              OK, bitte halt mich auf dem Laufenden!

            • #47790
              sardus
              Teilnehmer

                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.

              • #47791
                Axwald
                Teilnehmer

                  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ß!

                • #47792
                  sardus
                  Teilnehmer

                    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
                Ansicht von 6 Antwort-Themen
                • Du musst angemeldet sein, um auf dieses Thema antworten zu können.