Tabellenname in Result Object

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
Lookover
Foriker
Beiträge: 23
Registriert: Sa 9. Mai 2015, 23:37
Kontaktdaten:

Tabellenname in Result Object

Beitrag von Lookover » Mo 7. Mär 2016, 16:06

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

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: Tabellenname in Result Object

Beitrag von tux_ » Di 8. Mär 2016, 12:35

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?
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Lookover
Foriker
Beiträge: 23
Registriert: Sa 9. Mai 2015, 23:37
Kontaktdaten:

Tabellenname in Result Object

Beitrag von Lookover » Fr 18. Mär 2016, 08:54

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

Lookover
Foriker
Beiträge: 23
Registriert: Sa 9. Mai 2015, 23:37
Kontaktdaten:

Re: Tabellenname in Result Object

Beitrag von Lookover » Di 7. Jun 2016, 22:33

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

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast