Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Check-Group und case of... (https://www.delphipraxis.net/43578-check-group-und-case.html)

JSB 6. Apr 2005 08:46


Check-Group und case of...
 
Delphi-Quellcode:
i:= cgfilter;
case i.ItemChecked of
    [0]:
    begin
        qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON ='
    end;
  • cgfilter= CheckGroup
    qTelefonliste=Query

    Fehler= "[" erwartet aber "of" gefunden

Wie soll ich das am besten Lösen?
Ich möchte eine abfrage machen was ausgewählt wurde ohne tausend mal(oder auch 8 mal) das Gleiche zufragen... :gruebel:

alcaeus 6. Apr 2005 09:15

Re: Check-Group und case of...
 
Zitat:

Zitat von JSB
cgfilter= CheckGroup

:gruebel: CheckGroup? Watn dat? Ich kenn nur die CheckListBox. Du koenntest mit ItemIndex versuchen zu arbeiten, oder ueber eine zusaetzliche Funktion:

Delphi-Quellcode:
procedure TForm1.HandleItems(ix: Integer);
begin
  case ix of
    0: qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON =';
  end;
end;

//...

for i := 0 to i.Items.Count-1 do
  if i.ItemChecked[i] then
    HandleItems(i);
Evtl. solltest du aber mal erklaeren was die CheckGroup sein soll :gruebel:

Greetz
alcaeus

JSB 6. Apr 2005 09:21

Re: Check-Group und case of...
 
Liste der Anhänge anzeigen (Anzahl: 1)
TRzCheckGroup
ist eine Kompi von Raize
und sieht so aus.
Es gibt mir die Möglichkeit "Items" hinzuzufügen und diese über die Komponente direkt auszusprechen. Besonders gut wenn's viele sind...

Sieht so ungf. aus:

Stevie 6. Apr 2005 09:27

Re: Check-Group und case of...
 
Zitat:

Zitat von alcaeus
:gruebel: CheckGroup? Watn dat? Ich kenn nur die CheckListBox. Evtl. solltest du aber mal erklaeren was die CheckGroup sein soll :gruebel:

Guckst du Bei Google suchenTCheckGroup! :cool:

JSB 6. Apr 2005 09:28

Re: Check-Group und case of...
 
Delphi-Quellcode:
[Fehler] fTelefonliste.pas(162): Ordinaltyp erforderlich
:wall: :wall: :wall:

Treffnix 6. Apr 2005 09:44

Re: Check-Group und case of...
 
Wenn du jetzt noch schreiben würdest wie dein Source mittlerweile aussieht....

Auf deinen ersten Post bezogen gehst du aber falsch an die Sache ran. Case ist für eine Bedingung unnötig. und diese prüfst du auch noch falsch.
Zitat:

Delphi-Quellcode:
case i.ItemChecked of
    [0]:
    begin
        qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON ='
    end;

Itemchecked ist höchstwahrscheinleich ein boolscher Wert. Also True oder False. Kein anderer Wert möglich. Du prüfst aber, ob er [0] ist. :gruebel:

Was du vermutlich machen willst ist

Delphi-Quellcode:
if i.Itemchecked[0] Then
  Begin
    qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON ='
  End;
evtl. isses auch
Delphi-Quellcode:
if i[0].Itemchecked Then
  Begin
    qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON ='
  End;
Kommt auf den Aufbau dieser Liste an.

JSB 6. Apr 2005 10:21

Re: Check-Group und case of...
 
Das kann ich auch (if....then....)
Soll ich dir den Code dafür zeigen?

Delphi-Quellcode:
  if cgfilter.ItemChecked [0] = true then
      begin
          qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON = ' + '''' + dDatabase.iqLogin.fieldbyname('MitarbeiterID').AsString + '''' + ' and';
      end
    else
      if cgfilter.ItemChecked [1] = true then
        begin
//          qMitarbeiter.SQL.Strings [3] := '''' + dDatabase.iqLogin.fieldbyname('MitarbeiterID').AsString + '''';
          qMitarbeiter.Active := True;
          codesite.SendMsg('Abteilung= ' + qMitarbeiter.fieldbyname('ABTEILUNG').asString + '     ' + 'TAETIGKEITSBEREICH= ' + qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString);
        //  ShowMessage ('MitarbeiterID= ' + qMitarbeiter.fieldbyname('ID').AsString);
//          ShowMessage ('Abteilung= ' + qMitarbeiter.fieldbyname('ABTEILUNG').asString + '     ' + 'TAETIGKEITSBEREICH= ' + qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString);
          if (qMitarbeiter.fieldbyname('ABTEILUNG').AsString = '') and (qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString = '') then
            MessageDlg('Der Filter: "Mein Bereich",'+#13+#10+'kann nicht verwendet werden!'+#13+#10+'Bitte prüfen Sie ob die Felder ABTEILUNG '+#13+#10+'und TÄTIGKEITSBEREICH in den Mitarbeiterdaten gefüllt '+#13+#10+'wurden!'+#13+#10+'Wenden Sie sich ggf. an den Administrator!', mtError, [mbOK], 0)
          else
            qTelefonliste.SQL.Strings [3] := 'BEREICH = ' + '''' + qMitarbeiter.fieldbyname('ABTEILUNG').AsString + '''' +  ' or BEREICH =' + '''' + qMitarbeiter.fieldbyname('TAETIGKEITSBEREICH').AsString + '''' + ' and ';
        end
      else
        if cgfilter.ItemChecked [2] = true then
          qtelefonliste.SQL.Strings [4] := 'Datum = ' + '''' + (DateToStr(Date)) + '''' + ' and'
        else
          if cgfilter.ItemChecked [3] = true then
            qtelefonliste.SQL.Strings [5] := 'Prioritat = "1" and'
          else
            if cgfilter.ItemChecked [4] = true then
              qtelefonliste.SQL.Strings [6] := 'Prioritat = "2" and'
            else
              if cgfilter.ItemChecked [5] = true then
                qtelefonliste.SQL.Strings [7] := 'Prioritat = "3" and'
              else
                if cgfilter.ItemChecked [6] = true then
                  qtelefonliste.SQL.Strings [8] := 'Datum > ' + '''' + (DateToStr(IncDay(Date,-sptage.value))) + '''' + ' and'
                else
                  if cgfilter.ItemChecked [7] = true then
                    qtelefonliste.SQL.Strings [9] := 'Erledigt = T and'
                  else
                    if cgfilter.ItemChecked [8] = true then
                      qtelefonliste.SQL.Strings [10] := 'Erledigt = F and';
Ich glaube so progt nur MICROSOFT ...
Unübersichtlich, langsam, kompliziert, nicht nachvollziebar... :wink:

alcaeus 6. Apr 2005 10:41

Re: Check-Group und case of...
 
Zitat:

Zitat von JSB
Ich glaube so progt nur MICROSOFT ...
Unübersichtlich, langsam, kompliziert, nicht nachvollziebar... :wink:

Cool...ich wusste gar nicht dass ich bei Microsoft arbeite.
Wie gesagt, du koenntest auch meine Moeglichkeit mit einer Schleife verwenden.
Allerdings ist deine Sache mit if-elseif IMHO nicht ganz richtig, denn damit erlaubst du nur eine angeklickte Checkbox, und das waere dann ja wieder die TRadioGroup.
Du erlaubst dass ich mich selbst zitiere:
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
procedure TForm1.HandleItems(ix: Integer);
begin
  case ix of
    0: qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON =';
  end;
end;

//...

for i := 0 to i.Items.Count-1 do
  if i.ItemChecked[i] then
    HandleItems(i);

Probier das mal. Sollte eigentlich funktionieren. Evtl. musst du eben noch das Items.Count ausbessern, ich weiss nicht ob das bei der Komponente anders heisst.

Greetz
alcaeus

Michael_Bayer 6. Apr 2005 10:43

Re: Check-Group und case of...
 
Zitat:

Zitat von JSB
Ich glaube so progt nur MICROSOFT ...
Unübersichtlich, langsam, kompliziert, nicht nachvollziebar... :wink:

Ganz im Gegenteil - der MS-Quellcode ist i.d.R. sehr übersichtlich und umfangreich kommentiert - nagut, den Schnellsten bauen die nicht grad ;)

JSB 6. Apr 2005 11:28

Re: Check-Group und case of...
 
Ich habe nicht gemeint das du bei MICRROSOFT arbeitest!
(Wie könnte/kann man nur darüber glücklich sein? =SCHADE!.?)

Das ist ja das Prob.
Ich möchte mehrere Auswahlen möglich machen. Eine TRadioGroup kann nicht das Richtige sein. Eine CheckList schon....
ABER: WIE!

jim_raynor 6. Apr 2005 11:52

Re: Check-Group und case of...
 
Indem du die ganzen Else weglässt und einfach die Ifs hintereinander machst.

Delphi-Quellcode:
if cgfilter.ItemChecked [2] = true then
          qtelefonliste.SQL.Strings [4] := 'Datum = ' + '''' + (DateToStr(Date)) + '''' + ' and' ;

        if cgfilter.ItemChecked [3] = true then
          qtelefonliste.SQL.Strings [5] := 'Prioritat = "1" and' ;

        if cgfilter.ItemChecked [4] = true then
          qtelefonliste.SQL.Strings [6] := 'Prioritat = "2" and' ;

usw.
Da du für jeden Filter einen anderen Text hinzufügst, musst du zwangsläufig jedes einzeln abfragen.

alcaeus 6. Apr 2005 11:55

Re: Check-Group und case of...
 
Zitat:

Zitat von JSB
Ich habe nicht gemeint das du bei MICRROSOFT arbeitest!
(Wie könnte/kann man nur darüber glücklich sein? =SCHADE!.?)

Ist OT, und ich habe meine Gruende dafuer ;)

