Problem 1:
Warum schreibst du diese #34 vor und nach den Splatennamen?
Das kann dazu führen, das du sie auch wieder genauso schreiben musst, wenn du über irgendwelche Mid-ware (
ADO,
ODBC,...) auf die Daten zugreifen willst.
Der View sollte also so aussehen:
SQL-Code:
SELECT t1.ID_Bremse
,t1.Typ
,t1.sid_FabrikatE
,t1.sid_Spannung
,t2.id_Fabrikat
,t2.Fabrikat
,t3.id_Spannung
,t3.Spannung
FROM tbl_Bremse t1
LEFT OUTER JOIN tbl_Fabrikat t2
ON (t1.sid_Fabrikat = t2.id_Fabrikat)
LEFT OUTER JOIN tbl_Spannung t3
ON (t1.sid_Spannung = t3.id_Spannung)
Standard-
SQL-Problem Nummer 0815
Ein Vergleich mit NULL ergibt weder TRUE noch FALSE, sondern NULL
(1 = Null) -> NULL !!!
Der einzige Operator, der da ein TRUE oder FALSE auspuckt ist "is"
(NULL is NULL) -> TRUE
(NULL is not NULL) -> FALSE
Auch wenn es irgendwie eklig aussieht
, vielleicht funktioniert es ja so:
Delphi-Quellcode:
With frmDataMod.SQLDetailQuery
Do
Begin
SQL.Text :=
'
SELECT *' + #10 +
'
FROM View_Bremse' + #10 +
'
WHERE (:i_Fabrikat is NULL OR' + #10 +
'
Upper(Fabrikat) = :i_Fabrikat) AND' + #10 +
'
(:i_Typ is NULL OR' + #10 +
'
Upper(Typ) = :i_Typ) AND' + #10 +
'
(:i_Spannung is NULL OR' + #10 +
'
Upper(Spannung) = :i_Spannung)';
// Parsen des Statements um Query Parameter zu finden...
Prepared := True;
// Werte an Query Parameter übergeben...
With Parameters
Do
Begin
ParamByName('
i_Fabrikat').Value := Edit1.Text;
ParamByName('
i_Typ').Value := Edit2.Text;
ParamByName('
i_Spannung').Value := Edit3.Text;
End;
Open;
End;