Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie kann ich tabellenübergreifende Daten einlesen? (https://www.delphipraxis.net/116878-wie-kann-ich-tabellenuebergreifende-daten-einlesen.html)

emsländer 8. Jul 2008 09:36

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

Wie kann ich tabellenübergreifende Daten einlesen?
 
Moin,

die query:

Delphi-Quellcode:
'select * from Akten left join Antragsteller1 on Akten.Aktennr = Antragsteller1.zu_Akte where Aktennr ='+ inttostr(aktennr);
 

      _query.sql.Text := _stmp;
      _query.open;
      if eof then begin
         showmessage('Keine Daten vorhanden'+#10#13+'Sollte eigentlich hier nicht vorkommen!');
      end else begin
        with frmmain do begin
          edt_aktennr.value := aktennr;
          edt_antragsteller_titel.text   := FieldByName('Antragsteller1.Titel').asstring;  => hier haperts
Wie kann ich die Daten von Tabelle Antragsteller1 UND Akten übernehmen?

Gruss

EL

hoika 8. Jul 2008 10:18

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Hallo,

hast du dir das Ergebnis deines Selects mal angesehen ?

Wahrscheinlich gibt es "Titel" in beiden Tabellen


Select Akten.*, Antragsteller1.Titel as AST_Titel from Akten left join Antragsteller1


Zugriff dann über FieldByName('AST_Titel').AsString



Heiko

emsländer 8. Jul 2008 10:19

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von hoika
Hallo,

hast du dir das Ergebnis deines Selects mal angesehen ?

Wahrscheinlich gibt es "Titel" in beiden Tabellen


Select Akten.*, Antragsteller1.Titel as AST_Titel from Akten left join Antragsteller1


Zugriff dann über FieldByName('AST_Titel').AsString



Heiko

Hoi,

ne - Titel gibt es nur einmal

Gruss

EL

hoika 8. Jul 2008 10:44

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Hallo,

dann halt nur FieldByName('Titel').AsString


Heiko

emsländer 8. Jul 2008 10:54

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von hoika
Hallo,

dann halt nur FieldByName('Titel').AsString


Heiko

uaaaaaaaaaa :wall: :wall: :wall:

japp .. das wars. So einfach ... und ich denk da wer weiß, was man da machen muss....



Danke!


Gruss

EL

emsländer 8. Jul 2008 15:27

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Moin,

ich hab jetzt noch ein weiteres Problem bekommen, nachdem ich das ganze ein wenig erweitern wollte:

Die Query frisst er:
Delphi-Quellcode:
  _stmp := 'Select * from Akten Ak inner join Antragsteller1 A1 on A1.zu_Akte=Ak.Aktennr '
          +' where Ak.Aktennr ='+ inttostr(aktennr);
dann aber bei:
Delphi-Quellcode:
          edt_antragsteller_titel.text   := FieldByName('A1.Titel').asstring;
          edt_antragsteller_vorname.text := FieldByName('A1.Vorname').asstring;
          edt_antragsteller_nachname.text := FieldByName('A1.Nachname').asstring;
          edt_antragsteller_geburtsdatum.text := FieldByName('A1.Geburtsdatum').asstring;
kennt er A1.Titel etc. nicht. (Das Feld A1.Titel wurde nicht gefunden) :?:


Gruss

EL

marabu 8. Jul 2008 15:41

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Hallo,

in der Ergebnismenge gibt es keine qualifizierten (zweistufigen) Namen.

Freundliche Grüße

emsländer 8. Jul 2008 15:55

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von marabu
Hallo,

in der Ergebnismenge gibt es keine qualifizierten (zweistufigen) Namen.

Freundliche Grüße

Wie meinst Du das?

Unter dieser Nummer (23) ist ein Datensatz in jeder Table zu finden.

Gruss

EL

DeddyH 8. Jul 2008 15:59

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Delphi-Quellcode:
FieldByName('A1.Titel').asstring;

->
Delphi-Quellcode:
FieldByName('Titel').asstring;

emsländer 8. Jul 2008 16:02

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Zitat:

Delphi-Quellcode:
FieldByName('A1.Titel').asstring;

->
Delphi-Quellcode:
FieldByName('Titel').asstring;

geht dann schief, wenn ich den query-string erweitere, da Antragsteller1 und Antragsteller2 identische Tables sind:
Delphi-Quellcode:
  _stmp := 'Select * from Akten Ak inner join Antragsteller1 A1 on A1.zu_Akte=Ak.Aktennr '
          +' inner join Antragsteller2 A2 on A2.zu_Akte=Ak.Aktennr where Ak.Aktennr ='+ inttostr(aktennr);
Gruss

EL

DeddyH 8. Jul 2008 16:03

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Dann mach Dir die Mühe und ersetz den Stern durch die benötigten Feldnamen, denen Du dann verschiedene Aliase zuordnen kannst.

hoika 8. Jul 2008 16:07

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Hallo,

Mühe machen ist hier auch die einzige Möglichkeit

Select Akten.*, A1.Titel As A1_Titel, A2.Titel As As_Titel

Zugriff über
FieldByName('A1_Titel').AsString
FieldByName('A2_Titel').AsString


Das Akten.* ist auch noch diskussionswürdig,
wenn nicht ale Felder benötigt werden.


Heiko

emsländer 8. Jul 2008 16:10

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Dann mach Dir die Mühe und ersetz den Stern durch die benötigten Feldnamen, denen Du dann verschiedene Aliase zuordnen kannst.

Gern, wenn Du bitte so nett bist und mir ein kleines Beispiel gibst? Ich hab da schon anhand dessen, was ich hier im Forum gelesen habe (suche...) alles Mögliche probiert. Nur leider klappte das nie so, wie es sollte.

so brauche ich z.B. aus der
Table Akten die Felder Aktennr, SenderIP, eMail ....
Table Antragsteller1 die Felder Titel, Vornam, Name ...bla..
Table Antragsteller2 die Felder Titel, Vornam, Name ...bla..


Dank vorab und Gruss

EL

DeddyH 8. Jul 2008 16:12

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Schau mal einen Post vor Deinem ;)

emsländer 8. Jul 2008 16:13

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Schau mal einen Post vor Deinem ;)