Zitat:

Zitat von JSB
Das ist ja das Prob.
Ich möchte mehrere Auswahlen möglich machen. Eine TRadioGroup kann nicht das Richtige sein. Eine CheckList schon....
ABER: WIE!

So langsam kommt mir vor ich rede mit einer Wand :roll:
Hast du denn die Moeglichkeit mit der Schleife probiert, oder ueberhaupt angesehn?

Greetz
alcaeus

JSB 6. Apr 2005 12:14

Re: Check-Group und case of...
 
Zitat:

Zitat von alcaeus
So langsam kommt mir vor ich rede mit einer Wand :roll:
Hast du denn die Moeglichkeit mit der Schleife probiert, oder ueberhaupt angesehn?

Ja habe ich! Und nochmals:

[Fehler] fTelefonliste.pas(162): Ordinaltyp erforderlich :!: :!: :!: :!:

jim_raynor 6. Apr 2005 12:22

Re: Check-Group und case of...
 
Meinen Beitrag beachtet wieder niemand beachtet :cry:

Über ein Schleife wirst du es nicht vernüftig lösen können solange die Filter für die einzelnen Checkboxen einen unterschiedlichen Aufbau haben.

JSB 6. Apr 2005 12:27

Re: Check-Group und case of...
 
Danke! Aber es ist immer noch zuviel aufwand ... :cry:

