Autor Beitrag
Morpheus1572
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157

Win XP
Delphi 7
BeitragVerfasst: So 13.07.08 13:10 
Hallo Leutz,

ich habe ein Phänomen, was ich mir nicht erklären kann.

Wenn ich mein Programm mit F7 durchlaufen lasse, klappt alles so wie es sein soll!!!

ABER:
Mache ich einen Start mit F9, dann verhält sich das Programm anders. Ich versuche mal das Prob. zu schildern:

Nachdem das Prog eine Zählschleife durchlaufen hat, soll es einen Button von rot in gelb färben (gekoppelt an einer Bedingung natürlich)! Mit F7 klappt es Bilderbuchmäßig. Bei F9 jedoch muss ich quasi 2 mal in die Schleife gehen um das selbe ergebnis zu bekommen.

Bin ich bekloppt? Für ärztlichen Beistand bin ich wirklich dankbar.

Gruß Morph.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 13.07.08 14:06 
Sind alle Variablen initialisiert?
Gibt es keine Zahlenüberläufe oder anderen Seiteneffekte?
Zeig mal etwas Quelltext von der Stelle, die nicht geht ... Du weißt, wir arbeiten mit Quelltext und nicht irgendwelchen Kristallkugeln ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Morpheus1572 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157

Win XP
Delphi 7
BeitragVerfasst: So 13.07.08 14:11 
ausblenden volle Höhe Delphi-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:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
var
  StrDBStat, StrStraStat,DatZaehler : String;
  i, z, dz: Integer;
begin
  StrDBStat := IntToStr(DBStat);
  Label2.Caption := 'Der Wert von DBStatus ist: ' + StrDBStat;
//  StrAGStat := IntToStr(AGStat);
//  StrStraStat := IntToStr(StraStat);

  // Hier muss eine intelliegente IF-Abfrage rein!!!

  // Frage1: Ist die DB vorhanden?
  if StrDBStat = '1' then
    begin
      Image1.Picture.LoadFromFile('Btn_gr50x25.ico');
      Label3.Caption := 'Der Status der Datenbank ist okay.';
      BitBtn1.Visible := False;
      // Prüfung ob Einträge in der Tab 'AG'
      ADOQuery1.ConnectionString := ConStr;
      ADOQuery1.Active := False;
      ADOQuery1.SQL.Text := 'SELECT count([AG-ID]) as ANZ FROM AG';
      ADOQuery1.Active := True;
      DatZaehler := ADOQuery1.FieldByName('ANZ').AsString; //.AsInteger später!!

********************>

      // Prüfung2: Ist eine AG gelistet?
      if DatZaehler = '1' then
        begin
          // Hol dir die gelistete AG und prüfe ob die Daten in der
          // Tabelle AGInfo vorhanden sind!
          ADOQuery1.Active := False;
          ADOQuery1.SQL.Text := 'SELECT * FROM AGInfo';
          ADOQuery1.Active := True;
          i := ADOQuery1.Fields.Count;
          dz := 0;
          z :=0;
          while z < i do
            begin
              if ADOQuery1.Fields.Fields[z].AsString = '' then dz := dz+1;
              z := z+1;
            end;
          DatZaehler := IntToStr(dz);
          ShowMessage('Die Anzahl der leeren Felder beträgt: ' + DatZaehler);
          // Wenn Informationen fehlen, zeige gelben Button
          if dz <> 0 then
            begin
              Image2.Picture.LoadFromFile('Btn_g50x25.ico');
              Label5.Caption := 'Es sind AG-Daten erfasst, jedoch noch nicht ' +
                'vollständig! Mit Bearbeiten können Sie sie editieren.'
            end
