1. Wie sieht den der Code aus?
2. Sind die Tabellen in einer SQLite Datei
Databaseabfrage
Re: Databaseabfrage
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 37
- Registriert: 08.11.2009 09:12
Re: Databaseabfrage
Die Anzahl der verknüpften Tabellen ist völlig irrelevant. Wie MK-Soft bereits schrieb, bekommst Du - sofern die Abfrage ohne Fehler durchläuft - ein Ergebnis zurück, was Du Dir als Tabelle vorstellen kann. Alles, was Du aus den beteiligten Tabellen per SQL abgefragt oder irgendwie berechnen lassen hast, ist in dieser Ergebnistabelle enthalten. In Deinem Fall würde das in etwa so aussehen:gh249@online.de hat geschrieben: ↑06.06.2022 19:21 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.
Code: Alles auswählen
+-----------------+---------+-------+-----------+-------------+---------+-----------+-----------+---------+
| Spaltenindex -> | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+-----------------+---------+-------+-----------+-------------+---------+-----------+-----------+---------+
| | da.name | da.vz | bu.netto | bu.mwstsatz | bu.mwst | bu.brutto | bu.btext | bu.bkto |
+-----------------+---------+-------+-----------+-------------+---------+-----------+-----------+---------+
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
| | xxx | xxx | xxx | xxx | xxx | xxx | xxx | xxx |
+-----------------+---------+-------+-----------+-------------+---------+-----------+-----------+---------+
Nach einem erfolgreichem DatabaseQuery() kannst Du die Ergebnistabelle mit NextDatabaseRow() Zeile für Zeile durchlaufen und die Werte aus den einzelnen Spalten (siehe Spaltenindex) mit GetDatabaseString(), GetDatabaseQuad(), GetDatabaseLong(), GetDatabaseDouble(), GetDatabaseFloat() oder GetDatabaseBlob() auslesen. In welcher Reihenfolge du die einzelnen Spalten abfragst, ist an sich egal - die Get-Funktion sollte laut Doku eben nur einmal pro Zeile & Spalte aufgerufen werden. Die Daten können wie bereits beschrieben in 6 verschiedenen Datentypen ankommen. Es ist somit nicht ganz unwichtig zu wissen, welche Spalte welchen Datentyp liefert. Hier hilft im Zweifelsfall DatabaseColumnType() weiter.gh249@online.de hat geschrieben: ↑06.06.2022 19:52 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?
Mal angenommen:
Code: Alles auswählen
tbldatei.name = irgendein Name? -> String
tbldatei.vz = vielleicht eine Stückzahl? -> Quad
tblbuch.netto = ein Nettopreis? -> Double
tblbuch.mwstsatz = Mwst-Satz in Prozent? -> Float
tblbuch.mwst = der Mwst-Betrag? -> Double
tblbuch.brutto = ein Bruttobetrag? -> Double
tblbuch.btext = ein Buchungstext? -> String
tblbuch.bkto = ein Buchungskonto? -> Long
Code: Alles auswählen
dbid = OpenDatabase(#PB_Any, DB$, "", "" ,dbt)
If IsDatabase(dbid)
sql.s = "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;"
If DatabaseQuery(dbid, sql)
While NextDatabaseRow(dbid)
name.s = GetDatabaseString(dbid,0)
vz.q = GetDatabaseQuad(dbid,1)
netto.d = GetDatabaseDouble(dbid,2)
mwstsatz.f = GetDatabaseFloat(dbid,3)
mwst.d = GetDatabaseDouble(dbid,4)
brutto.d = GetDatabaseDouble(dbid,5)
bkto.l = GetDatabaseLong(dbid,7)
btext.s = GetDatabaseString(dbid,6)
Wend
FinishDatabaseQuery(dbid)
Else
MessageRequester("Fehler", "SQL-Abfrage fehlgeschlagen! "+DatabaseError())
EndIf
Else
MessageRequester("Fehler", "DB-Verbindung unterbrochen! "+DatabaseError())
EndIf
CloseDatabase(dbid)