Stevie 6. Apr 2005 12:33

Re: Check-Group und case of...
 
Wie wär's denn mit
Delphi-Quellcode:
for i := 0 to Pred(cgfilter.Count) do
  if cgfilter.Checked[i] then
    case i of
      0: qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON =';
      {...}
    end;

JSB 6. Apr 2005 14:54

Re: Check-Group und case of...
 
Delphi-Quellcode:
 procedure TfmTelefonliste.pbOKClick(Sender: TObject);
  var i: Integer;
begin
 for i := 0 to Pred(cgfilter.Items.Count) do
    if cgfilter.ItemChecked[i] then
      case i of
        0: qTelefonliste.SQL.Strings [2] := 'BEZUGSPERSON =';
        1:
        begin
          qMitarbeiter.SQL.Strings [3] := '''' + dDatabase.iqLogin.fieldbyname('MitarbeiterID').AsString + '''';
          qMitarbeiter.Active := True;
          codesite.SendMsg('Abteilung= ' + qMitarbeiter.fieldbyname('ABTEILUNG').asString + '     ' + 'TAETIGKEITSBEREICH= ' + qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString);
          //  ShowMessage ('MitarbeiterID= ' + qMitarbeiter.fieldbyname('ID').AsString);
          //  ShowMessage ('Abteilung= ' + qMitarbeiter.fieldbyname('ABTEILUNG').asString + '     ' + 'TAETIGKEITSBEREICH= ' + qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString);
          if (qMitarbeiter.fieldbyname('ABTEILUNG').AsString = '') and (qMitarbeiter.FieldByName('TAETIGKEITSBEREICH').AsString = '') then
            MessageDlg('Der Filter: "Mein Bereich",'+#13+#10+'kann nicht verwendet werden!'+#13+#10+'Bitte prüfen Sie ob die Felder ABTEILUNG '+#13+#10+'und TÄTIGKEITSBEREICH in den Mitarbeiterdaten gefüllt '+#13+#10+'wurden!'+#13+#10+'Wenden Sie sich ggf. an den Administrator!', mtError, [mbOK], 0)
          else
            qTelefonliste.SQL.Strings [3] := 'BEREICH = ' + '''' + qMitarbeiter.fieldbyname('ABTEILUNG').AsString + '''' +  ' or BEREICH =' + '''' + qMitarbeiter.fieldbyname('TAETIGKEITSBEREICH').AsString + '''' + ' and ';
        end;
  end;
end;
Klappt...
Danke!! :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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 by Thomas Breitkreuz