PDA

View Full Version : SQL: Where-Statement dynamisch



philsturm
12-01-12, 11:27
Hallo zusammen!

Ich habe eine Frage zu Embedded SQL in freeRPG.

Es gibt eine Eingabemaske
Feld1, Feld2, Feld3


Per SQL möchte ich jetzt Daten auslesen mit einer Where-Bedingungen, allerdings nur die Felder, welche auch gefüllt sind.

Also, z.b.:

select ... where spalte1 = feld1 and spalte3 = feld3

ODER

select ... where spalte2 = feld2


Wie gesagt, die WHERE-Bedinungen sollte "dynamisch" sein. Ich möchte nicht tausend SQL-Statement haben.

Wie kann so etwas realisiert werden?

Besten Dank im voraus!

BenderD
12-01-12, 11:43
... da gibt es mehrere Möglichkeiten, z.B.:
select ...
from ...
where Feld1 between :min1 and : max1
and Feld2 between :min2 and :max2
and ...
und dann belegt man die ganzen min Felder mit *LOVAL und die max Felder mit *HIGHVAL vor und wenn ein Feld auszuwählen ist, setzt man den Wert in Minx und Maxx ein
oder man kann die Where Bedingungen mit case bedingen
oder man kann das statement dynamisch zusammen bauen und prepare open verwenden
oder...

D*B

andreaspr@aon.at
12-01-12, 11:44
Mit Dynamischen SQL am besten.



vSQL = 'Select .... From ....';
// ... hier dann dein Statment entsprechend zusammenbasteln
vSQL = %Trim (vSql) + 'Where Feld1 = ''' + %Trim (Feld1) + '''';

Exec Sql Prepare Stm1 From :vSql;
Exec Sql Declare c1 Cursor For Stm1;
Exec Sql Open c1;


Wenn du mit Parameter arbeiten möchtest - welches die sauberere Variante ist sieht es dann so aus:



vSQL = 'Select .... From ....';
// ... hier dann dein Statment entsprechend zusammenbasteln
vSQL = %Trim (vSql) + 'Where Feld1 = ?';

Exec Sql Prepare Stm1 From :vSql;
Exec Sql Declare c1 Cursor For Stm1;
Exec Sql Open c1 Using :Parm1, :Parm2;


Oder:



Select * From Tab1
Where (Sp1 = :Feld1 Or :Feld1 = '')
And (Sp2 = :Feld2 Or :Feld2 = '')

BenderD
12-01-12, 11:56
... naja am Besten?! tipp mal O'Hara in eines der Felder der Auswahlmaske ein...

D*B

andreaspr@aon.at
12-01-12, 12:01
... naja am Besten?! tipp mal O'Hara in eines der Felder der Auswahlmaske ein...

D*B

Deshalb sind beim Dynamischen SQL ja auch die Parameter die bessere Variante.
Da funktioniert O'Hara auch.