| Autor |
Beitrag |
Flonkon
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 06.10.11 17:57
Hallo ihr da ich bin auf euer Forum gestoßen weil ich an einem Problem verzweifle ...
Hoffe das ihr mir helfen könnt...
Und zwar bin ich seit kurzem Wiedereinsteiger mit Delphi, hab eine ganze Zeit lange mit Delphi gearbeitet und dann wieder über 1 Jahr gar nicht...
jetzt wollte ich mal wieder anfangen und wollte mir einen ganz einfachen Stundenrechner für meine Arbeitszeiten basteln, das ganze im Zusammenhang mit
einer MySql Datenbank, hat soweit schon alles super geklappt, Datenbank erstellt, mit Delphi geöffnet ausgelesen, schreiben etc funktioniert problemlos
so wie ich es in Erinnerung habe.
Mein jetztiges Problem ist folgendes, ich bin mir aller Variablentypen nicht mehr sicher, in meiner Datenbank habe ich die Arbeitsstunden in Float gesichert,
lese Sie in Delphi in Real aus und schreibe sie als String in Textfelder, ich bekomme es aber nicht hin diese Daten wieder rauszuholen und
dann die Arbeitsstunden mal den Stundenlohn zu rechnen, ich probiere sie aus dem String zu holen und mit strtofloat dann wieder in die Real Variable zu bringen,
aber Delphi sagt mir das meine Zahl (in meinem Fall 6,5) not a valid float ... ist ... hier mal der Ausschnitt von meinem Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var s:string; hl2:string; hl3:string; hl5:real; i:integer; hrs:real; hl:real; hl4:longint;
label1.Caption:=FloatTostr(hrs); hl3:=label3.caption; hl4:=strtoint(hl3); hrs:=hrs*hl4;
label5.caption:=floattostr(hr s) |
|
|
jaenicke
      
Beiträge: 19338
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 06.10.11 18:07
Hallo und
Der Fehler kommt eher bei StrToFloat.
In welcher Zeile genau tritt der Fehler denn auf?
Nebenbei:
Real sollte besser nicht verwendet werden, nimm besser Double...
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 06.10.11 18:26
Hab das ganze jetzt wieder anders versucht und aufgebaut und es sieht jetzt folgendermaßen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var i:integer; s:string; hl2:string; hl3:double; hl5:double; hrs:double; hl:double; hl4:double;
hl3:=strtofloat(label1.caption); hl4:=strtofloat(label3.caption); hl5:=hl3*hl4;
label5.caption:=floattostr(hl5); |
Bekomme nun den gleichen Fehler ind Zeile 13 also bei:
Delphi-Quelltext 1:
| hl3:=strtofloat(label1.caption); |
Ich arbeite übrigens noch mit Delphi 6 falls das irgendwas ausmacht...
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.10.11 18:38
Wie sieht denn die Beschriftung des Labels aus, also z.B. "2,3" oder "2.3"?
Edit: Im Falle von "2.3" müsste dann zur Laufzeit eine Fehlermeldung kommen, dass "2.3" kein gültiger Gleitkommawert ist. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 06.10.11 18:56
Hi
Das Problem ist, dass du nach der Variablendeklaration das begin vergessen hast.
lg
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.10.11 19:01
Dann würde aber Delphi doch eine andere Fehlermeldung werfen oder? 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 06.10.11 19:11
Das sind nur Ausschnitte aus meinem Code, der gesamte sieht anders aus, ich kopier ihn hier mal rein:
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:
| procedure TfrmMain.Button2Click(Sender: TObject); var s:string; hl2:string; hl3:double; hl5:double; i:integer; hrs:double; hl:double; hl4:double;
begin db.ListTables(); listbox2.items:= db.GetResultAsStrings;
if wrapquery (db,'SELECT Datum FROM tbl_datum') then listbox5.items:=db.GetResultAsStrings;
if wrapquery(db,'SELECT Uhrzeit FROM tbl_uhrzeit') then listbox6.Items:=db.GetResultAsStrings;
if wrapquery(db,'SELECT Zeit FROM tbl_zeit') then listbox7.Items:=db.GetResultAsStrings;
if wrapquery(db,'SELECT Titel FROM arbeitgeber') then s:=db.GetResultAsText; label7.Caption:=s;
if wrapquery(db,'SELECT stundenlohn FROM lohn') then s:=db.getresultastext; s:=StringReplace(s,'.' , ',' ,[rfReplaceAll, rfIgnoreCase]); edit1.Text:=s; label3.Caption:=s;
For i:=0 to listbox7.Count-1 do begin
hl2:=listbox7.Items[i]; hl2:=StringReplace(hl2,'.' , ',' ,[rfReplaceAll, rfIgnoreCase]); hl:=strtofloat(hl2); hrs:=hrs+hl;
end;
label1.Caption:=FloatTostr(hrs);
hl3:=strtofloat(label1.caption); hl4:=strtofloat(label3.caption); hl5:=hl3*hl4;
label5.caption:=floattostr(hl5);
end; |
So siehts insgesamt aus ich habe also vorher alle Punkte in meiner Zahl durch Kommas ersetzt und es klappt trotz allem nicht...
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 06.10.11 19:24
Was mir noch auffällt ist, dass du die Variable hrs nicht initialisiert hast.
Weißt du eigentlich, wofür deine Abkürzungen stehen? hrs, hl ist ein Double, hl2 dagegen ein String. Für mich ist die Bennenung sehr verwirrend. 
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.10.11 19:32
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 06.10.11 19:56
@Marc
Ja ich muss da mal aufräumen das stimmt wohl bin selber etwas durcheinander gekommen teilweise mit den Variablen, damit hat ich schon immer Probleme
@Dude566
Funktioniert das denn auch wenn du es aus nem label nimmst und nicht aus nem edit ?
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.10.11 20:16
Flonkon hat folgendes geschrieben : |
@Dude566
Funktioniert das denn auch wenn du es aus nem label nimmst und nicht aus nem edit ? |
Ja funktioniert es.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 06.10.11 20:20
Flonkon hat folgendes geschrieben : | | Funktioniert das denn auch wenn du es aus nem label nimmst und nicht aus nem edit ? |
Unter Delphi2009 ja, sofern ich als Trennzeichen das Komma statt dem Punkt verwende. Aber das ist Systemeinstellung.
Befindet sich in deiner Caption vielleicht noch ein Leerzeichen oder sonstige Steuerzeichen, wie #13#10?
|
|
jaenicke
      
