Hallo,
Methode mal schnell und billig so dahingeschrieben:
VarChar(45) in die Datenbank, 1. Checkbox = 1 Zeichen, 2. Checkbox = 2. Zeichen...
Ist ein Zeichen = 1 dann Checkbox.Checked sonst eben nicht.
Quasi ein überdimensionierter Bitschalter.
Appropooopopoopo Bit-Schalter:
Über einen INT64-Wert in der
DB und entsprechende AND's sollte das aber auch gehen.
Im Ansatz könnte das so gehen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
w : Int64;
i : Integer;
begin
// Tag der Checkboxen belegen, einmal beim Programmstart.
w := 1;
for i := 0 to ComponentCount - 1 do begin
If Components[i] is TCheckBox then begin
with Components[i] as TCheckBox do Tag := w;
w := w shl 1;
end;
end;
// Hier ist w = 2 ^ 45 -> 35184372088832
// gespeicherter Wert für den Checkboxstatus aus Datenbank holen
w := 5; // oder 47 oder 1234567963 oder... was sonst in der Datenbank steht.
for i := 0 to ComponentCount - 1 do begin
If Components[i] is TCheckBox then begin
with Components[i] as TCheckBox do begin
Checked := w and Tag = Tag;
end;
end;
end;
// Wert für's Speichern in der Datenbank ermitteln.
w := 0;
for i := 0 to ComponentCount - 1 do begin
If Components[i] is TCheckBox then begin
with Components[i] as TCheckBox do begin
if Checked then w := w + Tag;
end;
end;
end;
// und w in die Datenbank schreiben.
end;
Diese Lösung hat einen Nachteil: Der Wertebereich für Tag reicht nicht aus, da nur Integer, wir hier aber 2^45 brauchen oder Int64. Einfachste Lösung: Nachfahren von TCheckbox bauen, der ein zusätzliches Attribut vom Typ Int64 hat.