![]() |
Datenbank: firebird • Version: 2 • Zugriff über: ibx
Tquery variabel die zweite
Hallo!
Ich habe 2 Tabellen in einer Firebird Datenbank. Jetzt möchte ich beide Tabellen auf einmal abfragen, mit folgendem Quelltext:
Delphi-Quellcode:
Das Problem liegt bei
procedure TForm1.AbfrageClick(Sender: TObject);
var SQLString1 , SQLString2 :String; begin Edit1.Text := AnsiUpperCase(Edit1.Text); If Combobox1.Text = '' then Combobox1.Text := ' Tabelle1 Tabelle2'; Screen.Cursor := crHourGlass; If Edit1.Text = '' then Edit1.Text := '..'; If Edit2.Text = '' then Edit2.Text := '..'; SQLString1:= StringReplace(Edit1.Text,'#','_',[rfReplaceAll]); SQLString1:= StringReplace(SQLString1,'..','%',[rfReplaceAll]); SQLString2:= StringReplace(Edit2.Text,'#','_',[rfReplaceAll]); SQLString2:= StringReplace(SQLString2,'..','%',[rfReplaceAll]); with Query1 do begin Active:=False; SQL.Clear; SQL.Add('Select * from '+ combobox1.text +' where feld001 Like :text1 '); SQL.Add('And Upper (feld002) Like Upper (:text2) '); ParamByName('text1').asString := SQLString1; ParamByName('text2').asString := SQLString2; Active:=True; end; Screen.Cursor := crDefault; end;
Delphi-Quellcode:
Ich habe schon die Möglichkeiten
If Combobox1.Text = '' then Combobox1.Text := ' Tabelle1 and Tabelle2';
Delphi-Quellcode:
sowie
... '' then Combobox1.Text := ' Tabelle1 and from Tabelle2';
Delphi-Quellcode:
und einige weitere ausprobiert. Leider ohne Ergebnis.
... '' then Combobox1.Text := ' Tabelle1, Tabelle2';
Manchmal wird Tabelle1 abgefragt und Tabelle2 nicht, meist bekomme ich Fehler 104 . Ich hoffe auf eure Hilfe. |
AW: Tquery variabel die zweite
Kannst du dem Thema bitte einen aussagekräftigen Titel geben? "die zweite" sagt rein gar nichts zum Problem aus. Man kann also nur raten um was es in dem Thema geht.
|
AW: Tquery variabel die zweite
![]() |
AW: Tquery variabel die zweite
Hi,
nur als Ansatz:
Code:
SELECT p.Feld1, f.Feld1 FROM tableP AS p, tableF AS f
Code:
SELECT p.Feld1, f.Feld1 FROM tableP AS p LEFT JOIN tableF AS f ON p.Feld1 = f.Feld1
|
AW: Tquery variabel die zweite
Zitat:
|
AW: Tquery variabel die zweite
Und wenn du "mit Firebird" anstelle von "die zweite" im Titel hinzufügst?
|
AW: Tquery variabel mit Firebird
Zitat:
@ himitsu Verbindet join nicht nur voneinander abhängige Tabellen? Ich möchte zwei unabhängige Tabellen nacheinander Abfragen und das Ergebnis in einem DBGrid darstellen. |
AW: Tquery variabel die zweite
![]() |
AW: Tquery variabel mit Firebird
Zitat:
|
AW: Tquery variabel die zweite
Zitat:
|
AW: Tquery variabel die zweite
|
AW: Tquery variabel die zweite
Zitat:
Zitat:
Aber dafür gibt es Google. ;) Sinnvoll wäre für den Threadersteller meiner Meinung erst einmal die Absolvierung eines fundierten SQL-Basiskurs. |
AW: Tquery variabel mit Firebird
Delphi-Quellcode:
bringt auch nur Fehler 104.
... = '' then Combobox1.Text := ' Tabelle1 union Tabelle2';
@DeddyH Tabellen haben identische Struktur. |
AW: Tquery variabel die zweite
Dann bau doch erst einmal außerhalb von Delphi einen syntaktisch korrekten SQL-Befehl zusammen, der das gewünschte Ergebnis liefert. Erst wenn der funktioniert, macht es IMHO Sinn, ihn dynamisch zusammenzustellen.
|
AW: Tquery variabel mit Firebird
Zitat:
|
AW: Tquery variabel die zweite
Wenn ich mir den den ersten Beitrag ansehe scheint doch ungefähr dies hier gewünscht:
Delphi-Quellcode:
Wenn die Dynamik über den Inhalt einer Combobox kommt, dann habe ich ein sehr ungutes Gefühl dabei.
const
SQLTEXT1='Select irgendwas from tabelle1 where diese Bedingung'; SQLTEXT2='Select irgendwas from tabelle2 where diese Bedingung'; begin myquery.close; if bedingung then myquery.sql.text:=SQLTEXT1 else myquery.sql.text:=SQLTEXT2; ... (SQL injection) Gruß K-H |
AW: Tquery variabel die zweite
Zitat:
Delphi-Quellcode:
SQl.Text := 'select * from tabelle1 und tabelle2 where feld1....
// wobei ..tabelle1 und tabe... ein einschließendes und darstellen soll |
AW: Tquery variabel die zweite
Aber ohne JOIN, oder? Da bietet sich wie gesagt die UNION an.
SQL-Code:
Das soll jetzt nur eine grobe Orientierung sein.
SELECT Feld1, Feld2, Feld3, ... FROM Tabelle1
UNION ALL SELECT Feld1, Feld2, Feld3, ... FROM Tabelle2 |
AW: Tquery variabel die zweite
Zitat:
Falls ja, liegt fast immer ein fehlerhaftes Datenbankdesign vor. Dann gibt es zwei Möglichkeiten: a.) Datenbankdesign verbessern und plötzlich werden Abfragen, die vorher ein Problem dargestellt haben ganz einfach b.) weitermachen wie bisher Hier noch ein Beispiel für mangelhaftes Datenbankdesign
Code:
Das Beispiel ist natürlich eine klare Fehlkonstruktion.
Tabelle Frauen
================================================================== IdGirl| Vorname | Nachname | Geburtstag | PLZ | Ort | Geburtsname Tabelle Maenner ================================================================== IdBoy| Vorname | Nachname | Geburtstag | PLZ | Ort Selbst wenn Männer üblicherweise keinen abweichenden Geburtsnamen haben (Ausnahmen bestätigen die Regel) sollte doch klar sein, dass alle Daten in eine gemeinsame Tabelle gehören
Code:
Tabelle Personen
================================================================================= IdPerson | Vorname | Nachname | Geburtstag | PLZ | Ort | Geschlecht |Geburtsname |
AW: Tquery variabel die zweite
Und hier die funktionierende Lösung:
Delphi-Quellcode:
Diese zwei Zeilen in die Vergleichszeilen vom Quelltext Beitrag 1 kopiert und es funktioniert.
SQL.Add('Select * from tabelle1 union all select * from tabelle2 where feld001 Like :text1 ');
SQL.Add('And Upper (feld002) Like Upper (:text2) '); Danke an alle, FL63 |
AW: Tquery variabel die zweite
Zitat:
Dir ist schon klar, dass die WHERE-Bedingung nur auf die zweite Tabelle wirkt? |
AW: Tquery variabel die zweite
Zitat:
|
AW: Tquery variabel die zweite
@fl63: du hast meine Frage aus Beitrag #19 noch nicht beantwortet.
Wenn ich mir schon die Mühe mache Hintergrundinfos zum Datenbankdesign zu geben, wäre es zumindest höflich wenn du erklären würdest warum du es trotzdem anderst machen willst. |
AW: Tquery variabel die zweite
@ vagtler
Aber jetzt:
Delphi-Quellcode:
@ shmia
with Query1 do
begin Active:=False; SQL.Clear; SQL.Add('Select * from tabelle1 where feld001 Like :text1 '); SQL.Add('And Upper (feld002) Like Upper (:text2) '); SQL.Add('Union All Select * from tabelle2 where feld001 Like :text1 '); SQL.Add('And Upper (feld002) Like Upper (:text2) '); ParamByName('text1').asString := SQLString1; ParamByName('text2').asString := SQLString2; Active:=True; end; Ich hoffe ich gebe Dir erschöpfend Auskunft:
Code:
Tabelle 1 Feld001 varChar 50
Feld002 varchar 250 Tabelle 2 Feld001 varchar 50 Feld002 varchar 250 |
AW: Tquery variabel die zweite
Zitat:
Dann kann ich nur dringend raten "sprechende" Feld- und Tabellennamen zu verwenden. Ausserdem kann ich nur dringend raten aus den 2 Tabellen eine Tabelle zu machen:
Code:
Die Felder "Feld001" und "Group" bilden dann zusammen den neuen Primärschlüssel (du hast doch hoffentlich einen PK?).
Feld001 varchar(50)
Group smallint // 1=Daten aus Tabelle 1, 2=Daten aus Tabelle 2 Feld002 varchar(250) Diue Abfrage sieht dann so aus:
SQL-Code:
Select * from TabelleNeu where feld001 Like :text1 And Upper (feld002) Like Upper (:text2)
|
AW: Tquery variabel die zweite
Zitat:
Zitat:
Was meinst du mit:
Code:
Einen Primärschlüssel habe ich bisher keinen.
//1= Daten ausTabelle 1, 2=Daten...
|
AW: Tquery variabel die zweite
Zitat:
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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