Wo ist da die Verknüpfung (join) ?...

Gruss

EL

DeddyH 8. Jul 2008 16:16

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Der Join hat doch mit Deinem Problem jetzt nichts zu tun :gruebel: . Aber mal ein Phantasie-Beispiel:
SQL-Code:
SELECT T1.Name AS ErsterName, T1.Vorname AS ErsterVorname, T2.Name AS ZweiterName, T2.Vorname AS ZweiterVorname
FROM Tabelle1 T1
JOIN Tabell2 T2 ON T1.ID = T2.ID
WHERE irgendwas
Nun kannst Du die einzelnen Felder gezielt über ihren Alias ansprechen.

emsländer 8. Jul 2008 16:27

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Der Join hat doch mit Deinem Problem jetzt nichts zu tun :gruebel: . Aber mal ein Phantasie-Beispiel:
SQL-Code:
SELECT T1.Name AS ErsterName, T1.Vorname AS ErsterVorname, T2.Name AS ZweiterName, T2.Vorname AS ZweiterVorname
FROM Tabelle1 T1
JOIN Tabell2 T2 ON T1.ID = T2.ID
WHERE irgendwas
Nun kannst Du die einzelnen Felder gezielt über ihren Alias ansprechen.

jetzt wirds kompliziert:
Delphi-Quellcode:
  _stmp := 'Select Akten.*,Antragsteller1.zu_Akte as A1_zuAkte,'
          +'Antragsteller1.Titel as A1_Titel, Antragsteller1.Vorname as A1_Vorname,'
          +'Antragsteller1.Nachname as A1_Nachname, Antragsteller1.Geburtsdatum as A1_Geburtsdatum,'
          +'Antragsteller1.Strasse as A1_Strasse, Antragsteller1.Hausnr as A1_Hausnr,'
          +'Antragsteller1.PLZ as A1_PLZ, Antragsteller1.Ort as A1_Ort,'
          +'Antragsteller1.Familienstand as A1_Familienstand, Antragsteller1.Brutto as A1_Brutto '
          +'from Antragsteller1 A1 join Akten on Akten.Aktennr=Antragsteller1.zu_Akte '
          +'where Aktennr ='+ inttostr(aktennr);
