Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: AdoQuery Parameterübergabe für SQL "IN" Operat

  Alt 23. Jul 2006, 18:09
Hallo Michi,

die vielen CheckBoxen würden mir zuviel Raum im GUI einnehmen - meine Wahl wäre eine CheckListBox, die Werte (ID, NAME) für die GTypes würde ich im Ereignis OnCreate() der Form aus der entsprechenden Tabelle der Datenbank einlesen, den Schlüssel als Object und den Namen als String. Später kann man dann die Schlüsselliste so bilden:

Delphi-Quellcode:
function ListOfKeys(clb: TListBox): String;
var
  i: Integer;
  s: TStrings;
begin
  s := TStringList.Create;
  with clb do
    for i := 0 to Pred(Count) do
      if Checked[i] then
        s.Add(IntToStr(Integer(Items.Objects[i])));
  s.QuoteChar := #0;
  Result := s.DelimitedText;
  s.Free;
end;
Noch ein paar Hinweise allgemeiner Natur: Vor einem nachfolgenden Schreibzugriff auf die Eigenschaft SQL brauchst du die Eigenschaft Active einer Query nicht auf False setzen - das wird implizit gemacht. ParamCheck brauchst du nur zur Entwurfszeit einmal zu setzen - diese Einstellung ändert sich bei dir ja nicht mehr. Klammern in der WHERE-Klausel sind nur nötig, wenn du mit den Vorrangregeln bei logischen Ausdrücken nicht einverstanden bist - in deinem Fall erschweren sie nur die Lesbarkeit.

Die Typisierung des Parameters kannst du so vornehmen:

Delphi-Quellcode:
with Query.Parameters.ParamByName('GTYPES') do
begin
  DataType := ftString;
  Value := '1,2,3,4,5,6,7'; // oder wie immer du deinen String übergeben willst
end;
Wenn das SELECT-Statement sich nie ändert - das ist das Ziel der Parameterverwendung - dann muss auch die Eigenschaft SQL der Query nur einmal gesetzt werden, allerdings muss dann die Query explizit geschlossen und wieder geöffnet werden um die geänderten Parameterwerte zu berücksichtigen.

Getippt und nicht getestet.

marabu
  Mit Zitat antworten Zitat