<*****************************
          else
          // Wenn alle Informationen vorhanden, zeige grünen Button
            begin
              Image2.Picture.LoadFromFile('Btn_gr50x25.ico');
              Label5.Caption := 'Es sind alle Daten der Agentur erfasst!';
              // hier muss noch der EDIT-Button plaziert werden
              BitBtn2.Visible := False;
            end;
        end
      else
        // Sonst zeige roten Button
        begin
          Image2.Picture.LoadFromFile('Btn_r50x25.ico');
          Label5.Caption := 'Es ist bisher keine AG erfasst! Klicken sie auf ' +
                            'Bearbeiten um eine Agentur anzulegen.'
        end;
    // Prüfung ob Einträge in der Tab 'Strasse'
    ADOQuery1.Active := False;
    ADOQuery1.SQL.Text := 'SELECT count(StrID) as ANZ FROM Strasse';
    ADOQuery1.Active := True;
    DatZaehler := ADOQuery1.FieldByName('ANZ').AsString; //.AsInteger später!!
    ShowMessage('Anzahl der gelisteten Straßen: ' + DatZaehler);

    // Prüfung3: sind die Straßenverzeichnisse (für die AG) gelistet?
    if DatZaehler > '0' then            // Muss natürlich '> 0' !!!! lauten!
      begin
        // Wenn Einträge im Straßenverzeichnis vorhanden sind zeige den
        // grünen Button!
        Image3.Picture.LoadFromFile('Btn_gr50x25.ico');
        Label7.Caption := 'Das Straßenverzeichnis ist eingelesen. Es ' +
          'sind derzeit ' + DatZaehler + ' Straßen erfasst.'
        // hier muss noch der EDIT-Button plaziert werden
      end
    else
      // Wenn keine Informationen vorhanden, zeige roten Button
      begin
        Image3.Picture.LoadFromFile('Btn_r50x25.ico');
        Label7.Caption := 'Das Straßenverzeichnis der Agentur ' +
          'ist noch nicht erfasst! Sie müssen erst eine AG anlegen bevor ' +
          'Sie das Verzeichnis einlesen können!'
      end;
    end
  else
    begin
      Image1.Picture.LoadFromFile('Btn_r50x25.ico');
      Label3.Caption := 'Die Datenbank ist entweder nicht vorhanden oder ' +
                        'beschädigt. Wenden Sie sich bitte an Ihren ' +
                        'Administrator.';
      Image2.Picture.LoadFromFile('Btn_r50x25.ico');
      Label5.Caption := 'Es ist bisher keine AG erfasst!';
      BitBtn2.Visible := False;
      Image3.Picture.LoadFromFile('Btn_r50x25.ico');
      Label7.Caption := 'Es ist kein Straßenverzeichnis installiert!'
    end;
end;


Sorry, dachte das wäre ein allgemein bekanntes problem.

was ich nicht verstehe ist eben, dass es im Einzelschrittmodus funzt und im normalen nicht!!!???

die Markierungen zeigen den bestimmten bereich.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 13.07.08 23:34 
hmmm, Also ne DB, die dahinter hängt und die erst bei Bedarf geladen wird.
Kannste kurz noch beschreiben, was er da jetzt konkret falsch macht?
Irgendne Exception, weil der Wert von DatZähler nicht stimmt?

Kannst Du mal schauen: ggf. musst Du nach dem ADOQuery.active := True; erst noch nen kleinen Moment warten, bis er die Daten von der DB geholt hat. Schau dazu mal kurz, ob die Daten Synchron oder Asynchron geholt werden

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Morpheus1572 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157

Win XP
Delphi 7
BeitragVerfasst: Mo 14.07.08 09:03 
Moin @ all,

BenBE DU bist der Hammer. Dadurch das du eben deine Gedanken niedergeschrieben hast statt sie für dich zu behalten, ist mir der Fehler förmlich ins Gesicht gesprungen!!! :idea:

In der Zeile 19 ist der Fehler! diese Zeile muss raus! die Connection wurde schon im Form1 hergestellt und ich mache hier noch einmal eine Verbindung. Ich weiß nicht wie genau das funzt aber wenn ich die Zeile herausnehme macht das Prog genau das was es auch tun soll. und zwar im ersten Durchlauf!

Wie ich schon sagte, es funktionierte ALLES perfekt solange ich step by step vorging. offensichtlich habe ich dem Programm genügend zeit gelassen alles zu aktualisieren, welche es im nomal-Modus wohl nicht bekam. Fehlermeldungen kamen nicht! nachdem ich aber die zweite Conection-Geschichte entfernt habe ist alles chick.

Vielen Dank an Dich! Deine geschriebene Überlegung war der Schlüssel. :D
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 14.07.08 09:59 
Ich hab früher auch mit den ADOs regelmäßig gearbeitet und da auch manchmal ähnliche Effekte gehabt ...

Außerdem ist unterschiedliches Verhalten abhängig von der Ausführungszeit eigentlich fast immer ein Zeichen von Timing-Problemen; und das einzige, was bei Dir Timing-Abhängig war, ist das Fetchen der Daten aus der Connection ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.