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
        Administrator

          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
          Administrator

            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
              Administrator

                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
                  Administrator

                    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
                      Administrator

                        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
                          Administrator

                            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
                                Administrator

                                  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
                                  Administrator

                                    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.