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