Thema: Delphi SQL-String vereinfachen

Einzelnen Beitrag anzeigen

GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: SQL-String vereinfachen

  Alt 20. Aug 2008, 08:55
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 B2then
      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
Grüße

Thomas
  Mit Zitat antworten Zitat