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

Dieses Thema enthält 14 Antworten und 2 Teilnehmer. Es wurde zuletzt aktualisiert von  Klaus Major vor 1 Jahr, 7 Monate.

  • 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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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. 🙂

Du musst angemeldet sein, um auf dieses Thema antworten zu können.