Entwickler-Ecke

Sonstiges (Delphi) - Problem mit ignorierten Anweisungen


hschuh - Mi 26.02.03 15:33
Titel: Problem mit ignorierten Anweisungen
Hallo,

ich habe ein etwas seltsames Problem:
Ich habe in einem Programm (Delphi 6) eine Variable deklariert:
var StartOK :Bool;

Diese setzte ich in einer Procedure (TForm1.StartClick....) auf FALSE.
StartOK := FALSE;

und je nach Programmverlauf auf TRUE .....

Der Witz ist, die erste Anweisung (wie oben beschrieben) := FALSE wird voll übersprungen; auch alle weiteren Anweisungen die diese Variable betreffen werden einfach Übersprungen.
Solangsam zweifle ich an mir!!! Ich kann das Problem einfach nicht finden.
Über jeden Tipp bin ich sehr dankbar.

Danke im Vorraus,,
Gruß Hendrik


Delete - Mi 26.02.03 15:38

Funktioniert denn das Programm richtig? Sieht so aus, als ob der Compiler da etwas optimiert hat. Gibt er denn irgendwelche Warnungen oder Hinweise aus?


hschuh - Mi 26.02.03 15:41

Ja,
er meckert verschiedene Variablen an; unteranderem auch:
[Hinweis] Auswertung.pas(116): Auf 'StartOK' zugewiesener Wert wird niemals benutzt
[Hinweis] Auswertung.pas(109): Auf 'StartOK' zugewiesener Wert wird niemals benutzt

Obwohl diese natürlich benutzt werden !


hschuh - Mi 26.02.03 15:44

P.S.:
Das Programm läuft leider dadurch nicht richtig.

Gruß
HS


Delete - Mi 26.02.03 16:34

hschuh hat folgendes geschrieben:
Ja,
er meckert verschiedene Variablen an; unteranderem auch:
[Hinweis] Auswertung.pas(116): Auf 'StartOK' zugewiesener Wert wird niemals benutzt
[Hinweis] Auswertung.pas(109): Auf 'StartOK' zugewiesener Wert wird niemals benutzt

Obwohl diese natürlich benutzt werden !

Sicher? Poste mal den Code. Also wenn Delphi meint die ariable wird nicht benutzt, dann ist das in 99% der Fälle auch so.


hschuh - Mi 26.02.03 16:40


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
procedure TForm1.StartClick(Sender: TObject);
  var VonDatum, BisDatum, HilfDatum1, HilfDatum2, Suche, Ausgabe :String;
  var i, e :Integer;
  var TempDate :TDateTime;
  var f :Textfile;
  var StartOK :Bool;

  var A ... :String;

  var ICPMNC: array[1..20] of String;
  var DIA: array[1..20] of String;


begin


 StartOK := FALSE;

// Prüfung ob Von Datumseingabe OK
 try
   begin
     TempDate := StrToDate(EVonDat.Text);
     VonDatum := EVonDat.Text;
     StartOK := TRUE;
     EVonDat.Color := clWindow;
   end;
 except
    on E: EConvertError do
      begin
        EVonDat.Text := '';
        StartOK := FALSE;
        EVonDat.Color := clRed;
        ShowMessage('Bitte geben Sie ein korrektes Startdatum ein (TT.MM.YYYY)');
      end;
 end;

// Prüfung ob Bis Datumseingabe OK
 try
   begin
//     TempDate := StrToDate(EBisDat.Text);
     BisDatum := EBisDat.Text;
     StartOK := TRUE;
     EBisDat.Color := clWindow;
   end;
 except
    On E: EConvertError do
      begin
        EBisDat.Text := '';
        StartOK := FALSE;
        EBisDat.Color := clRed;
        ShowMessage('Bitte geben Sie ein korrektes Endedatum ein (TT.MM.YYYY)');
      end;
 end;
.....

 if StartOK = TRUE then
 begin
   T_DB.Open;
   ....



[/code]


Moritz M. - Mi 26.02.03 16:52

Hmm,,schau mal ob es irgendwo noch einen 2 Variable StartOK gibt..nein, das würd der compiler meldern...hmmm...sauerkraut! :x
Du könntest den Code nochmal abtippen(wenns nicht zu viel ist) das hilfe meißtens


Delete - Mi 26.02.03 17:08

Das Problem ist, dass die Zuweisungen von bStart alle in einem try-except-Block liegen. Das wird Delphi nicht gefallen.


hschuh - Mi 26.02.03 17:09

Würde ich eigentlich nur ungerne machen, sind mittlererweile 620 Zeilen code........naja, vielleicht an einem einsamen wochenende.

Irgendetwas einzustellen am compiler gibt es da nicht? So was verstecktes ?????

:roll:


hschuh - Mi 26.02.03 17:12

@Luckie:
Welche andere Möglichkeit hätte ich denn ?????


hschuh - Mi 26.02.03 18:22

@Luckie:
Ich habe glaube ich das Problem gefunden: Du hattest recht!

Ich habe das ganze jetzt umgeschrieben und es funktioniert.
Delphi wertet nur den Ersten Ausruck nach dem Try aus.
Daher das ganze.
Manchmal kann man sich ganz schön verrennen !!!!!!


Gruß
Hendrik


Delete - Do 27.02.03 00:14

Genau, einfach umschreiben.