Beiträge: 19338
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 06.10.11 20:25
Da die Variable nicht initialisiert ist, ist es schlicht Zufall was in dem Label ankommt. Gib den Inhalt doch einfach einmal in der Zeile vor dem Fehler mit Delphi-Quelltext 1:
| ShowMessage('"' + label1.caption + '"'); | aus. Dann siehst du ja was drin ist.
Zuletzt bearbeitet von jaenicke am Do 06.10.11 20:29, insgesamt 1-mal bearbeitet
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 06.10.11 20:27
So wie ich ihn verstanden habe, hat er das Label ja wohl mit "6,5" beschriftet und so funktioniert es auch bei mir, wieso auch nicht. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Do 06.10.11 20:39
In dem Label stehen genau die 6,5 also der Stundenlohn, ich versteh auch nicht woher das kommen kann wenn ich das in nem anderen Programm ausprobiere, dann klappt es auch ich weiß nicht woran das liegen könnte...
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Do 06.10.11 21:38
Du könntest doch einmal das komplette Projekt hochladen, würde es einfacher für uns machen.
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
|
Verfasst: Do 06.10.11 22:11
Hallo,
| jaenicke hat folgendes geschrieben: | Real sollte besser nicht verwendet werden, nimm besser Double
|
Das ist eigentlich egal, weil real double entspricht. Was man nicht mehr verwenden sollte ist real48, dieser Datentyp ist veraltet.
Bis bald Chemiker
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 07.10.11 06:13
Ich hab euch hier mal das komplette Projekt hochgeladen, ich möchte bitte keine Anspielungen zur formatierung meines Source hören,
ich weiß das es absolut unübersichtlich und schlecht ist... aber bis jetzt hat es funktioniert
Ich benutze wie gesagt Delphi 6 und Xampp, ihr müsst also die "stundenplaner.sql" bei Xampp einfügen sonst klappt das ganze nicht ...
und falls ihr bei Xampp anderen Benutzernamen und Passwort habt dies auch im Programm ändern...
Versucht mal euer Glück...
www.mediafire.com/?x9q7i6w7c8qh97o
|
|
jaenicke
      
Beiträge: 19338
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 07.10.11 06:30
Mal eine ganz andere Frage:
Benutzt du zufällig Windows 7?
Wenn ja, stell doch einfach mal in den Regions- und Spracheinstellungen die Formateinstellung auf eine andere Sprache, übernehme und stell sie zurück auf Deutschland. Da gibt es nämlich auf einigen PCs (offenbar nur / vor allem vorkonfiguriert ausgelieferte) falsche Einstellungen.
Wegen dem Downloadlink:
Häng die Datei doch bitte einfach im Forum an, das wäre sinnvoller...
|
|
Flonkon 
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 07.10.11 08:53
Windows 7 habe ich habs ausprobiert aber es klappt leider auch nicht mit den Regions und Spracheinstellungen
hier nochmal die Datei....
Moderiert von Narses: Inline- in normalen Anhang gewandelt, Binaries aus dem Archiv entfernt.
Einloggen, um Attachments anzusehen!
|
|