AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit if-Bedingung

Ein Thema von mlspider · begonnen am 3. Mär 2006 · letzter Beitrag vom 3. Mär 2006
Antwort Antwort
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit if-Bedingung

  Alt 3. Mär 2006, 11:40
Hallo,

entweder habe ich einen Denkfehler, oder die gesamte Bedingung taugt nichts:

Delphi-Quellcode:
procedure TRechnung.Button3Click(Sender: TObject);
begin
 Table1.Next;

 DateTimePicker2.Date:=StrToDateTime(DBText4.Caption);
 DateTimePicker3.Date:=StrToDateTime(DBText5.Caption);
 DateTimePicker4.Date:=StrToDateTime(DBEdit22.Text);
 DateTimePicker5.Date:=StrToDateTime(DBEdit23.Text);
 DateTimePicker6.Date:=StrToDateTime(DBEdit24.Text);
 Rechnung.Label21.Caption:=FormatDateTime('dd.mm.yyyy',date+StrToInt(Rechnung.DBText6.Caption));
 spSkinButton1.Enabled := True;
 spSkinButton2.Enabled := True;
 if DateTimePicker1.Date <= DateTimePicker3.Date then begin
 Table1.Edit;
 DBEdit17.Text:='offen';
 DBText5.Font.Color:=clYellow;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if DateTimePicker1.Date >= DateTimePicker3.Date then begin
 Table1.Edit;
 DBEdit17.Text:='1. Mahnstufe';
 DBText5.Font.Color:=clRed;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if DateTimePicker1.Date >= DateTimePicker4.Date then begin
 Table1.Edit;
 DBEdit17.Text:='2. Mahnstufe';
 DBText5.Font.Color:=clRed;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if DateTimePicker1.Date >= DateTimePicker5.Date then begin
 Table1.Edit;
 DBEdit17.Text:='3. Mahnstufe';
 DBText5.Font.Color:=clRed;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if DateTimePicker1.Date >= DateTimePicker6.Date then begin
 Table1.Edit;
 DBEdit17.Text:='Klage';
 DBText5.Font.Color:=clRed;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if vergleicheStringsN(Label27.Caption, DBEdit21.Text, 50)=True then begin
 Table1.Edit;
 DBEdit17.Text:='Bezahlt';
 DBText5.Font.Color:=clYellow;
 Button1Click(nil);
 end else begin
 Table1.Edit;
 Button1Click(nil);
 end;
 if Table1.EOF then begin
 spSkinButton4Click(Self);
 spSkinButton17.Enabled:=True;
 Timer1.Enabled:=False;
end;
end;
Die vorletzte Bedingung wird nicht geprüft. Was läuft hier schief?
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 11:49
So, habe das ganze mal etwas eingerückt und wenn Du jetzt noch sagst
was die procedure machen soll und mit welchen Werten sie aussteigt
dann kann man vielleicht auch besser helfen.

Grüße
Klaus

Delphi-Quellcode:
procedure TRechnung.Button3Click(Sender: TObject);
begin
Table1.Next;

DateTimePicker2.Date:=StrToDateTime(DBText4.Caption);
DateTimePicker3.Date:=StrToDateTime(DBText5.Caption);
DateTimePicker4.Date:=StrToDateTime(DBEdit22.Text);
DateTimePicker5.Date:=StrToDateTime(DBEdit23.Text);
DateTimePicker6.Date:=StrToDateTime(DBEdit24.Text);
Rechnung.Label21.Caption:=FormatDateTime('dd.mm.yyyy',date+StrToInt(Rechnung.DBText6.Caption));
spSkinButton1.Enabled := True;
spSkinButton2.Enabled := True;

if DateTimePicker1.Date <= DateTimePicker3.Date then
  begin
    Table1.Edit;
    DBEdit17.Text:='offen';
    DBText5.Font.Color:=clYellow;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;

if DateTimePicker1.Date >= DateTimePicker3.Date then
  begin
    Table1.Edit;
    DBEdit17.Text:='1. Mahnstufe';
    DBText5.Font.Color:=clRed;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
end;

if DateTimePicker1.Date >= DateTimePicker4.Date then
  begin
    Table1.Edit;
    DBEdit17.Text:='2. Mahnstufe';
    DBText5.Font.Color:=clRed;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;

if DateTimePicker1.Date >= DateTimePicker5.Date then
  begin
    Table1.Edit;
    DBEdit17.Text:='3. Mahnstufe';
    DBText5.Font.Color:=clRed;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;

if DateTimePicker1.Date >= DateTimePicker6.Date then
  begin
    Table1.Edit;
    DBEdit17.Text:='Klage';
    DBText5.Font.Color:=clRed;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;

if vergleicheStringsN(Label27.Caption, DBEdit21.Text, 50)=True then
  begin
    Table1.Edit;
    DBEdit17.Text:='Bezahlt';
    DBText5.Font.Color:=clYellow;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;

if Table1.EOF then
  begin
    spSkinButton4Click(Self);
    spSkinButton17.Enabled:=True;
    Timer1.Enabled:=False;
  end;

