![]() |
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. |
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.
|
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 |
Re: Problem mit checkboxen
Zitat:
Zitat:
|
Re: Problem mit checkboxen
Zitat:
![]() |
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. |
Re: Problem mit checkboxen
Also in etwa so?
Zitat:
|
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. |
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; |
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?
|
Re: Problem mit checkboxen
Zitat:
Delphi-Quellcode:
with Query do
begin Close; SQL.Text := 'SELECT * FROM Tabelle WHERE text=:text'; ParamByName('text').AsString := sText; Open; end; |
Re: Problem mit checkboxen
Sorry aber ich verstehe das ganze noch nicht. Wo muss denn die
Delphi-Quellcode:
hin?
with Query do
begin Close; SQL.Text := 'SELECT * FROM Tabelle WHERE text=:text'; ParamByName('text').AsString := sText; Open; end; |
Re: Problem mit checkboxen
Anstelle des ShowMessage. Dabei bin ich davon ausgegangen, dass die Query auch "Query" heißt.
|
Re: Problem mit checkboxen
Meinst du das so?
Delphi-Quellcode:
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 with Query do begin Close; SQL.Text := 'SELECT * FROM tabellea WHERE text=:text'; ParamByName('text').AsString := sText; Open; end; end; Dann sagt er aber Undefinierter Bezeichner: 'ParamByName' |
Re: Problem mit checkboxen
Du hast aber eine TQuery auf der Form?
|
Re: Problem mit checkboxen
Eine ADO Query. Die heißt Query.
|
Re: Problem mit checkboxen
Da geht das etwas anders.
Delphi-Quellcode:
with Query do
begin Close; SQL.Text := 'SELECT * FROM tabellea WHERE text=:text'; Parameters.ParamByName('text').DataType := ftString; Parameters.ParamByName('text').Value := sText; Open; end; |
Re: Problem mit checkboxen
Ah ok danke. Nur eine Frage noch. Wo kann ich den Wert für die ckeckboxen definieren.
Weil wenn ich das jetzt test kommt die Meldung: Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben. |
Re: Problem mit checkboxen
Liste der Anhänge anzeigen (Anzahl: 1)
In meinem Beispiel habe ich die Werte einfach in die Caption geschrieben (siehe Anhang).
|
Re: Problem mit checkboxen
Hm geht leider nicht ich bekomme immer noch die gleiche Meldung wie oben beschrieben.
|
Re: Problem mit checkboxen
Dann anders:
Delphi-Quellcode:
with Query do
begin Close; SQL.Text := 'SELECT * FROM tabellea WHERE text=' + QuotedStr(sText); Open; end; |
Re: Problem mit checkboxen
Ah ok. Danke das klappt. Nur noch eine letzt frage. Wie bekomme ich die Ausgabe in einem dbgrid dargestellt?
|
Re: Problem mit checkboxen
Problem gelöst. Mit Hilfe einer DataSource. Danke für deine Hilfe!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 Uhr. |
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