Entwickler-Ecke

Datenbanken - Sortierung mit SQL


Hänsel - Di 23.09.14 16:54
Titel: Sortierung mit SQL
Hallo

kann jemand helfen?
Ich arbeite mit MSSQL und möchte wehrend der Laufzeit die Tabelle filtern und sortieren. die Filterung funktioniert , nur mit order by werden Fehler angezeigt. Was habe ich hier falsch gemacht.


Delphi-Quelltext
1:
2:
3:
4:
5:
nr:=inttoStr(Datamodule3.ADOQuery2['ID']);
Datamodule3.ADOQuery31.close;
Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID ='+(nr); // Das fuktioniert  :D 
//Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID ='+(nr)order by WE_nr) ; // was habe ich hier falsch gemacht?  :(  :(  :( 
Datamodule3.ADOQuery31.open;


Hänsel

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


guinnes - Di 23.09.14 17:58

Das order by muß natürlich wieder in Anführungszeichen


WasWeißDennIch - Di 23.09.14 18:08

Ich würde dringend empfehlen, wann immer möglich parametrisierte Statements zu verwenden, dann ergeben sich solche Probleme erst gar nicht.


ZeitGeist87 - Mi 24.09.14 08:02

user profile iconHänsel hat folgendes geschrieben Zum zitierten Posting springen:
Hallo

kann jemand helfen?
Ich arbeite mit MSSQL und möchte wehrend der Laufzeit die Tabelle filtern und sortieren. die Filterung funktioniert , nur mit order by werden Fehler angezeigt. Was habe ich hier falsch gemacht.


Delphi-Quelltext
1:
2:
3:
4:
5:
nr:=inttoStr(Datamodule3.ADOQuery2['ID']);
Datamodule3.ADOQuery31.close;
Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID ='+(nr); // Das fuktioniert  :D 
//Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID ='+(nr)order by WE_nr) ; // was habe ich hier falsch gemacht?  :(  :(  :( 
Datamodule3.ADOQuery31.open;


Hänsel

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


Wie schon oft von mir erwähnt, hasse ich Statements, die so aufgebaut werden.
Dafür gibt es Paramter.

In deinem Fall sähe das so aus:


Delphi-Quelltext
1:
2:
Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID = :nr order by WE_nr';
Datamodule3.ADOQuery31.ParamByName('nr').value:= nr;


:nr beschreibt hier einen Parameter, welcher in der Zeile darunter über value mit der dazu passenden Variable beschrieben wird.

Vorteil der Parametrisierung sind zum Einen die Übersichtlichkeit und das sich Nicht-Kümmern, dass die Parameter im "richtigen" Format vorliegen. In deinem Fall müsstest du alles als String konvertiert übergeben.


Dein spezielles Statement korrigiere ich dir dennoch, damit du weißt, wo der Fehler liegt/lag.


Delphi-Quelltext
1:
Datamodule3.ADOQuery31.SQL.Text:='Select * From MDV1 where ID = ' + nr + ' order by WE_nr';                    


Gruß,
Stefan


Hänsel - Mo 06.10.14 09:10

Danke für die Hinweise.

Hänsel