Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit checkboxen (https://www.delphipraxis.net/100555-problem-mit-checkboxen.html)

Jack23 30. Sep 2007 11:24

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Problem mit checkboxen
 
Hallo

Ich möchte über ein paar checkboxen eine Datenbank abfrage machen.

Ich versuche es mal zu erklären.

Die Tabelle sieht so aus:

name datum text
test 24.7.67 1,2,3,4
test2 12.7.98 1,2,3
test3 32.7.45 1

Nun habe ich verschiedene checkboxen. Anzahl ist egal.
Beispiel checkbox:

checkbox 1 wert: 1
checkbox 2 wert: 2
checkbox 3 wert: 3
checkbox 4 wert: 4

Nehmen wir jetzt mal an checkbox 1,2,3 wären angekreuzt. Dann drücken ich unten auf den Button suchen und werden die Datensätze in einem dbgrid ausgeben die den text 1,2,3 haben(das können durchaus mehrere sein). Nicht die anderen obwohl die auch die werte teilweise haben.

Noch ein Beispiel:
Alle Chekcboxen(1,2,3,4) sind ausgewählt.
Dann müsste dieser Datensatz ausgegeben werden:
test 24.7.67 1,2,3,4

Natürlich können auch dies wieder mehrere sein.

Wie fange ich das am besten an?

Ich hoffe ich konnte das Problem verständlich rüberbringen.

DeddyH 30. Sep 2007 11:55

Re: Problem mit checkboxen
 
Mir scheint, Deine DB ist nicht normalisiert. Selbst, wenn man nun ad hoc eine Lösung zu diesem konkreten Problem findet, wird es nicht lange dauern, bis das nächste Problem auftritt.

marabu 30. Sep 2007 11:56

Re: Problem mit checkboxen
 
Hi,

wenn du kannst, dann ändere die Speicherung der CheckBox-Zustände von TEXT auf INTEGER und speichere die Zustände als Bit-Vektor. Wenn du über deine CheckBoxen iterierst, dann könntest du im Tag-Property der CheckBox die BitPosition angeben und so deinen Bit-Vektor in einer Variable vom Typ Cardinal (oder Word oder Byte) per SHL zusammenschieben.

Grüße vom marabu

Jack23 30. Sep 2007 12:02

Re: Problem mit checkboxen
 
Zitat:

Zitat von DeddyH
Mir scheint, Deine DB ist nicht normalisiert. Selbst, wenn man nun ad hoc eine Lösung zu diesem konkreten Problem findet, wird es nicht lange dauern, bis das nächste Problem auftritt.

Was meinst du damit? Läuft doch alles.


Zitat:

Zitat von marabu
Hi,

wenn du kannst, dann ändere die Speicherung der CheckBox-Zustände von TEXT auf INTEGER und speichere die Zustände als Bit-Vektor. Wenn du über deine CheckBoxen iterierst, dann könntest du im Tag-Property der CheckBox die BitPosition angeben und so deinen Bit-Vektor in einer Variable vom Typ Cardinal (oder Word oder Byte) per SHL zusammenschieben.

Grüße vom marabu

Verstehe leider kein Wort. :pale: Ich möchte doch nur ein DB Abfrage in der die Checkboxen berücksichtigt werden.

DeddyH 30. Sep 2007 12:08

Re: Problem mit checkboxen
 
Zitat:

Zitat von Jack23
test 24.7.67 1,2,3,4

Hier sollen mehrere Werte in einem Tabellenfeld gespeichert werden (wenn ich das richtig verstanden habe). Das ist schlechtes DB-Design, wie Du gerade selbst feststellst. Schau mal z.B. bei Wikipedia nach dem Begriff "Normalisierung", dann wirst Du sehen, dass Du 2 weitere Tabellen brauchen wirst, um Dein Modell "sauber" abzubilden. Eine andere Möglichkeit wäre, wie von marabu angesprochen, die Daten als Zahl abzuspeichern (genauer: als Bitmaske), sofern es nicht mehr als 32 bzw. 64 Möglichkeiten gibt. Durch Binärvergleiche könntest Du Dein Ziel dann auch erreichen. Ich verweise dazu mal wieder auf mein Tutorial.

Jack23 30. Sep 2007 12:11

Re: Problem mit checkboxen
 
sorry da habe ich wohl etwas falsch erklärt. Das sollen eigentlich nur Wörter sein. Keine zahlen.

statt 1 hallo und so weiter war nur ein beispiel.

DeddyH 30. Sep 2007 12:15

Re: Problem mit checkboxen
 
Also in etwa so?
Zitat:

test 24.7.67 "Dies ist ein Text"
Und die Checkboxen haben dann den "Wert" Dies, ist, etc.?

Jack23 30. Sep 2007 12:27

Re: Problem mit checkboxen
 
Ja genau so.

test 24.7.67 "Dies ist ein Text" dann hat checkbox 1 den wert "dies" u.s.w. Wenn man nur checkbox 1 ausgewählt hat dürfte nur der datensatz wenn vorhanden:
test 24.7.67 "Dies" ich hoffe das ist jetzt klar.

DeddyH 30. Sep 2007 12:42

Re: Problem mit checkboxen
 
Hmm... obwohl ich Dein Konzept nicht verstanden habe, hier eine Möglichkeit:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Boxes: array[0..3] of TCheckbox; //Array definieren
    sText: string;
    i: integer;
begin
  //Array belegen
  Boxes[0] := CheckBox1;
  Boxes[1] := CheckBox2;
  Boxes[2] := CheckBox3;
  Boxes[3] := CheckBox4;
  //String initialisieren
  sText := '';
  //Anhand des Zustandes String zusammenbauen mit Leerzeichen als Trenner
  for i := Low(Boxes) to High(Boxes) do
    if Boxes[i].Checked then
      sText := sText + Boxes[i].Caption + #32;
  //letztes Leerzeichen löschen
  if Length(sText) > 0 then
    Delete(sText,Length(sText),1);
  //nur zum Testen, ggf. in SQL-Statement einfügen
  ShowMessage(sText);
end;

Jack23 30. Sep 2007 12:48

Re: Problem mit checkboxen
 
Ok danke das hilft mir schon mal sehr viel weiter. Nur wie bekomme ich das dann aus der Datenbank abgefragt? Und welche Checkbox muss ich dazu nehmen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz