AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Checkbox - Problem mit der Reihenfolge
Thema durchsuchen
Ansicht
Themen-Optionen

Checkbox - Problem mit der Reihenfolge

Offene Frage von "Delphi Code Anfänger"
Ein Thema von Delphi Code Anfänger · begonnen am 1. Feb 2008 · letzter Beitrag vom 2. Feb 2008
Antwort Antwort
Seite 1 von 3  1 23      
Delphi Code Anfänger

Registriert seit: 30. Jan 2008
72 Beiträge
 
#1

Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 10:43
Datenbank: Access • Zugriff über: ADO
Hallo

Ich habe vier Checkboxen.

Checkbox 1 = wert1
2 = wert2
3 = wert3
4 = wert4

Die kann ich anklicken und dann auf einen Button "Weiter" klicken. So dann auf der nächsten Form werden die Daten angezeigt. Bis jetzt habe ich das immer so gelöst:sText := sText + 'wert LIKE ' + QuotedStr('%' + Boxes[i].Name + '%') + ' AND '; So nun ist mir aufgefallen das wenn in der DB in einer Zeile "wert1 wert2" steht sucht er trotzdem alle Datensätze raus wo es auch so stehen kann "wert1 wert2 wert3 wert4".

Klar hab ich mir gedacht ich weiß ja woran es liegt. Es liegt hier dran '%' + Boxes[i].Name + '%' So habe ich mir mal wieder gedacht machst du die einfach weg. Gesagt getan.

Klappt auch. Ein wenig getestet und festgestellt: er findet die Datensätze jetzt nicht mehr wenn die Reihenfolge anders ist. Also z.B Checkbox 1 und 2 sind angeklickt = steht dann in der Datenbank "wert2
wert1" findet er die nicht mehr. Weil ja kein % mehr davor steht.

So nun zum Problem. Wie bekomme ich es hin das die Reihenfolge wieder egal ist aber er dafür er auch nur das gesuchte findet?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 10:47
Das ist mir etwas zu wirr beschrieben. Wie sieht denn die Tabelle in der DB aus (evtl. mal ein paar Beispieldatensätze)?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi Code Anfänger

Registriert seit: 30. Jan 2008
72 Beiträge
 
#3

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 10:55
Ok kommt sofort!

NAME WERT
Test1 wert1 wert2
Test2 wert3 wert4
Test3 wert2 wert4
Test4 wert2 wert1

Und wenn die Werte nicht in Reihenfolge z.B wie bei Test4 findet er sie nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 11:06
Deine DB ist nicht normalisiert, aber das nur am Rande. Heißen die Checkboxen "Checkbox1" bis "Checkbox4"? Wenn ja, dann kannst Du den String über eine Schleife mit FindComponent generieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 11:10
Hallo,

abgesehen von den Entwurfssünden lässt sich das Problem eigentlich nur so lösen, dass das Feld Wert auf die einzelnen Literale hin untersucht wird und mehrere Tests mit AND verknüpft werden. Solange kein Literal als Substring eines anderen auftritt, kann auf einen obligatorischen Delimiter verzichtet werden, ansonsten muss auch am Anfang und am Ende von wert ein Delimiter (Leerzeichen) stehen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Delphi Code Anfänger

Registriert seit: 30. Jan 2008
72 Beiträge
 
#6

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 11:20
@Deddy
nein die heißen alle anders. Und es sind auch ein wenig mehr als 4.

@marabu
Dein Vorschlag gefällt mir. Kannst du da noch mal genauer erklären oder eventuell wenn es nicht so viel Mühe macht ein Beispiel posten?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 13:03
Hallo DelphiCodeAnfänger,

vielleicht kannst Du Deine Werte VOR dem Schreiben in die Datenbank und vor dem Suchen in eine eindeutige Struktur bringen.

Das könnte eine Funktion übernehmen, die Du jeweils vor dem Speichern und Suchen in der Datenbank benutzt:
Wert1 + Wert3 + Wert4 -> "x xx"
Wert4 + Wert1 + Wert3 -> "x xx"
Wert4 + Wert1 -> "x x"
-ODER-
Wert1 + Wert3 + Wert4 -> "Wert1+Wert3+Wert4"
Wert4 + Wert1 + Wert3 -> "Wert1+Wert3+Wert4"
Wert4 + Wert1 -> "Wert1+Wert4"

Die ersten beiden Fälle würden dann als identisch bewertet.

stahli
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 13:30
Hier die gewünschte Erklärung in Code-Form:

Delphi-Quellcode:
var
  s: TStrings
begin
  // ...
  for i := 0 to Pred(MAX_BOXES) do
    s.Add(Format('%s wert %s LIKE %s', [
      IfThen(s.Count = 1, ' AND'),
      IfThen(not Boxes[i].Checked, 'NOT'),
      QuotedStr('%' + Boxes[i].Name + '%')
    ]));
  sText := sText + s.Text;
  s.Free;
  // ...
end;
Getippt und nicht getestet.
  Mit Zitat antworten Zitat
Delphi Code Anfänger

Registriert seit: 30. Jan 2008
72 Beiträge
 
#9

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 15:55
Danke!

Ich habe nur ein Problem.

Ich kann den Code nicht in meinen einbauen. Ich weiß nicht so recht wie ich das umbauen soll.

Die Codestelle die ich benutze habe ich irgendwo aus diesem Forum. Weiß leider nicht mehr genau woher.

Das ist der Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const InitialText = 'SELECT * FROM tabelle WHERE ';
var Boxes: array[0..20] of TCheckbox;
    sText: string;
    i: integer;
    s: TStrings // hier habe ich es definiert
begin
  Boxes[0] := wert1;
  Boxes[1] := wert2;
  Boxes[2] := wert3;
  Boxes[3] := wert4;
  .....

sText := InitialText;
  for i := Low(Boxes) to High(Boxes) do
    if Boxes[i].Checked then
      sText := sText + 'wert LIKE ' + QuotedStr('%' + Boxes[i].Name + '%') +
              ' AND ';
    if Length(sText) > Length(InitialText) then
    begin
      Delete(sText,Length(sText) - 4, Length(sText));
      Query.SQL.Text := sText;
      Query.Open;
  end;
end;
So habe ich das jetzt gemacht:

Delphi-Quellcode:
sText := InitialText;
  for i := 0 to Pred(MAX_BOXES) do
    s.Add(Format('%s wert %s LIKE %s', [
      IfThen(s.Count = 1, ' AND'),
      IfThen(not Boxes[i].Checked, 'NOT'),
      QuotedStr('%' + Boxes[i].Name + '%')
    ]));
  sText := sText + s.Text;
  s.Free;
    if Length(sText) > Length(InitialText) then
    begin
      Delete(sText,Length(sText) - 4, Length(sText));
      Query.SQL.Text := sText;
      Query.Open;
  end;
end;
Hm ich glaube da habe ich einen kompletten Denkfehler drinn.

Ich glaube das geht so gar nicht.

Sorry ich hätte schon am Anfang den ganzen Code schreiben sollen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Checkbox - Problem mit der Reihenfolge

  Alt 1. Feb 2008, 20:02
Hallo,

die von mir temporär benutzte StringList muss auch erzeugt werden. Ich würde die Änderungen am Code ungefähr so einbauen:

Delphi-Quellcode:
begin
  // ...
  s := TStringList.Create;
  for i := 0 to Pred(MAX_BOXES) do
    s.Add(Format('%s wert %s LIKE %s', [
      IfThen(s.Count = 1, ' AND'),
      IfThen(not Boxes[i].Checked, 'NOT'),
      QuotedStr('%' + Boxes[i].Name + '%')
    ]));
  sText := InitialText + s.Text;
  s.Free;
  Query.SQL.Text := sText;
  Query.Open;
  // ...
end;
Gute Nacht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:58 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