Vorsicht: Absouter Neuling!
Habe eine Datenbank (mariadb) mit 2 Tabellen (kunden und stadt) angelegt (ext. Server, Zugriff über phpmyadmin). Der Zugriff von Lazarus auf die einzelnen Tabellen klappt (ZConnection, ZTranaction,ZQuery1kunden, DataSourcekunden, ZQuery2stadt, DataSource2stadt). Alle Daten werden in den beiden DBGrids angezeigt.
In der Tabelle kunden habe ich folgende Spalten:
kdid INT(11) AUTO_INCREMENT, PRIMÄR-Schlüssel
nachname VCHAR(30)
vorname VCHAR(30)
stadt INT(11) - Die Städtenamen sollen in einer eigenen Tabelle gepflegt werden.
Tabell stadt:
ortsname VCHAR(30).
In der 3. Tabelle (DBGrid) sollen folgende Spalten angezeigt werden:
kdid, nachname, vorname, ortsname.
ZQuery3 und DataSource3 habe ich angelegt. Im DBGRid3 wird auf ZQuery3 verwiesen. Im dritten DBGrid wird mir keine Spalte ortsname zur Verfügung gestellt.
In der Eigenschaft SQL habe ich "SELECT * FROM kunden" eingetragen. Hier muss sicher was anderes hin.
Eine Änderung in "SELECT kunden.kdid, kunden.nachname, kunden.vorname, kunden.stadt
FROM kunden, stadt
WHERE kunden.stadt = stadt.ortsname" brachte leider nicht das gewünschte Ergebnis.
Was mache ich wenn ich in einer Tabelle 3 oder mehr spalten aus verschiedenen Tabellen benötige?
Leider reichen meine SQL-Kenntnisse nicht aus. In vielen Beispielen wird nur der Zugriff auf eine Tabelle gezeigt,
Datenbank abfrage
-
- Beiträge: 25
- Registriert: Sa 15. Feb 2025, 13:33
Re: Datenbank abfrage
Problem mittlerweile selbst gelöst.
Im ZQuery3 muss unter SQL folgende eingetragen werden:
SELECT
kunden.kdid,
kunden.nachname,
kunden.vorname,
stadt.ortsname
FROM
kunden,
stadt
WHERE
kunden.stadt = stadt.idort
Im ZQuery3 muss unter SQL folgende eingetragen werden:
SELECT
kunden.kdid,
kunden.nachname,
kunden.vorname,
stadt.ortsname
FROM
kunden,
stadt
WHERE
kunden.stadt = stadt.idort
- af0815
- Lazarusforum e. V.
- Beiträge: 6848
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Datenbank abfrage
Schau dir mal den Begriff JOIN genauer an. Dabei ist das DB System relativ egal, die Basics kann ein jedes System.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1082
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Datenbank abfrage
Diese Zeile ist das Problem. Oder besser das dahinterliegende Tabellendesign.
Du vergleichst hier kunden.stadt (das ist lt deinem Design eine integer) mit stadt.Ortsname (das ist ein Varchar(30), also ein String)
Wenn dein Design so aussieht, wird es klappen
Kunden:
kdID INT(11) AUTO_INCREMENT, PRIMÄR-Schlüssel
nachname VCHAR(30)
vorname VCHAR(30)
stadtID INT(11)
stadt:
stadtID INT(11) AUTO_INCREMENT, PRIMÄR-Schlüssel
ortsname VCHAR(30).
Es wird also in die Tabelle Kunden der Primärschlüssel aus der Tabelle stadt eingetragen und deine WHERE Klausel heisst dann
Code: Alles auswählen
WHERE kunden.stadtID = stadt.stadtID