end;
Klaus
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 12:00
Erst mal danke für's einrücken. Die Bedingungen 1 bis 5 überprüfen anhand des heutigem Tagesdatum (DateTimePicker1) mit einem festgelegtem Datum (DateTimePicker2 - 6) ob das jeweilige festgelegte Datum überschritten worden sind und setzen den jeweiligen Status. Die Bedingung 6, die mein Problem darstellt, überprüft den jeweiligen Datensatz. Ich habe ein weiteres Label auf der Form zu liegen, dessen Caption "Bezahlt" hat. Steht in der Tabelle "Bezahlt" ist das Ergebnis True. Es müßte eigentlich nun vielmehr der Status des Datensatzes in der Tabelle auf Bezahlt gesetzt werden. Macht es aber nicht.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 12:09
Hallo Mario,

Delphi-Quellcode:
if vergleicheStringsN(Label27.Caption, DBEdit21.Text, 50){=True} then
  begin
    Table1.Edit;
    DBEdit17.Text:='Bezahlt';
    DBText5.Font.Color:=clYellow;
    Button1Click(nil);
  end
else
  begin
    Table1.Edit;
    Button1Click(nil);
  end;
hast Du mal einen Haltepunkt auf die if Anweisung gesetzt und bist mit F7
weitergegangen.

Gehst Du da in den then Zweig oder in den else Zweig.
Sind die Strings label27.caption und DBEdit21.text auch gleich?
Was macht vergleicheStringsN genau?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 12:22
Die Strings label27.caption und DBEdit21.text sind, wenn die jeweilige Rechnung als bezahlt markiert wurde, gleich und sollte then ausführen. Bei Rechnungen die als nicht bezahlt markiert sind, sollte der else-Zweig ausgeführt werden. Zum vergleichen der beiden Strings verwende ich folgende Funktion:

Delphi-Quellcode:
function vergleicheStringsN(s1, s2:string; n:Word): Boolean;

 var i: Word;
  function delLZ(s: string): string;
  var ss: string;
      i, j: Word;
  begin
   j:=0; ss:='';
   for i:=1 to Length(s) do
   begin
    if (s[i] <> ' ') and (s[i] <> '-') then
    begin
     Inc(j);
     ss:= ss + s[i]
    end;
    if j=n then Break
   end;
   Result := UpperCase(ss)
  end;

  begin
   if delLZ(s1)=delLZ(s2) then Result:=True else Result:=False;
  end;
  var flag:word;
Button1 hat folgende Prozedur:

Delphi-Quellcode:
procedure TRechnung.Button1Click(Sender: TObject);
begin
 Table1.Post;
 Table1.Refresh;
 Timer1.Enabled:=True;
end;
Timer1:

Delphi-Quellcode:
procedure TRechnung.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled:=False;
 if Table1.EOF then begin
 spSkinButton17.Enabled:=True;
 end else begin
 Button3Click(nil); //wieder zurück
end;
end;
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 12:45
Delphi-Quellcode:
function vergleicheStringsN(s1, s2:string; n:Word): Boolean;

var i: Word;

  function delLZ(s: string): string;
  var ss: string;
      i, j: Word;
  begin // hier auch einen Haltepunkt setzen
   j:=0; ss:='';
   for i:=1 to Length(s) do
   begin
    if (s[i] <> ' ') and (s[i] <> '-') then
    begin
     Inc(j);
     ss:= ss + s[i]
    end;
    if j=n then Break
   end;
   Result := UpperCase(ss)
  end;
 
begin // hier Haltepunkt setzen und s1 und s2 abfragen
  if delLZ(s1)=delLZ(s2) then Result:=True else Result:=False;
end;


  var flag:word
;

Delphi-Quellcode:
function vergleicheStringsN(s1, s2:string; n:Word): Boolean;

  function delLZ(s: string): string;
    begin
      s:=trim(s); // entfernt führende und folgende Leerzeichen

      while pos('-',s) <> 0 DO // entfernt - aus dem String
        delete(s,pos('-',s),1);
      
     while pos(' ',s) <> 0 DO
       delete(s,pos(' ',s),1) // entfernt Leerzeichen aus dem String;
      
     if length(s) >= n then
       result:=''
     else
       result:=uppercase(s);
    end;

begin
  if (s1 = '') and (s2 = '') then // abfangen wenn s1 und s2 leer sind
     result:=false
  else
    result:=(delLZ(s1)=delLZ(s2));
end;
Kannst Du bitte mal in Deiner Funktion einen Haltepunkt an der obigen Stelle setzen
und schauen wie s1 und s2 aussehen.
Wie schauen s1 und s2 nach der Bearbeitung durch delLZ aus?
s1 und s2 kannst Du mit Ctrl-F5 anschauen, vorher die Variable markieren.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von sk.Silvia
sk.Silvia

Registriert seit: 8. Feb 2006
Ort: Slovenia
90 Beiträge
 
Delphi 7 Personal
 
#7

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 14:43
by us in school the were telling us we should use

if not (pos(' ',s)=0) then
inspite of
if pos(' ',s) <> 0 then

cause it should be faster and better...
that was just btw
  Mit Zitat antworten Zitat
marabu

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

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 15:31
Hallo Mario,

ich würde den gesamten Code nochmal überdenken. Du verschachtelst Ereignisse der Benutzerschnittstelle - Button1Click wird in Button3Click aufgerufen - und speicherst abgeleitete Informationen, die man normalerweise in calculated fields ablegt.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Problem mit if-Bedingung

  Alt 3. Mär 2006, 16:02
Hallo marabu, ist bereits geschehen. Mir selbst hat der Code auch nicht so richtig "gefallen".

So, ich mache jetzt Feierabend. Mir platzt sonst der Schädel.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:22 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