Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

Re: Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 15:47
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.
  Mit Zitat antworten Zitat