AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Checkbox als Array in DB Speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Checkbox als Array in DB Speichern

Ein Thema von Jens Hartmann · begonnen am 14. Mai 2009 · letzter Beitrag vom 20. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 16:19
Datenbank: Firebird • Version: V2.1 • Zugriff über: ZEOSLib
Hallo zusammen,

ich denke die Lösung ist ganz einfach, ich weiß aber nicht genau wo ich ansetzen muss. Ich habe in einen Form, wo ich verschiedene Konfigurationen vornehmen will, 45 Checkboxen. Diese habe ich momentan jeweils als eigen Spalte in der Datenbank und Speicher über Integer die Werte 0 und 1.

Nach dem ich aber momentan mein Programm am verfeinern bin, bin ich darauf gestoßen, das es ja möglich sein muss, die gesamten Checkboxen in ein Array zu Speichern, und nur das in einer Spalte der Datenbank zu speichern.

Wie kann ich das Problem angehen.

Danke schon mal.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 16:25
Ich würde diese weder als Spalten oder Array sondern als Datensätze speichern
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 16: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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 17:21
Anstelle sich auf Int64 da festzulegen würde ich auf ein Blop oder String (nach hex-convertiert) gehen.
Dann hat man jederzeit die Möglichkeit es zu erweitern und überschreitet nicht mit 65 Werten plötzlich die Möglichkeiten des Int64
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: Checkbox als Array in DB Speichern

  Alt 14. Mai 2009, 19:17
Zitat von SirThornberry:
Anstelle sich auf Int64 da festzulegen würde ich auf ein Blop oder String (nach hex-convertiert) gehen.
Dann hat man jederzeit die Möglichkeit es zu erweitern und überschreitet nicht mit 65 Werten plötzlich die Möglichkeiten des Int64
Ach, das mit dem Int64 war nur so 'ne Schnappsidee, nachdem Integer und Word schon nicht wollten.
Ein String als Quasi-Bitschalter wäre hier wohl deutlich flexibler, da er ja auch länger sein kann. Eventuell könnte man aber auch eine "INI-Datei" (Stringliste) in einem Blob speichern...
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Checkbox als Array in DB Speichern

  Alt 18. Mai 2009, 12:00
Sorry,

für das ich erst jetzt antworte. Bin leider vorher nicht dazu gekommen. Danke für Eure Info´s, habe das jetzt folgendermaßen gelößt..

Habe in meine Tabelle eine Spalte vom Typ VarChar eingebunden, und für die Speicherung jetzt so aus.

Delphi-Quellcode:
  for iCheckBoxen := 0 to 44 do
    begin
      if TCheckbox(FindComponent('CheckBox'+IntToStr(sCheckBoxen))).Checked = true then
        begin
        CheckBoxen := CheckBoxen + '1';
        inc(sCheckBoxen);
        end
      else
        begin
        CheckBoxen := CheckBoxen + '0';
        Inc(sCheckBoxen);
        end;
    end;

  QryVorgabeUPDATE.ParamByName('CB1').Value := CheckBoxen;
Das einlesen sieht so aus..

Delphi-Quellcode:
  DatenCheckBox := QryVorgabe.FieldByName('CHECKBOXEN').AsString;

  sCheckBoxen := 45;
  for iCheckBoxen := 44 downto 0 do
    begin
      CheckBoxen := Copy(DatenCheckBox,sCheckBoxen,1);
      if CheckBoxen = '1then
        begin
          TCheckBox(FindComponent('CheckBox' + IntToStr(sCheckBoxen))).Checked := true;
        end;
      sCheckBoxen := sCheckBoxen-1;
    end;
ich denke zwar, das man da bestimmt noch was verfeinern kann. Aber im großen und ganzen funktiioniert es super.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Checkbox als Array in DB Speichern

  Alt 18. Mai 2009, 13:43
Hallo,

ich hätte ja eine eigene Tabelle benutzt,
aber naja

Das
Inc(sCheckBoxen); beim Speichern ist doppelt ...


Heiko
PS: Das mache die Exe viel viel kleiner
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Checkbox als Array in DB Speichern

  Alt 18. Mai 2009, 13:52
Zitat:
ich hätte ja eine eigene Tabelle benutzt,
aber naja
Das heißt eine eigene Tabelle, mit z.B. 45 Spalten (für jede CheckBox eine) und dann diese über ein Schleife eingefügt.
Was ich mich nur frage, was wäre daran sinnvoller.
Zur Zeit habe ich eine Tabelle die sich FARBEN nennt, in dieser sind alle konfigurationen gespeichert, die für meine graphische Obefläche zuständig sind. Dazu gehören auch die CheckBoxen.

Daher fand ich es sinvoll, auch diese in die Tabelle zu integrieren.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Checkbox als Array in DB Speichern

  Alt 18. Mai 2009, 15:05
Hallo,

eine Tabelle etwa mit folgendem Aufbau

Id Integer PK
Name VarChar(50)
Key VarChar(50)
KeyValue VarChar(50)

Records
1, 'CB_Name', 'Checked', '1'
1, 'CB_Vorname', 'Checked', '0'


Da KeyValue VarChar(50) ist,
könnte man auch andere Werte speichern.

Sieht aufwendig aus, es können aber fast beliebge Werte gespeichert werden.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Checkbox als Array in DB Speichern

  Alt 18. Mai 2009, 15:12
Ja, verstehen tue ich das.

die Möglichkeit leuchtet mir zumindestens ein. Als Vorteil, sehe ich zumindestens, das ich auch in der Tabelle sehen kann, welche Checkbox, checked ist.

Naja, vieleicht änder ich das später noch.

Danke,

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz