![]() |
Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Hallo,
ich hab folgenden Codeabschnitt in meinem Quelltext:
Delphi-Quellcode:
Also.. kann mir jemand sagen was da los ist? :wall:
function TForm1.Test : string;
var xtest : real; begin with MyZQuery do try sql.Text:='SELECT * FROM Tabelle'; Active:=True; if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben Result:=FieldByName(cfID).AsString; finally Active:=False; end; end; Danke :) :angel: |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Woher weisst Du, wass in xtest geschrieben wird? So wie ich das sehe, wird xtest nicht weiter verwendet.
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
die Variable wird vom Compiler wegoptimiert
Delphi-Quellcode:
function TForm1.Test : string;
var xtest : real; begin with MyZQuery do try sql.Text:='SELECT * FROM Tabelle'; Active:=True; if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben Result:=FieldByName(cfID).AsString; finally Active:=False; end; if xtest = 0 then ; // damit sollte es gehn end; |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Selbst wenn xtest nicht wegoptimiiert würde, kann die Variable immer noch einen unbestimmten Inhalt haben. Es könnte ja durchaus passieren, dass die If-Bedingung nicht erfüllt ist.
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
ich hab da en Haltepunkt rein gemacht... auf die zuweisung..
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Du musst dann aber auch noch einen Schritt weiter gehen. Ansonsten ist die Zuweisung noch nicht erfolgt und die Variable ist noch nicht gefüllt. Hat also ihren nicht-initialisierten Zustand.
Oder setze mal den Haltepunkt nach der Zuweisung. (Bei der Result-Zuweisung) |
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
wenn ich ihn danach setze besteht die möglichkeit das er nich reingegangen ist. so schalu das ich en schritt weiter muss war ich auch.. ich schu morgen mal was passiert wenn ich die Variable danach nochmal verwende...
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
mach also mal den Haltepunkt auf Result:=FieldByName(cfID).AsString; und normaler Weise sollte Delphi was sagen, wegen der nichtgenutzten Variable ... also versuch es auch mal mit urgendwas, was diese Variable hinterher noch verwendet (z.B. mein IF).
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
ok ich hab die Variable danach nochmal verwendet und jetzt funt es, scheint wirklich "nur" wegoptimiert geworden zu sein. Aber könnte man das nicht auch wenigstens dazuschreiben? Da steht zwar das der auf xtest zugewiesene Wert nie verwendet wird, aber adraus kann ich doch nicht darauf schliessen das der wegoptimiert wurde :roll:
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Tja das ist genau der Grund, warum die Optimization grundsätzlich ausgeschaltet werden sollte. Der Compiler ist auch ohne Optimierung schnell genug und wenn sie an ist, macht er nur Blödsinn, wie z.B.: durchaus sinnvollen Code wegzuoptimieren oder Schindluder mit dem CallStack zu treiben.
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Zitat:
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Zitat:
Ich habe vor Jahren an einem Projekt gearbeitet, wo meine Mitarbeiter und die davor nie auf Warnungen und Hinweise geachtet haben. Als ich dazukam, waren es mittlerweile über 300 :!: , aber es nützt nix, diese zu entfernen, wenn da sonst niemand drauf achtet. Und diese können böse Auswirkungen haben, zumindest kann man Stunden damit verbringen, Fehler zu suchen, die eigentlich nur in einem kleinen Hinweis verborgen sind. (Dieses Projekt bestand übrigens aus über 250 Formularen) @angel Ich sehe Deine Funktion folgendermaßen: Rückgabe eines Feldes, wenn ein bestimmter Wert zw. 50 und 60 liegt: Zitat:
|
Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
Zitat:
Im Grunde genau das gleiche Problem wie hier: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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-2025 by Thomas Breitkreuz