Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabellen verbinden (https://www.delphipraxis.net/202587-tabellen-verbinden.html)

Schuby 20. Nov 2019 14:38

Datenbank: *.mdb • Version: ? • Zugriff über: ADO

Tabellen verbinden
 
Hallo, jetzt muss ich doch etwas schreiben die Hilfe hier im Forum bringt mich nicht weiter.

Ich habe eine mdb Datenbank mit 2 Tabellen
Tabelle1. person
Tabelle2. urlaub

Von Tabelle1 nehme ich mir die id (counter) und speichere sie bei jeden neuen Datensatz
in Tabelle2 urlaub.user_id ab. Jetzt möchte ich mit FastReport eine Liste erstellen.

Ich denke das geht aber nur wenn ich die Tabellen verbinde, und da haut es nicht hin.

Delphi-Quellcode:
select
    person.*, urlaub.user_id
from
(person LEFT OUTER JOIN urlaub ON person.id=urlaub.user_id)
order by urlaub.user_id;

Könnt ihr mir bitte einen Tipp geben.

Danke

Uwe Raabe 20. Nov 2019 15:56

AW: Tabellen verbinden
 
Zitat:

Zitat von Schuby (Beitrag 1451632)
und da haut es nicht hin.

Was genau haut denn nicht hin?

mkinzler 20. Nov 2019 16:28

AW: Tabellen verbinden
 
Besser mit Aliasen

SQL-Code:
select
    p.*, u.user_id
from
    person p LEFT OUTER JOIN urlaub u ON u.user_id = p.id
order by
    u.user_id;

Schuby 20. Nov 2019 16:30

AW: Tabellen verbinden
 
Ich erkläre es mal genauer.

Also ich habe 2 Tabellen und diese wollte ich mit FastReport ausgeben.
In Tabelle1 ist der Name und Anschrift
In Tabelle2 die Urlaubsdaten
Nur der Müller hat Urlaub eingetragen,
aber alle anderen bekommen demn Urlaubsdaten vom Müller mit angezeigt angezeigt

Delphi-Quellcode:
Müller                            
25.11.2019 30.11.2019
Meier
25.11.2019 30.11.2019
Schulze
25.11.2019 30.11.2019
Da ich die id (ich habe den Counter genommen) in die Tabelle 2 bei einen neuen Datensatz schriebe kann ich die
Daten zu ordnen.

Ich dachte mir das ich die ID von Tab1 mit der ID von Tab2 joinen muss ?!
Bin ich auf den Holzweg ? Also ich sehe vor lauter Bäume den Wald nicht mehr.


mfg Schuby

mkinzler 20. Nov 2019 16:34

AW: Tabellen verbinden
 
Grundsätzlich nicht. Die Werte ohne Detaildatensatz sind NULL. Am Besten mal die Abfrage unabhängig von FastReports ausführen.
Die Reportsoftware scheint die Werte in der Anzeige nicht zurückzusetzen.

Schuby 20. Nov 2019 16:44

AW: Tabellen verbinden
 
Hierbei bekomme ich einen Fehler

Delphi-Quellcode:
select
    p.*, u.user_id
from
    person p LEFT OUTER JOIN urlaub u ON u.user_id = p.id
order by
    u.user_id;

Im Ausdruck stimmt ein Datentyp nicht überein


mfg

hoika 20. Nov 2019 17:35

AW: Tabellen verbinden
 
Hallo,
bitte noch einmal
Zitat:

Am Besten mal die Abfrage unabhängig von FastReports ausführen.
Ausserdem wäre es besser, beim Order By über die p.id zu gehen
order by
p.id;
weil die u.user_id ja NULL sein könnte

Schuby 20. Nov 2019 17:46

AW: Tabellen verbinden
 
Gleicher Fehler.. unabhängig von FastReports gemacht.

Delphi-Quellcode:
select
    p.*, u.user_id
from
    person p LEFT OUTER JOIN urlaub u ON u.user_id = p.id
order by
    p.id;
Fehler -> Im Ausdruck stimmt ein Datentyp nicht überein



Frage ? Kann es sein weil Table1 person.id ein Counter ist ?



mfg

jobo 20. Nov 2019 17:57

AW: Tabellen verbinden
 
Wenn ungewöhnliche Daten angezeigt werden und scheinbar alles stimmt, einfach mal einzeln selektieren und alles ausgeben, auch die vermeintlich gesetzten ID.

also
Code:
select * from person
und

Code:
select * from urlaub
auch nicht schlecht wäre von beiden Tabellen das Create Statement anzuzeigen / abzufragen.

Deine Frage kannst Du selber am besten beantworten, solange Du nicht den Tabellenaufbau zeigst.

"Counter" beschreibt vermutlich ein Verhalten , nicht unbedingt einen Datentyp.

Schuby 20. Nov 2019 18:03

AW: Tabellen verbinden
 
FastReport lasse ich erstmal links liegen.

Ich habe mir ADOQuery / mit einen DBGrid erstellt das ich sehe was passiert.

select * from person //ok wird angezeigt
select * from urlaub //ok wird angezeigt


Delphi-Quellcode:
Procedure TForm1.Table1_erstellen;
const
 cCRLF = #13#10;
 cCreateDaten =  'CREATE TABLE person(' + cCRLF
 + 'Id            counter,'                + cCRLF  //
 + 'datum      varchar(10),'               + cCRLF  //
 + 'name       varchar(20),'               + cCRLF  //
 usw.....
Das meinte ich mit id, weil es ein Counter ist


mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz