Seite 1 von 2
Databaseabfrage
Verfasst: 06.06.2022 14:51
von gh249@online.de
Vermutlich sehe ich den Wald vor lauter Bäumen nicht.
Ich hoffe, dass mir irgendwer helfen kann.
Wie kann man mit PB das Ergebnis dieser Abfrage übernehmen:
sql$ = "SELECT da.name, da.vz, bu.netto, bu.mwstsatz, bu.mwst, bu.brutto, bu.btext, bu.bkto "
sql$ = sql$ + "FROM tbldatei da, tblbuch bu "
sql$ = sql$ + "WHERE da.id = bu.idbuch "
sql$ = sql$ + "ORDER BY da.name ;"
GetDatabaseString geht nicht, da ich 2 Tabellen anspreche, oder gibt es doch eine Variante?
Gibt es alternativ eine andere Möglichkeit mit PB 2 verknüpfte Tabellen abzufragen außer 2 Abfragen hintereinander zu starten ?
Re: Databaseabfrage
Verfasst: 06.06.2022 15:15
von mk-soft
GetDatabaseString gibt nicht alles zusammen zurück, sondern pro Feld.
Geht also. Muss nur die Abfrage auf die Tabellen stimmen und die Tabellen müssen in einer Datenbank sein oder der Datenbank Treiber muss dieses unterstützen.
Re: Databaseabfrage
Verfasst: 06.06.2022 16:10
von gh249@online.de
Wie spreche ich die einzelnen Felder in den 2 Tabellen an? In den GetDatabase...Befehlen habe ich keine Möglichkeit unterschiedliche Tabellen anzusprechen.
Es sind 2 miteinander über ID verknüpfte Tabellen (tbldatei, tblbuch). Die eine enthält die Namen und einige Sortierkriterien und die andere die Buchungsdaten. In einer Schleife will ich z.b. alle bereits gebuchten Dateien mit den Buchungsdaten abrufen und auflisten. Per SQL kann ich das erledigen aber wie bekomme ich die Daten in PB-Variable hinein. Nach der Abfrage habe ich keine Möglichkeit gefunden mit GetDatabase... die ermittelten Felder der beiden Tabellen anzusprechen.
Es gäbe zwar die Möglichkeit bei jeder Abfrage per SQL eine 3. Tabelle anzulegen und alles da hinein zu speichern und dann diese Tabelle anzusprechen und auszulesen aber das kann doch nicht sein, dass es keine andere direkte Möglichkeit gibt.
Re: Databaseabfrage
Verfasst: 06.06.2022 16:56
von mk-soft
Ich kenne deine verwendete Datenbank nicht und die vorhandenen Tabellen. MySQL, SQL Server (MS), SQLite ?
Aber es ist die Select Anweisung die eine gemeinsame Abfrage auf die Tabellen definiert und als einzelne Felder zurückgibt.
Ohne eine Code und die Tabellen Information geht es hier nicht weiter ...
Re: Databaseabfrage
Verfasst: 06.06.2022 19:21
von gh249@online.de
dbid = OpenDatabase(#PB_Any, DB$, "", "" ,dbt); Datenbank öffnen
sql$ = "SELECT da.name, da.vz, bu.netto, bu.mwstsatz, bu.mwst, bu.brutto, bu.btext, bu.bkto FROM tbldatei da, tblbuch bu WHERE da.id = bu.idbuch ;"
es müsste auch damit gehen:
sql$ ="SELECT da.*, bu.* FROM tbldatei da, tblbuch bu WHERE da.id = bu.idbuch ;"
DatabaseQuery(dbid, sql$)
NextDatabaseRow(dbid)
Für eine Zeile wäre das kein Problem dann würde ich 2 Abfragen scheiben , erst tbldatei Name und id auslesen, dann mit Hilfe der id die gleich der idbuch in Tblbuch ist, die Daten aus tblbuch auslesen. Aber in einer Schleife geht es mit NextDatabaseRow(dbid) nicht, da ja inzwischen die 2.Tabelle ausgelesen wurde.
Die Abfrage oben funktioniert. Ich benutze SQLite. aber die Frage ist nicht wie ich SQL umschreibe, sondern wie geht es weiter, damit ich die Daten nach PB bekomme.
Bei nur einer angesprochenen Tabelle wäre die Schleife auch kein Problem.
Abfrage usw.....
NextDatabaseRow(dbid) ; nächster Eintrag
name$ = GetDatabaseString(dbid, 1)
vz$ = GetDatabaseString(dbid, 3)
usw....
Mein Problem liegt darin, dass ich hier 2 miteinander verknüpfte Tabellen habe und nicht weiß, wie PB die einzelnen Felder von 2 Tabellen nach 1 gemeinsamen Abfrage übernehmen kann.
Re: Databaseabfrage
Verfasst: 06.06.2022 19:25
von gh249@online.de
Zusatz:
GetDatabaseString(dbid, 1) lässt sich meines Wissens nur in einer geöffneten Tabelle zur Spalte adressieren, ich suche den Weg ob und wenn ja, wie ich beim auslesen den Tabellennamen + die Spalte adressieren kann. Gibt es vielleicht noch einen anderen Befehl, den ich übersehen habe?
Re: Databaseabfrage
Verfasst: 06.06.2022 19:48
von mk-soft
Edit
Da ist dein Gedankenfehler
Sind beide Tabellen in der gleichen SQLite Datei ist Ergebnis der Abfrage die Summe/Teil aus beiden Tabellen. Sollte das Ergebnis nicht Stimmen, ist deine Abfrage falsch.
Sollte die Tabelle aus einer zweiten SQLite Datei sein, kann man diese temporäre vorher einbinden.
Muss ich mal suchen wie das ging ...
Re: Databaseabfrage
Verfasst: 06.06.2022 19:50
von gh249@online.de
Das Ergebnis stimmt ja, nur wie kann ich es nach der Abfrage in PB übernehmen?
Re: Databaseabfrage
Verfasst: 06.06.2022 19:52
von gh249@online.de
Wenn ich die Abfrage in SQLiteStudio eingebe, bekomme ich genau was ich brauche. Wie bereits geschrieben mein Problem ist , wie kann ich mit PB die Daten übernehmen?
Re: Databaseabfrage
Verfasst: 06.06.2022 20:01
von mk-soft
Code: Alles auswählen
If DatabaseQuery(0, sql)
c = DatabaseColumns(0)
While NextDatabaseRow(0)
For i = 0 To c - 1
Debug "Spalte " + i + ": " + GetDatabaseString(0, i)
Next
Debug "----"
Wend
FinishDatabaseQuery(0)
EndIf