Der mehrteilige Bezeichner "Antragsteller1.zu_Akte" konnte nicht gebunden werden. *grummel*

Hinzu kommt, das wenn das funzt auch noch Antragsteller2 genjoined werden muss.

Gruss

EL

DeddyH 8. Jul 2008 16:29

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Wenn Du schon einen Alias vergibst, dann nutz ihn auch :zwinker: . Und ich wäre Dir verbunden, wenn Du den reinen SQL-Code posten würdest, das ließe sich besser lesen.

[edit] Rechtschreibung [/edit]

emsländer 8. Jul 2008 16:38

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Wenn Du schon einen Alias vergibst, dann nutz ihn auch :zwinker: . Und ich wäre Dir verbunden, wenn Du den reinen SQL-Code posten würdest, das ließe sich besser lesen.

[edit] Rechtschreibung [/edit]

:?: weder das:
Delphi-Quellcode:
from Antragsteller1 A1 join Akten on Akten.Aktennr=A1_zuAkte '
          +'where Aktennr =23';
noch das:
Delphi-Quellcode:
from Antragsteller1 A1 join Akten on Akten.Aktennr=A1.zuAkte '
          +'where Aktennr =23';
funzen

Gruss

EL

DeddyH 8. Jul 2008 16:43

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Und so?
SQL-Code:
Select Akten.*,A1.zu_Akte as A1_zuAkte,
          A1.Titel as A1_Titel, A1.Vorname as A1_Vorname,
          A1.Nachname as A1_Nachname, A1.Geburtsdatum as A1_Geburtsdatum,
          A1.Strasse as A1_Strasse, A1.Hausnr as A1_Hausnr,
          A1.PLZ as A1_PLZ, A1.Ort as A1_Ort,
          A1.Familienstand as A1_Familienstand, A1.Brutto as A1_Brutto
from Antragsteller1 A1 join Akten on Akten.Aktennr=A1.zu_Akte
where Akten.Aktennr = 1

emsländer 8. Jul 2008 16:47

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Und so?
SQL-Code:
Select Akten.*,A1.zu_Akte as A1_zuAkte,
          A1.Titel as A1_Titel, A1.Vorname as A1_Vorname,
          A1.Nachname as A1_Nachname, A1.Geburtsdatum as A1_Geburtsdatum,
          A1.Strasse as A1_Strasse, A1.Hausnr as A1_Hausnr,
          A1.PLZ as A1_PLZ, A1.Ort as A1_Ort,
          A1.Familienstand as A1_Familienstand, A1.Brutto as A1_Brutto
from Antragsteller1 A1 join Akten on Akten.Aktennr=A1.zu_Akte
where Akten.Aktennr = 1

Jupp - das werktelt :thumb: Danke!

Nun die allesentscheidene Frage: Wie baue ich da nun Antragsteller2 noch mit ein :gruebel: - Antragsteller2 muss nicht zwingend vorhanden sein!

=> Der Hauptindex ist übrigens die Table Akten!

Gruss

EL

