Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   grüne Zeile (https://www.delphipraxis.net/194804-gruene-zeile.html)

juelin 8. Jan 2018 18:43


grüne Zeile
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi,
ich habe ein Problem und weiß nicht weiter.
Habe Windows 7 und Delphi XE5

Habe eine Code:
Delphi-Quellcode:
  Form1.SQLQuery1.SQL.Text:='SELECT * FROM einausmon ORDER BY Jahr, Monat, Ware ';
  Form1.SQLQuery1.Open;
  while not Form1.SQLQuery1.EOF do
  begin
    f1:=Form1.SQLQuery1.Fields[0].AsString;
    f2:=Form1.SQLQuery1.Fields[1].AsString;
    f3:=Form1.SQLQuery1.Fields[2].AsString;
    f4:=Form1.SQLQuery1.Fields[3].AsString;
    f5:=Form1.SQLQuery1.Fields[4].AsString;
    f6:=Form1.SQLQuery1.Fields[5].AsString;
    f7:=Form1.SQLQuery1.Fields[6].AsString;
    f8:=Form1.SQLQuery1.Fields[7].AsString;
    f9:=Form1.SQLQuery1.Fields[8].AsString;
    yy:=StrToInt(f2);
    mm:=StrToInt(f3);
    dd:=1;
    dat1:=EncodeDate(yy, mm, dd);
    yy2:=YearOf(vdat16);
    mm2:=MonthOf(vdat16);
    yy3:=YearOf(bdat16);
    mm3:=MonthOf(bdat16);
    if ((yy >= yy2) and (yy <= yy3) and (mm >= mm2) and (mm <= mm3)) then
    begin
...........
    end;
    Form1.SQLQuery1.Next;
  end;
  Form1.SQLQuery1.Close;
Wenn ich Haltepunkte setze und Compeliere ist eine Zeile Grün (siehe Anhang).
Wenn ich nun das Programm im Einzelschritt (F9 bei den Haltepunkten) durcharbeite,
so springt das Programm bei der grünen Zeile wieder auf den ersten Haltepunkt usw.
So oft bis alle Satze in der Datenbank gelesen sind.
Danach geht es mit Form1.SQLQuery1.Close; weiter.
Die Codezeilen dazwischen werden nicht berücksichtigt.
Hat jemand da eine Idee?
Gruß Jürgen

himitsu 8. Jan 2018 18:50

AW: grüne Zeile
 
Diese ist eine Zeile, zu der aktuell keine Debuginfos vorliegen.
> neue Zeile oder die Zeile wurde wegoptimiert, wenn z.B. die Variable links nirgendwo verwendet würde und der Compiler sich denkt, dass alles nutzlos ist.

Da ich sonst auch nirgendwo Codepunkte links sehe ... einfach mal die Unit / das Projekt neu kompileren erzeugen?
Haltepunkte löschen und neu setzen. (manchmal verrutscht einfach was)

PS: Ein [DELPHI] dein Delphi-Code [/DELPHI] würde deinen Code bestimmt lesbarer machen.

Redeemer 8. Jan 2018 18:54

AW: grüne Zeile
 
Grüne Zeile heißt: Der Compiler hat die Zeile entfernt. Entweder ist sie unnötig (ist sie hier offenbar nicht) oder neu.
Daher einmal das ganze Projekt neu kompilieren oder erzeugen und die Compilermeldungen genau lesen.

juelin 8. Jan 2018 19:46

AW: grüne Zeile
 
kann man die Funktion, das der Compiler Zeilen ausschaltet irgendwie deaktivieren?

Delphi.Narium 8. Jan 2018 20:16

AW: grüne Zeile
 
Unter Delphi 7 ging das in den Projektoptionen unter Compiler und dort dann unter Optimierung.

Ansonsten mal hier stöbern:
http://docwiki.embarcadero.com/RADSt...onfigurationen
https://support.smartbear.com/viewarticle/54592/

juelin 8. Jan 2018 20:50

grüne Zeile
 
Liste der Anhänge anzeigen (Anzahl: 3)
hi,
muss leider nochmal schreieben und das Problem konkretisieren.

ich habe ein Problem und weiß nicht mehr weiter.
Habe Windows 7 und Delphi XE5

Habe eine Code:
Delphi-Quellcode:
procedure TForm16.Ladtag;
  var z: integer;
  var m: integer;
  var dat1: TDate;
  var dat2: TDate;
  var dat3: TDate;
  var wa: string;
  var sum1: double;
  var sum2: double;
  var sum3: double;
  var sum4: double;
  var sum5: double;
  var sum6: double;
  var mg: double;
  var dd: Word;
  var mm: Word;
  var yy: Word;
  var dd2: Word;
  var mm2: Word;
  var yy2: Word;
  var mm3: Word;
  var yy3: Word;
  var h1: integer;
  var h2: integer;
begin
  z:=1;
  StringGrid1.RowCount:=z;
  Label1.Caption:=Chr(169)+'LINSOFT              Das Wohnzimmer                 Datum: '+FormatDateTime('DD.MM.YYYY',now);
  sume16:=0;
  suma16:=0;
  sum1:=0;
  sum2:=0;
  sum3:=0;
  sum4:=0;
  sum5:=0;
  sum6:=0;
  m:=0;
  Form1.SQLQuery1.SQL.Text:='SELECT * FROM einaustag ORDER BY Jahr, Monat, Ware ';
  Form1.SQLQuery1.Open;
  while not Form1.SQLQuery1.EOF do
  begin
    f1:=Form1.SQLQuery1.Fields[0].AsString;
    f2:=Form1.SQLQuery1.Fields[1].AsString;
    f3:=Form1.SQLQuery1.Fields[2].AsString;
    f4:=Form1.SQLQuery1.Fields[3].AsString;
    f5:=Form1.SQLQuery1.Fields[4].AsString;
    f6:=Form1.SQLQuery1.Fields[5].AsString;
    f7:=Form1.SQLQuery1.Fields[6].AsString;
    f8:=Form1.SQLQuery1.Fields[7].AsString;
    f9:=Form1.SQLQuery1.Fields[8].AsString;
    fa:=Form1.SQLQuery1.Fields[9].AsString;
    yy:=StrToInt(f2);
    mm:=StrToInt(f3);
    dd:=StrToInt(f4);
    dat1:=EncodeDate(yy, mm, dd);
    if ((dat1 >= vdat16) and (dat1 <= bdat16)) then
    begin
      if m = 0 then
      begin
        dat2:=dat1;
        wa:=f1;
        m:=1;
      end;
      mm:=MonthOf(dat2);
      yy:=YearOf(dat2);
      mm2:=MonthOf(dat1);
      yy2:=YearOf(dat1);
      if ((mm <> mm2) or (yy <> yy2) or (wa <> f1)) then
      begin
        dd:=DayOf(dat2);
        mm:=MonthOf(dat2);
        yy:=YearOf(dat2);
        ialpha:=FloatToStr(sum1);
        Form1.kommapunkt;
        fb:=ialpha;
        ialpha:=FloatToStr(sum2);
        Form1.kommapunkt;
        fc:=ialpha;
        ialpha:=FloatToStr(sum3);
        Form1.kommapunkt;
        fd:=ialpha;
        ialpha:=FloatToStr(sum4);
        Form1.kommapunkt;
        fe:=ialpha;
        ialpha:=FloatToStr(sum5);
        Form1.kommapunkt;
        ff:=ialpha;
        ialpha:=FloatToStr(sum6);
        Form1.kommapunkt;
        fg:=ialpha;
        Form1.SQLDataSet1.CommandText:='INSERT INTO einausmon (Ware, Jahr, Monat, einmg, ausmg, einbetrag, ausbetrag, einmwst, ausmwst)'+' values ('''+wa+''', '''+IntToStr(yy)+''', '''+IntToStr(mm)+''', '''+fb+''', '''+fc+''', '''+fd+''', '''+fe+''', '''+ff+''', '''+fg+''')';
        h1:=Form1.SQLDataSet1.ExecSQL(False);
        if h1 <> 1 then
        begin
          Label2.Caption:='Fehler beim Einfügen in einausmon, Administrator verständigen';
        end;
        dat2:=dat1;
        wa:=f1;
        sum1:=0;
        sum2:=0;
        sum3:=0;
        sum4:=0;
        sum5:=0;
        sum6:=0;
        ialpha:=f5;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum1:=sum1+mg;
        ialpha:=f6;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum2:=sum2+mg;
        ialpha:=f7;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum3:=sum3+mg;
        ialpha:=f8;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum4:=sum4+mg;
        ialpha:=f9;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum5:=sum5+mg;
        ialpha:=fa;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum6:=sum6+mg;
      end else begin
        ialpha:=f5;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum1:=sum1+mg;
        ialpha:=f6;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum2:=sum2+mg;
        ialpha:=f7;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum3:=sum3+mg;
        ialpha:=f8;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum4:=sum4+mg;
        ialpha:=f9;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum5:=sum5+mg;
        ialpha:=fa;
        Form1.punktkomma;
        mg:=StrToFloat(ialpha);
        sum6:=sum6+mg;
      end;
    end;
    Form1.SQLQuery1.Next;
  end;
  Form1.SQLQuery1.Close;
  if m = 1 then
  begin
    dd:=DayOf(dat1);
    mm:=MonthOf(dat1);
    yy:=YearOf(dat1);
    ialpha:=FloatToStr(sum1);
    Form1.kommapunkt;
    fb:=ialpha;
    ialpha:=FloatToStr(sum2);
    Form1.kommapunkt;
    fc:=ialpha;
    ialpha:=FloatToStr(sum3);
    Form1.kommapunkt;
    fd:=ialpha;
    ialpha:=FloatToStr(sum4);
    Form1.kommapunkt;
    fe:=ialpha;
    ialpha:=FloatToStr(sum5);
    Form1.kommapunkt;
    ff:=ialpha;
    ialpha:=FloatToStr(sum6);
    Form1.kommapunkt;
    fg:=ialpha;
    Form1.SQLDataSet1.CommandText:='INSERT INTO einausmon (Ware, Jahr, Monat, einmg, ausmg, einbetrag, ausbetrag, einmwst, ausmwst)'+' values ('''+f1+''', '''+IntToStr(yy)+''', '''+IntToStr(mm)+''', '''+fb+''', '''+fc+''', '''+fd+''', '''+fe+''', '''+ff+''', '''+fg+''')';
    h1:=Form1.SQLDataSet1.ExecSQL(False);
    if h1 <> 1 then
    begin
      Label2.Caption:='Fehler beim Einfügen in einausmon, Administrator verständigen';
    end;
  end;
  m:=0;
[Zeile 258] Form1.SQLQuery1.SQL.Text:='SELECT * FROM einausmon ORDER BY Jahr, Monat, Ware ';
  Form1.SQLQuery1.Open;
  while not Form1.SQLQuery1.EOF do
  begin
    f1:=Form1.SQLQuery1.Fields[0].AsString;
    f2:=Form1.SQLQuery1.Fields[1].AsString;
    f3:=Form1.SQLQuery1.Fields[2].AsString;
    f4:=Form1.SQLQuery1.Fields[3].AsString;
    f5:=Form1.SQLQuery1.Fields[4].AsString;
    f6:=Form1.SQLQuery1.Fields[5].AsString;
    f7:=Form1.SQLQuery1.Fields[6].AsString;
    f8:=Form1.SQLQuery1.Fields[7].AsString;
    f9:=Form1.SQLQuery1.Fields[8].AsString;
    yy:=StrToInt(f2);
    mm:=StrToInt(f3);
    dd:=1;
    dat1:=EncodeDate(yy, mm, dd);
    yy2:=YearOf(vdat16);
    mm2:=MonthOf(vdat16);
[Zeile277]   yy3:=YearOf(bdat16);
    mm3:=MonthOf(bdat16);
    if ((yy >= yy2) and (yy <= yy3) and (mm >= mm2) and (mm <= mm3)) then
    begin
      if m = 0 then
      begin
        dat2:=dat1;
        m:=1;
      end;
      if dat2 <> dat1 then
      begin
        dd2:=0;
        mm2:=MonthOf(dat2);
        yy2:=YearOf(dat2);
        Form1.SQLDataSet1.CommandText:='INSERT INTO abschluss (Art, Jahr, Monat, Tag)'+' values ('''+'M'+''', '''+IntToStr(yy2)+''', '''+IntToStr(mm2)+''', '''+IntToStr(dd2)+''')';
        h1:=Form1.SQLDataSet1.ExecSQL(False);
        if h1 <> 1 then
        begin
          Label2.Caption:='Fehler beim Einfügen in Abschluss, Administrator verständigen';
        end;
        dat2:=dat1;
      end;
      fg:='';
      fh:='';
      Form1.SQLQuery2.SQL.Text:='SELECT * FROM ware WHERE Ware='''+f1+''' ';
      Form1.SQLQuery2.Open;
      while not Form1.SQLQuery2.EOF do
      begin
        fg:=Form1.SQLQuery2.Fields[2].AsString;
        fh:=Form1.SQLQuery2.Fields[13].AsString;
        Form1.SQLQuery2.Next;
      end;
      Form1.SQLQuery2.Close;
      mm:=StrToInt(f3);
      yy:=StrToInt(f2);
      z:=z + 1;
      StringGrid1.RowCount:=z;
      z:=z - 1;
      StringGrid1.Cells[0, z]:=IntToStr(yy);
      StringGrid1.Cells[1, z]:=IntToStr(mm);
      StringGrid1.Cells[2, z]:=f1;
      ialpha:=f4;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
      StringGrid1.Cells[3, z]:=FloatToStrF(mg,ffFixed,8,3);
      StringGrid1.Cells[4, z]:=fg;
      ialpha:=f5;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
      StringGrid1.Cells[5, z]:=FloatToStrF(mg,ffFixed,8,3);
      StringGrid1.Cells[6, z]:=fh;
      ialpha:=f6;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
      StringGrid1.Cells[7, z]:=FloatToStrF(mg,ffFixed,8,2);
      sume16:=sume16+mg;
      ialpha:=f7;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
      StringGrid1.Cells[8, z]:=FloatToStrF(mg,ffFixed,8,2);
      suma16:=suma16+mg;
      ialpha:=f8;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
      StringGrid1.Cells[9, z]:=FloatToStrF(mg,ffFixed,8,2);
      ialpha:=f9;
      Form1.punktkomma;
      mg:=StrToFloat(ialpha);
[Zeile 345]     StringGrid1.Cells[10, z]:=FloatToStrF(mg,ffFixed,8,2);
      z:=z + 1;
    end;
    Form1.SQLQuery1.Next;
  end;
  Form1.SQLQuery1.Close;
  if m = 1 then
  begin
    dd2:=0;
    mm2:=MonthOf(dat1);
    yy2:=YearOf(dat1);
    Form1.SQLDataSet1.CommandText:='INSERT INTO abschluss (Art, Jahr, Monat, Tag)'+' values ('''+'M'+''', '''+IntToStr(yy2)+''', '''+IntToStr(mm2)+''', '''+IntToStr(dd2)+''')';
    h1:=Form1.SQLDataSet1.ExecSQL(False);
    if h1 <> 1 then
    begin
      Label2.Caption:='Fehler beim Einfügen in Abschluss, Administrator verständigen';
    end;
  end;
  Label8.Caption:=FloatToStrF(sume16,ffFixed,9,2);
  Label10.Caption:=FloatToStrF(suma16,ffFixed,9,2);
  if z = 1 then
  begin
    StringGrid1.RowCount:=2;
    StringGrid1.Cells[0, 1]:='';
    StringGrid1.Cells[1, 1]:='';
    StringGrid1.Cells[2, 1]:='';
    StringGrid1.Cells[3, 1]:='';
    StringGrid1.Cells[4, 1]:='';
    StringGrid1.Cells[5, 1]:='';
    StringGrid1.Cells[6, 1]:='';
    StringGrid1.Cells[7, 1]:='';
    StringGrid1.Cells[8, 1]:='';
    StringGrid1.Cells[9, 1]:='';
    StringGrid1.Cells[10, 1]:='';
  end;
  StringGrid1.FixedRows:=1;
  StringGrid1.FixedColor:=clLime;
end;
Wenn ich Haltepunkte setze und Compeliere sind einige Zeilen Grün (siehe Anhang).
Wenn ich nun das Programm im Einzelschritt (F9 bei den Haltepunkten) durcharbeite,
so springt das Programm bei Zeile 278 als nächstes auf Zeile 345
danach Zeilen 258 bis 277 und wieder Zeile 345 und Zeile 258, und so weiter
bis alle Satze in der Datenbank gelesen sind (Zeilennummern im Anhang).
Danach geht es mit Form1.SQLQuery1.Close; weiter.
Die Codezeilen dazwischen werden nicht berücksichtigt.
Projekt neu Compelieren bzw. Projekt neu erzeugen bringt auch nichts.
Keine relevanten Fehlermeldungen nach Projekt neu erzeugen vorhanden.
Kann man die Funktion Zeilen deaktivieren ausschalten?

Hat jemand da eine Idee und kann helfen?
Gruß Jürgen

Delphi.Narium 8. Jan 2018 21:03

AW: gruene Codezeilen
 
Da hab' ich jetzt keine sinnvolle Antwort, weiß aber, dass in eínigen Projekten von mir, die Anzeige der Zeilen im Debugger, nicht mit den tatsächlich ausgeführten Zeilen übereinstimmt. Die Differenz ist zwar innerhalb eines Projektes einheitlich, aber bei unterschiedichen Projekt meist in einer Spanne von ca. 5 bis 9 Zeilen.

Es könnte sein, dass der Debugger die Zeilen nicht mit der realen Welt synchroniert bekommt.

Kannst Du Haltepunkte nur auf Zeilen setzen, die auch ausführbaren Code enthalten oder ggfls. auch auf Leerzeilen. In seltenen Fällen hab' ich schonmal diesen Effekt.

Compilierst Du mit Debugger-DCUs?
Wenn nein, ändere das bitte einmal, eventuell hast Du ja damit Glück.

Lemmy 8. Jan 2018 21:16

AW: gruene Codezeilen
 
lösche mal die zugehörigen dcus deiner (!) Sourcen und kompilier mal neu. Stimmen die Haltepunkte immer noch nicht, dann schau, ob Du ggf. 2 gleichname Dateien im Suchpfad hast.

Grüße

Delphi.Narium 8. Jan 2018 21:47

AW: gruene Codezeilen
 
Methode brutal:

Alle Verzeichnisse, die für die Ausgabe dienen, umbenennen und leer neu anlegen. Dann kompilieren, und nur dann, wenn Fehler wegen fehlender DCUs auftreten, zuerst nach den entsprechenden PAS-Dateien suchen und die mit in die entsprechenden Pfade aufnehmen.

Nur wenn es keine PAS-Dateien gibt, DCUs in den entsprechenden Verzeichnisse verschieben (also in die neuen Verzeichnis zu den zuvor umbenannten).

Und ja: Das ist aufwändig und nervtötend, hilft aber zuweilen, vor allem dann, wenn eine Entwicklungsumgebung schon 'ne Weile in Benutzung ist und sich da so allerlei angesammelt hat (z. B. die von Lemmy angesprochenen gleichnamigen Dateien).

Und nein: Eine Erfolgsgarantie gibt's dafür nicht.

Jumpy 9. Jan 2018 07:51

AW: gruene Codezeilen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1390544)
Da hab' ich jetzt keine sinnvolle Antwort, weiß aber, dass in eínigen Projekten von mir, die Anzeige der Zeilen im Debugger, nicht mit den tatsächlich ausgeführten Zeilen übereinstimmt. Die Differenz ist zwar innerhalb eines Projektes einheitlich, aber bei unterschiedichen Projekt meist in einer Spanne von ca. 5 bis 9 Zeilen.

Das hatte ich auch schon mal, mit falschen Zeilenumbrüchen. Ich habe dann den ganzen Quelltext der betroffenen Unit in einen Texteditor kopiert. Die "bösen" Zeilenumbrüche ersetzt und wieder alles zurück kopiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.
Seite 1 von 2  1 2      

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