Entwickler-Ecke

Datenbanken - Select mit SQL


Hänsel - Di 06.09.16 08:19
Titel: Select mit SQL
Hallo, ich habe heute schon wieder ein ungelöstes Problem,

mit der Filterung G_Typ=WW funktioniert die Abfrage.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if Button2.Caption='Nur WW' then
     Begin
     DataModule2.ADOQuery_Mess.Close;
     DataModule2.ADOQuery_Mess.SQL.Text:='Select * From MGV1 Where (ID ='+such+') and (I_Export ='''+('X')+''') and (G_Typ='''+('WW')+''')order by we_Nr,we_lauf';
     DataModule2.ADOQuery_Mess.Open;
     DataModule2.ADOQuery_Mess.First;
     DBGrid2.Update;
     End;





versuche ich es mit G_Typ=WW und G_Typ KW kommt kein Ergebnis zurück.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if Button2.Caption='Nur KW+WW' then
     Begin
     DataModule2.ADOQuery_Mess.Close;
     DataModule2.ADOQuery_Mess.SQL.Text:='Select * From MGV1 Where (ID ='+such+') and (I_Export ='''+('X')+''') and (G_Typ='''+('KW')+''') and (G_Typ='''+('WW')+''')order by we_Nr,we_lauf';
     DataModule2.ADOQuery_Mess.Open;
     DataModule2.ADOQuery_Mess.First;
     DBGrid2.Update;
     End;


Ich arbeite mit Delphi X2 und MSSQl. Was habe ich hier falsch gemacht?

Hänsel

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


FinnO - Di 06.09.16 08:33

Moin,

da ich aus der Bahn schreibe, gehe ich nicht auf die Notwendigkeit Prepared Statements zu verwenden ein, das bleibt einem Folgeposter überlassen.

Ich denke du meinst in deiner zweiten Anfrage or statt and.

Gruß


Hänsel - Di 06.09.16 08:38

dies habe ich auch schon getestet. Bei "and' gibt es keine Datensätze zurück und bei "or" zeigt es alle Sätze mit "WZ" d.h. ohne Filterung.
Gruß


baumina - Di 06.09.16 08:47

Mein Vorschlag:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
DataModule2.ADOQuery_Mess.SQL.Text:='Select * From MGV1 Where ID =:ID and I_Export = :I_Export and (G_Typ=:G_Typ1 or G_Typ=:G_Typ2) order by we_Nr,we_lauf';
DataModule2.ADOQuery_Mess.ParamByName('ID').AsInteger := such;
DataModule2.ADOQuery_Mess.ParamByName('I_Export').AsString := 'X';
DataModule2.ADOQuery_Mess.ParamByName('G_Typ1').AsString := 'KW';
DataModule2.ADOQuery_Mess.ParamByName('G_Typ2').AsString := 'WW';
DataModule2.ADOQuery_Mess.Open;


Hänsel - Di 06.09.16 09:19

Besten Dank. Es hat so funktioniert.

Hänsel