Startseite › Foren › Deutsches LiveCode-Forum › revdverr,Database error beim Einfügen von Daten aus einer sql Datenbank
- Dieses Thema hat 14 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 7 Jahren, 3 Monaten von Klaus Major.
-
AutorBeiträge
-
-
September 5, 2017 um 19:03 Uhr #1869
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 errorSo 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 openStackon dbVerbinden
put revOpenDatabase(„sqlite“, programmPfad & „/routen.db“) into dbid
end dbVerbindenon 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 datenHolenIch habe schon sehr viel gegoogelt und viele Varianten ausprobiert, aber ich schaffe es nicht…
Kann mir bitte wer helfen?LG Mario
-
September 5, 2017 um 20:45 Uhr #1871
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
-
September 5, 2017 um 21:03 Uhr #1873
Hoppla, eine Klammer zu viel:
…
put specialFolderPath(„documents“) & „/routen.db“ into tDBPath
… -
September 6, 2017 um 06:20 Uhr #1878
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
-
September 6, 2017 um 09:57 Uhr #1880
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
-
September 6, 2017 um 17:42 Uhr #1884
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 Skripton 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 OpenStackon dbVerbinden
put revOpenDatabase(„sqlite“, programmPfad & „/routen.db“) into dbid
end dbVerbindenon 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 datenHolenLG
Mario -
September 6, 2017 um 18:07 Uhr #1886
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 ...
-
September 6, 2017 um 18:18 Uhr #1888
Beim Verbinden kommt nur ein leeres Fenster, beim Kopieren kommt eine 1.
Jetzt bin ich doch etwas verwirrt? Was genau heißt das?
-
September 6, 2017 um 18:54 Uhr #1890
Das liegt an meinem Vertipper, EMPTY heisst das! 😀
…
## if the result <> EMTPY then
if the result <> EMPTY then
…
Probiere es bitte damit einmal. -
September 6, 2017 um 18:59 Uhr #1892
Jetzt kommt nur mehr die 1 bei on dbVerbinden
-
September 6, 2017 um 19:29 Uhr #1894
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?
-
September 6, 2017 um 19:38 Uhr #1896
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! -
September 7, 2017 um 18:03 Uhr #1910
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
-
September 7, 2017 um 19:24 Uhr #1912
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.deGruß
Klaus
-
September 8, 2017 um 15:35 Uhr #1920
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. 🙂
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.