DeddyH 8. Jul 2008 16:55

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
SQL-Code:
Select Akten.*,A1.zu_Akte as A1_zuAkte,
       A1.Titel as A1_Titel, A1.Vorname as A1_Vorname,
       A1.Nachname as A1_Nachname, A1.Geburtsdatum as A1_Geburtsdatum,
       A1.Strasse as A1_Strasse, A1.Hausnr as A1_Hausnr,
       A1.PLZ as A1_PLZ, A1.Ort as A1_Ort,
       A1.Familienstand as A1_Familienstand, A1.Brutto as A1_Brutto,
       A2.zu_Akte as A2_zuAkte,
       A2.Titel as A2_Titel, A2.Vorname as A2_Vorname,
       A2.Nachname as A2_Nachname, A2.Geburtsdatum as A2_Geburtsdatum,
       A2.Strasse as A2_Strasse, A2.Hausnr as A2_Hausnr,
       A2.PLZ as A2_PLZ, A2.Ort as A2_Ort,
       A2.Familienstand as A2_Familienstand, A2.Brutto as A2_Brutto
from Antragsteller1 A1 
join Akten on Akten.Aktennr=A1.zu_Akte
left join Antragsteller2 A2 on Akten.Aktennr=A2.zu_Akte
where Akten.Aktennr = 1
Getippt und nicht getestet.

emsländer 8. Jul 2008 17:00

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
SQL-Code:
Select Akten.*,A1.zu_Akte as A1_zuAkte,
       A1.Titel as A1_Titel, A1.Vorname as A1_Vorname,
       A1.Nachname as A1_Nachname, A1.Geburtsdatum as A1_Geburtsdatum,
       A1.Strasse as A1_Strasse, A1.Hausnr as A1_Hausnr,
       A1.PLZ as A1_PLZ, A1.Ort as A1_Ort,
       A1.Familienstand as A1_Familienstand, A1.Brutto as A1_Brutto,
       A2.zu_Akte as A2_zuAkte,
       A2.Titel as A2_Titel, A2.Vorname as A2_Vorname,
       A2.Nachname as A2_Nachname, A2.Geburtsdatum as A2_Geburtsdatum,
       A2.Strasse as A2_Strasse, A2.Hausnr as A2_Hausnr,
       A2.PLZ as A2_PLZ, A2.Ort as A2_Ort,
       A2.Familienstand as A2_Familienstand, A2.Brutto as A2_Brutto
from Antragsteller1 A1 
join Akten on Akten.Aktennr=A1.zu_Akte
left join Antragsteller2 A2 on Akten.Aktennr=A2.zu_Akte
where Akten.Aktennr = 1
Getippt und nicht getestet.

=> Funzt

Bis hierhin kapiert. Mir fehlt jetzt nur noch der Punkt, wo ich , A2.Titel as A2_Titel etc. hineinpacken muss

Vielen Dank!

Gruss

EL

DeddyH 8. Jul 2008 17:02

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Jetzt verstehe ich nicht, was Du meinst. Ich mache erstmal Feierabend und kann evtl. in einer halben Stunde nochmal nachsehen :) , falls Du bis dahin gepostet hast.

emsländer 8. Jul 2008 17:04

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Jetzt verstehe ich nicht, was Du meinst. Ich mache erstmal Feierabend und kann evtl. in einer halben Stunde nochmal nachsehen :) , falls Du bis dahin gepostet hast.

Gibt ne Fehlermeldung: ungültiger Objektname A2.zu_Akte

Vielen Dank nochmal!


Gruss

EL

DeddyH 8. Jul 2008 17:38

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Sind die beiden Tabellen wirklich identisch? Oder gibt des das Feld in Antragsteller2 gar nicht?

emsländer 8. Jul 2008 17:40

Re: Wie kann ich tabellenübergreifende Daten einlesen?
 
Zitat:

Zitat von DeddyH
Sind die beiden Tabellen wirklich identisch? Oder gibt des das Feld in Antragsteller2 gar nicht?

Die beiden Tabellen Antragsteller1 und Antragsteller2 sind identisch


=> ich bin erstmal off, muss zum Schießen. Gegen ca. 20:30 wieder da.

Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

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