Seite 1 von 1

Tabellenname in Result Object

Verfasst: Mo 7. Mär 2016, 16:06
von Lookover
Hallo

Ich habe ein recht eigenartiges Problem.
Ich verwende SQLite und bin damit sehr glücklich.

Nun installiere ich mein Gambas Programm auf einem anderen Computer und dort bekomme ich die Fehlermeldung:

Unknown Field Table.Column

Nach langem Debugen komme ich drauf, dass auf dem anderen PC der Gambas Interpreter das Resultobject ohne den Tabellennahmen erwartet.
also

Code: Alles auswählen

dim tmp as Result
tmp["Tabelle.Spalte"]

bzw.
tmp["Spalte"]



Das eine Gerät akzeptiert beide Varianten und das neue Gerät akzeptiert NUR die schreibweise ohne Tabellennamen.
Die Gambas Versionen weichen nicht ab, obwohl ich nicht glaube, dass ein derart elementare Änderung von Version zu Version unterschiedlich ist.

Das wäre nun ein riesen Aufwand das im gesamten Programm umzuschreiben.

BZW: Was kann der Grund dafür sein ?


Danke und lg

Re: Tabellenname in Result Object

Verfasst: Di 8. Mär 2016, 12:35
von tux_
Die Datenbank-Komponente in Gambas basiert auf Treibern. Wenn du dich zu einer SQLite3-DB verbindest, wird intern der SQLite3-Treiber mit der Connection und allen aus der Connection hervorgehenden Objekten assoziiert. Die Result-Klasse tut dann nichts weiter als Aufrufe an sich in Aufrufe an den Treiber zu konvertieren, der seinerseits stark von der Programmbibliothek des DMBS abhaengt. Ist denn die SQLite3-Version auf beiden Systemen verschieden?

Tabellenname in Result Object

Verfasst: Fr 18. Mär 2016, 08:54
von Lookover
Hallo.
Ja, ich habe nun nachgesehen.

Das sind ganz geringfügig unterschiedliche sqlite3 Versionen.
Warum aber ändert sich in SQLite ein derartig grosses Element grundsätzlich ?

Ich habe viel und in alle Richtungen recherchiert , konnte leider keinen Lösungsansatz finden.
Ich fand beispielsweise diesen "Sqlite-Befehl"

Code: Alles auswählen

.headers ON


Ich nehme an, dieser greift nur wenn ich auf der Shell direkt in die SQLite Datenbank verbunden bin.
BZW:
Grundsätziche andere Frage:
Gibt es eine Möglichkeit direkt aus gambas diese SQlite Befehle, die mit "." beginnen auszuführen.
Also zb ".schema"

Wobei ich fürchte dass wird mir nichts helfen, weil wie gesagt ich annehme sich dieses ".headers ON" nur auf die SQLIte Console bezieht.

Hast du eine Idee, wie ich das nun lösen könnte.
Ich muss mittelfristig mein Programm auf andere Distros portieren können.
Das bedeutet, ich müsste alle querys umschreiben.

querys umschreiben deswegen, weil:
Wenn ich

Code: Alles auswählen

select * from Table angebe

angebe, habe ich mein beschriebenes Problem

gebe ich allerdings

Code: Alles auswählen

select Column1.Table,Column2.Table,Column3.Table,Column4.Table from Table

an, bekomme ich das Resultobject so wie ich es brauchen würde.

Vielen Dank und
lg aus Wien

Re: Tabellenname in Result Object

Verfasst: Di 7. Jun 2016, 22:33
von Lookover
Nach einer sehr sehr langen Reise konnte ich die Lösung selbst finden:
Unmittelbar nach dem vebinden, muss man diesen Aufruf durchführen:

Code: Alles auswählen

PRAGMA short_column_names = OFF
Detailierte Informationen dazu fiondet man hier:
https://www.sqlite.org/pragma.html#prag ... lumn_names