revdverr,Database error beim Einfügen von Daten aus einer sql Datenbank

Startseite Foren Deutsches LiveCode-Forum revdverr,Database error beim Einfügen von Daten aus einer sql Datenbank

Ansicht von 14 Antwort-Themen
  • Autor
    Beiträge
    • #1869
      mario
      Teilnehmer

      Hallo,

      ich brauche bitte Hilfe.
      Ich habe eine sql Datenbank erstellt, welche in einem Data Grid dargestellt werden sollte. In Livecode funktioniert es auch ohne Probleme, aber in der App geht es nicht. Die Verbindung ist erfolgreich – ich bekomme eine dbid.
      Ich habe mittlerweile schon versucht, die DB in specialFolderPath(„documents“) zu kopieren, da ich vielleicht in „engine“ keine Schreibrechte habe. Aber auch so funktioniert es nicht.
      Es kommt die Fehlermeldung: (wird in die Variable „ergebnis“ geschrieben)
      Query: SELECT * FROM route
      revdberr,Database Error: Undefined SQLite error

      So sieht der Code aus:

      on openStack
      if the environment is „mobile“ then
      set the defaultfolder to specialFolderPath(„engine“)
      put URL(„file:“ & specialFolderPath(„engine“) & „/routen.db“) into URL(„file:“ & specialFolderPath(„documents“) & „/routen.db“)
      set the defaultfolder to specialFolderPath(„documents“)
      put the defaultfolder into programmPfad
      else
      put the filename of this stack into programmPfad
      set the itemDelimiter to „/“
      delete the last item of programmPfad
      end if
      end openStack

      on dbVerbinden
      put revOpenDatabase(„sqlite“, programmPfad & „/routen.db“) into dbid
      end dbVerbinden

      on datenHolen
      put „SELECT * FROM routen“ into sql
      put revDataFromQuery(tab,return,dbid,sql) into ergebnis
      set the dgtext of group „routen“ on card „Streckenauswahl“ to ergebnis
      end datenHolen

      Ich habe schon sehr viel gegoogelt und viele Varianten ausprobiert, aber ich schaffe es nicht…
      Kann mir bitte wer helfen?

      LG Mario

    • #1871
      Klaus Major
      Verwalter

      Hi Mario,

      zunächst ein paar generelle Hinweise:

      on openStack
         if the environment is "mobile" then
            
            ## Den DEFAULTFOLDER zu setzen, ist hier nciht nötig
            # set the defaultfolder to specialFolderPath("engine")
            
            ## Weil Du hier mit ABSOLUTEN Pfaden arbeitest!
            put URL("file:" & specialFolderPath("engine") & "/routen.db") into URL("file:" & specialFolderPath("documents") & "/routen.db")
            
            # Auch überflüssig
            # set the defaultfolder to specialFolderPath("documents")
            put specialFolderPath("documents") into programmPfad
         else
            put the filename of this stack into programmPfad
            set the itemDelimiter to "/"
            delete the last item of programmPfad
         end if
      end openStack

      Ich nehme an, „dbid“ ist global definiert?

      Whatever, der Fehler liegt hier:

      put URL(„file:“ & specialFolderPath(„engine“) & „/routen.db“) …

      Da es sich hier nicht um reinen Text handelt, muss Du BINFILE benutzen, sonst kommt es zu unvorhergesehenen Ergebnissen, wie Du erleben durftest! 🙂

      Und natürlich vorher prüfen, ob die Datei nciht schon vorhanden ist! 😎

      put specialFolderPath(„documents“) & „/routen.db“) into tDBPath
      if there is not a file tDBPath then
      put URL(„binfile:“ & specialFolderPath(„engine“) & „/routen.db“) into URL(„binfile:“ & tDBPath)
      end if

      Gruß

      Klaus

    • #1873
      Klaus Major
      Verwalter

      Hoppla, eine Klammer zu viel:

      put specialFolderPath(„documents“) & „/routen.db“ into tDBPath

    • #1878
      mario
      Teilnehmer

      Hallo Klaus!

      Danke für deine Hilfe! Die unnötigen Skriptzeilen waren noch Überbleibsel der verzweifelten Versuche, das alles alleine zu schaffen 😉

      Ich hatte dbid nur local definiert, da sie noch nirgends anders gebraucht wurde. Das habe ich nun geändert. Auch das Skript habe ich geändert, aber leider kommt immer noch der gleiche Fehler.
      Die DB wird in „documents“ kopiert, das habe ich überprüft. Kann ich irgendwie die Größe der Datei auslesen? Vielleicht funktioniert etwas nicht beim Speichern als Standalone Application (Angehängt habe ich sie bei „Copy Files“ in den Einstellungen…)

      LG Mario

    • #1880
      Klaus Major
      Verwalter

      Hi Mario,

      eine Sache habe ich völlig üversehen!

      Alles was Du mit „Copy files…“ im Standalonebuilder mit in die Standalone kopierst, findest Du später hier wieder: specialfolderpath(„resources“)

      Also bitte mal alle specialfolderpath(„engine“) ersetzen durch specialfolderpath(„resoureces“) und nochmal testen.

      Die Größe einer Datei kannst Du über „detailed files“ herausbekommen, aber eins nach dem anderen 🙂

      Gruß

      Klaus

    • #1884
      mario
      Teilnehmer

      Hallo Klaus,

      danke für die Info bzgl. dem Speicherpfad. Da habe ich wieder etwas gelernt 😉
      Leider funktioniert es aber immer noch nicht. Weder wenn ich die DB direkt in resources ansprich, noch wenn ich sie in documents kopiere und von dort zu öffnen versuche.

      Ich habe jetzt die Daten zum Auslesen geändert (es sollen nur „Namen“ ausgelesen werden). Diese Überschrift gibt es aber gar nicht in der DB. Die Fehlermeldung in Livecode besagt, dass es die column nicht gibt. In der App bleibt die Meldung aber „undefined SQLite error“…
      Vielleicht hilft das weiter…
      Anbei das derzeitige Skript

      on openStack
      if the environment is „mobile“ then
      put specialFolderPath(„documents“) & „/routen.db“ into tDBPath
      if there is not a file tDBPath then
      put URL(„binfile:“ & specialFolderPath(„resources“) & „/routen.db“) into URL(„binfile:“ & tDBPath)
      end if
      put specialFolderPath(„documents“) into programmPfad
      else
      put the filename of this stack into programmPfad
      set the itemDelimiter to „/“
      delete the last item of programmPfad
      end if
      end OpenStack

      on dbVerbinden
      put revOpenDatabase(„sqlite“, programmPfad & „/routen.db“) into dbid
      end dbVerbinden

      on datenHolen
      put „SELECT Namen From routen“ into sql
      put revDataFromQuery(tab,return,dbid,sql) into ergebnis
      set the dgtext of group „routen“ on card „Streckenauswahl“ to ergebnis
      end datenHolen

      LG
      Mario

    • #1886
      Klaus Major
      Verwalter

      Hm, bin bald am Ende mit meinem Latein… :-/
      Schon gecheckt, ob die Verbindung auch klappt?

      on dbVerbinden
        put revOpenDatabase("sqlite", programmPfad & "/routen.db") into dbid
        if the result <> EMTPY then
            answer the result
        end if
      end dbVerbinden

      Dito für Kopieren:

      ...
      put URL("binfile:" & specialFolderPath("resources") & "/routen.db") into URL("binfile:" & tDBPath)
       if the result <> EMTPY then
            answer the result
        end if
      ...
    • #1888
      mario
      Teilnehmer

      Beim Verbinden kommt nur ein leeres Fenster, beim Kopieren kommt eine 1.

      Jetzt bin ich doch etwas verwirrt? Was genau heißt das?

    • #1890
      Klaus Major
      Verwalter

      Das liegt an meinem Vertipper, EMPTY heisst das! 😀


      ## if the result <> EMTPY then
      if the result <> EMPTY then

      Probiere es bitte damit einmal.

    • #1892
      mario
      Teilnehmer

      Jetzt kommt nur mehr die 1 bei on dbVerbinden

    • #1894
      Klaus Major
      Verwalter

      OK, zwei potentielle Fehlerquellen eliminiert! 🙂

      Mehr fällt mir aber auch nciht mehr ein, die originale Datenbank-Datei „routen.db“, die Du über „Copy files…“ Deiner Standalone hinzufügst, ist aber OK, oder?

    • #1896
      mario
      Teilnehmer

      Prinzipiell ja. Da sie in Livecode funktioniert, gehe ich davon aus. Aber ich werde mich morgen noch einmal mit dem Thema Datenbanken auseinandersetzen.
      Danke jedenfalls für deine Hilfe!

    • #1910
      mario
      Teilnehmer

      Hallo Klaus und auch der Rest der Community,

      ich habe die DB leider nicht zum Laufen gebracht…
      Ich habe sie jetzt als mySQL auf einen Server ausgelagert und nun funktioniert es 😀

      LG Mario

    • #1912
      Klaus Major
      Verwalter

      Hi Mario,

      wenn Du magst, schaue ich mir den (abgespeckten) Stack und die DB mal an.
      Falls das OK ist, schick sie an: klaus AT major-k.de

      Gruß

      Klaus

    • #1920
      Klaus Major
      Verwalter

      Zur Info für alle:

      Ich habe den Stack und die Datenbankdatei überprüft, auf dem Desktop (Standalone auf Mac) läuft alles genau so, wie es soll. Scheint also ein Android spezifisches Problemn (Bug?) zu sein.

      Da ich kein Handy o.ä. besitze, kann ich es da natürlich auch nicht überprüfen.
      Falls das also jemand mal checken möchte, bitte an Mario wenden. 🙂

Ansicht von 14 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.