![]() |
Datenbank: egal • Version: egal • Zugriff über: egal
Mehrere Datensätze über mehrere Tabellen
Guten Tag Delphianer,
ich habe bisher aus mehreren Tabellen immer nur für einen Adresse die Datensätze benötigt. Dazu folgender Code:
Delphi-Quellcode:
Das Problem ist, dass a.adressid vom Typ Integer ist und deshalb die Fehlermeldung
select a.name1 || ', ' || a.name2 As Suchender,
a.adressid, l.Datum, l.Adressid, l.BRSTATUS, l.lastatus, CAST(b.Itembegin as Date), b.arbeitstext from adressen a left join lateilnehmer l on (a.Adressid = l.adressid) left join logentage b on (l.datum = Cast(b.itembegin as Date)) where a.Adressid in (:pListe) //Vorher stand hier: where a.Adressid = :pAdressID and a.brstatus = 101 and a.adraktiv = 'J' and b.artderarbeit <> 'BR' order by a.Name1, l.datum desc conversion error from string "(1035,907,1033)"' ausgegeben wird. Welche Möglichkeiten gibt es trotzdem zum Ziele zu kommen? Vielen Dank für alle Hilfen im Voraus. |
AW: Mehrere Datensätze über mehrere Tabellen
in der Regel können Listen nicht als Parameter eingegeben werden. Du müsstest also ein Konstrukt bauen, welches entweder mehrere Parameter verwendet oder über eine temporäre Hilfstabelle gehen.
|
AW: Mehrere Datensätze über mehrere Tabellen
es kommt drauf an
* kann das DBMS Array-Typen (meistens ja) * kann die verwendete Datenbank-Komponente auch mit Array-Typen umgehen? * und hat der benutzte TParam-Typ eine Übergabefunktion für z.B. TStrings oder Arrays? * sowie TFiled/TParam.Value bzw. der Type Variant können mit z.B. nicht mit TStringList/Tsrrings, außer man benutzt eine DelphiKlasse, welche z.B. IDispatch implementiert. Nja, ich hab ich meistens einfach ein Makro benutzt.
Delphi-Quellcode:
where a.Adressid in (&pListe)
Bei Integern sehr einfach, ansonsten muß man noch mit dem Escaping aufpassen. Oder als kommaseparierter AsString und dann im SQL z.B. eine StringToArray- oder StringToRecord-Funktion verwenden PS: [CODE=SQL] ... [CODE] |
AW: Mehrere Datensätze über mehrere Tabellen
Zitat:
Delphi-Quellcode:
....SQL.Text := 'select a.name1 || '', '' || a.name2 As Suchender,
a.adressid, l.Datum, l.Adressid, l.BRSTATUS, l.lastatus, CAST(b.Itembegin as Date), b.arbeitstext from adressen a left join lateilnehmer l on (a.Adressid = l.adressid) left join logentage b on (l.datum = Cast(b.itembegin as Date)) where a.Adressid in '+MyIdListString+ // <-- 'and a.brstatus = 101 and a.adraktiv = ''J'' and b.artderarbeit <> ''BR'' order by a.Name1, l.datum desc' |
AW: Mehrere Datensätze über mehrere Tabellen
Zitat:
Delphi-Quellcode:
Das Problem bleibt doch, dass a.AdressID ein Integer-Wert ist.
Etwa so mit einer TStringlist und einer While-Schleife:
while i = 0 to Tstringlist.Count - 1 do begin Where a.Adressid in (TStringList[i] + ',) ?????? end; Ach so: Die Datenbank ist Interbase |
AW: Mehrere Datensätze über mehrere Tabellen
|
AW: Mehrere Datensätze über mehrere Tabellen
Vielendank vorersteinmal.
Ich habe diese Seite ![]() und werde mich einmal damit auseinandersetzen. Ein schönes Wochende allen. |
AW: Mehrere Datensätze über mehrere Tabellen
Delphi-Quellcode:
Wenn du eine andere Tabelle hast von der die Werte kommen brauchst du natürlich keine StringList dazwischen:
s := '';
for i = 0 to Stringlist.Count - 1 do begin if s <> '' then s := s + ','; s := s + StringList[i]; s := '('+s+')'; end; query.SQL.Text := 'SELECT irgendwas FROM irgendwo WHERE a.Adressid in '+s;
Delphi-Quellcode:
s := '';
query.First; while not query.Eof do begin if s <> '' then s := s + ','; s := s + query.FieldByName('einFeldName').AsString; // auch integer können einfach als string gelesen werden. s := '('+s+')'; query.Next; end; query.SQL.Text := 'SELECT irgendwas FROM irgendwo WHERE a.Adressid in '+s; |
AW: Mehrere Datensätze über mehrere Tabellen
Zitat:
![]() ![]() oder string.Join ( ![]() oder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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-2025 by Thomas Breitkreuz