Hi,
ich bin mir nicht sicher, ob ich dich verstanden habe. Wenn ja willst du doch zur Laufzeit den
SQL Befehl zusammenbauen. Oder?
Ich hatte mal vor lager Zeit ein ähnliches Problem und habe das so gelöst:
qryB2 : TQuery
edtXYZ : TEdit
Delphi-Quellcode:
with qryB2
do
begin
S := GetSuchStr;
if S = '
'
then Goto Ende;
Close;
SQL.Clear;
SQL.Add(S);
if edtSuchKtArt.Text <> '
'
then
ParamByName('
SuchKtArt').asString := edtSuchKtArt.Text;
if edtSuchKonto.Text <> '
'
then
ParamByName('
SuchKonto').asString := edtSuchKonto.Text;
if edtSuchBetrag.Text <> '
'
then
ParamByName('
SuchBetrag').asFloat := StrToFloat(edtSuchBetrag.Text);
if edtSuchBelegNr.Text <> '
'
then
ParamByName('
SuchBelegnr').asString := edtSuchBelegnr.Text;
ParamByName('
VonDatum').asString := DateToStr(VonDatum);
ParamByName('
BisDatum').asString := DateToStr(BisDatum);
Open;
SetLength(lfBestand, RecordCount + 1);
end;
// von with qryB2 do
Delphi-Quellcode:
function TfrmMain.GetSuchStr: string;
var
S : string;
AddS2Aufrufe : integer;
procedure AddS2(S2: string);
begin
Inc(AddS2Aufrufe);
if S = 'SELECT * FROM B2' then
S := S + ' WHERE ';
if S = 'SELECT * FROM B2 WHERE ' then
S := S + '(' + S2 + ')'
else
S := S + ' AND (' + S2 + ')';
end;
begin
AddS2Aufrufe := 0;
S := 'SELECT * FROM B2';
if edtSuchKtArt.Text <> '' then
AddS2('KTA2 = :SuchKtArt');
if edtSuchKonto.Text <> '' then
AddS2('KTN2 = :SuchKonto');
if edtSuchBetrag.Text <> '' then
if btbtnEUR.Visible then
AddS2('BGB2 = :SuchBetrag')
else
AddS2('BGBT = :SuchBetrag');
if edtSuchBelegNr.Text <> '' then
AddS2('BLN1 = :SuchBelegNr');
AddS2('BDA1 >= :VonDatum'); // 24.04.02 von BGDT auf BDA1 geändert
AddS2('BDA1 <= :BisDatum'); // 24.04.02 von BGDT auf BDA1 geändert
if chkbxSortieren.Checked then
S := S + ' ORDER BY KTA2, KTN2, BDA1, BLN1';
if AddS2Aufrufe <= 2 then
begin
ShowMessage('Suchbedingung ist unvollständig');
S := '';
end;
result := S;
end;
Der Code ist nicht schön aber es klappt
Grüße
Thomas