Tabellenname in Result Object

Wie auf MySql und den ganzen Rest zugreifen ...

Tabellenname in Result Object

Beitragvon 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
Lookover
Foriker
 
Beiträge: 23
Registriert: Sa 9. Mai 2015, 23:37

Re: Tabellenname in Result Object

Beitragvon 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!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Tabellenname in Result Object

Beitragvon 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

Re: Tabellenname in Result Object

Beitragvon 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#pragma_full_column_names
Lookover
Foriker
 
Beiträge: 23
Registriert: Sa 9. Mai 2015, 23:37

Re: Tabellenname in Result Object

Beitragvon Honsek » Sa 25. Feb 2017, 20:10

Hallo Lookover,

mich würde sehr interessieren, wie und wo man diesen Aufruf im Quelltext umsetzt: PRAGMA short_column_names = OFF?, denn mich plagt gegenwärtig das selbe Problem mit den Feldnamen in meinem Datenbank-Report.

Mit freundlichem Gruß

Honsek
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
Benutzeravatar
Honsek
Foriker
 
Beiträge: 330
Registriert: Do 4. Okt 2007, 17:01

Re: Tabellenname in Result Object

Beitragvon 4tionov » Sa 25. Feb 2017, 20:59

Normalerweise genauso wie ein "Select ... ".

Also, wenn DB das Datenbank-Objekt ist, dann:
DB.Exec("PRAGMA short_column_names = OFF")

(schätze ich jetzt mal ...)
Alles Gute,

4tionov
4tionov
Foriker
 
Beiträge: 90
Registriert: So 18. Mai 2014, 22:40

Re: Tabellenname in Result Object

Beitragvon Honsek » Sa 25. Feb 2017, 23:45

Hallo,

das war der richtige Hinweis: cDBVerbindung.Exec("PRAGMA short_column_names = ON") . Kaum macht man es richtig - schon geht es! (Aber leider ist nicht Alles richtig, was so geht ...).

Vielen Dank Christof für die gute Schätzung. Mit freundlichem Gruß

Honsek

sc_report.png
DB-Report (WebPage)
sc_report.png (57.07 KiB) 221-mal betrachtet
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
Benutzeravatar
Honsek
Foriker
 
Beiträge: 330
Registriert: Do 4. Okt 2007, 17:01


Zurück zu Datenbankzugriff

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron