Fehler: "" ist kein gültiger Integer!
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum VCL (C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo
Die Fehlermeldung besagt, das dein Programm versucht einen String in einen int umzuwandeln (meistens mittels StrToInt), aber zur Laufzeit in diesem konkreten Fall in dem String nur "" (also leerer String) steht. Deshalb die Exception (mit dem Compiler hat das wie schon gesagt nichts zu tun).
Offenbar hat aber die Exception mit dem gezeigtem Codeausschnitt nichts zu tun, denn dort wird nicht von String in int umgewandelt.
Benutz den Debugger um die eigentliche Ursache zu finden.bis bald
akari
-
sers
allerdings wird von int in str umgewandelt.
ShowMessage(IntToStr(ErzieherCount + 1)) ;
der fehler passt jedoch nicht dazu.
denn warum sollte er eine Zahl nicht in str umwandeln können.
selbst wenn qry_erzieher->RecordCount 0 zurückliefert,
ist das ergebnis dennoch 1 (s.o).stimme akari zu, der fehler wird wohl an anderer stelle auftreten.
-
durch die ShowMessages, habe ich genau die Codezeile herausgefiltert, die den Fehler erzeugt! Und zwar in dieser Zeile (wie oben schon geschrieben):
StringGrid1->RowCount = ErzieherCount + 1 ;
ErzieherCount ist als int deklariert, wird dann mit eins addiert. das müsste doch logischerweise immernoch einen integer ergeben!
Ich habe noch einen Verdacht, dass es vielleicht daran liegt, wenn ich den RowCount kleiner setze, als ich Zeilen habe, und der Fokus einer Zelle größer als die neue RowCount ist, dass dadurch vielleicht ein Fehler entsteht ... aber nur ein Verdacht, den ich noch nicht bestätigen konnte, da er nur bei einem gewissen Programmablauf entsteht, sonst nie!
-
MichelM schrieb:
durch die ShowMessages, habe ich genau die Codezeile herausgefiltert, die den Fehler erzeugt!
Von einem Debugger hast du auch noch nichts gehört, oder?
MichelM schrieb:
Und zwar in dieser Zeile (wie oben schon geschrieben):
StringGrid1->RowCount = ErzieherCount + 1 ;
ErzieherCount ist als int deklariert, wird dann mit eins addiert. das müsste doch logischerweise immernoch einen integer ergeben!
Deaktiviere mal die Laufzeitpackages (bei C++Builder <=6 aktiviere zusätzlich in den Projektoptionen "Mit Debug-Bibliotheken linken"), dann kannst du in den VCL-Quelltext steppen und sehen, wo genau der Fehler auftritt.
-
Naja hab schon vom Debugger gehört, aber der war mir bisher immer suspekt und ich habe die ShowMessages benutzt
Müsste doch aber eigentlich genauso (gleichen Effekt zur Fehlerfindung) wie diese Steps funktionieren oder?
-
MichelM schrieb:
Naja hab schon vom Debugger gehört, aber der war mir bisher immer suspekt
Es ist nicht zu fassen.
Junix hatte sich seinerzeit die Mühe gemacht und dieses Tutorial verfaßt. Nimm dir die Zeit und arbeite es durch.
Wenn du damit fertig bist, kannst du noch kurz hier nachlesen, was der Aufruf-Stack ist. Wenn du dann meinen Hinweis befolgst - ich zitiere ihn sicherheitshalber nocheinmal: "Deaktiviere mal die Laufzeitpackages (bei C++Builder <=6 aktiviere zusätzlich in den Projektoptionen "Mit Debug-Bibliotheken linken"), dann kannst du in den VCL-Quelltext steppen und sehen, wo genau der Fehler auftritt." -, dann bekommst du, wenn die Exception auftritt, vom Debugger sowohl exakt die Zeile, die ihn verursacht, als auch einen vollständigen Call-Stack dorthin. Wenn du den Aufruf-Stack rückwärts verfolgst (doppelklicken auf die einzelnen Einträge), kannst du nachvollziehen, auf welchem Weg dein Programm die verursachende Funktion aufruft. Und falls du trotz aller Mühen nichts damit anfangen kannst, dann kopiere einfach den Aufruf-Stack (Ctrl+C) und poste ihn hier.
Die RAD-Studio-Dokumentation ist übrigens insgesamt recht ausführlich, was den Debugger angeht. Wenn du mit dem Tutorial von Junix fertig bist, kannst du dich hier weiterbilden.
-
Also ich habe jetzt mal den Debugger benutzt und bekomme immer noch die gleiche Codezeile für den Fehler angezeigt (wie mit den ShowMessages) ...
Die Laufzeitpackages habe ich noch nicht deaktiviert gekriegt, wo muss ich das genau machen? Das habe ich bisher nicht gefunden
ich benutze derzeit den C++ Builder 2010
-
MichelM schrieb:
Die Laufzeitpackages habe ich noch nicht deaktiviert gekriegt, wo muss ich das genau machen?
Ja, das ist ziemlich schwer zu finden. Unter "Projektoptionen|Packages" gibt es eine Checkbox, die mit "Laufzeit-Packages verwenden" benannt ist. Da hätte man wirklich einen aussagekräftigeren Namen verwenden können; so kommt da ja niemand drauf.
-
audacia schrieb:
MichelM schrieb:
Die Laufzeitpackages habe ich noch nicht deaktiviert gekriegt, wo muss ich das genau machen?
Ja, das ist ziemlich schwer zu finden. Unter "Projektoptionen|Packages" gibt es eine Checkbox, die mit "Laufzeit-Packages verwenden" benannt ist. Da hätte man wirklich einen aussagekräftigeren Namen verwenden können; so kommt da ja niemand drauf.
Eindeutig, es ist ja auch schon schwierig genug, die Projektoption unter dem nichtssagenden Menüpunkt "Projektoption" zu finden.
[/Ironie]
-
nur gut das in meiner version es den menüpunkt Projektoption gar nicht gibt!
aber egal ... typisch schlaumeier!
-
schau mal unter "Projekt -> Optionen" oder verwende Umsch+Strg+F11
-
ick hab dit schon jefunden
bin ja nicht janz dämlich!! aber mich hat bloß grad die dämliche antwort von burkhi anjestunken!!
jedenfalls warn die laufzeit-packages schon deaktiviert! durchs debuggen hab ick auch jenau die gleiche Codezeile als fehlerstelle identifiziert, wie mit den ShowMeassages.
Der Fehler triit in der Zeile auf :
StringGrid1->RowCount = ErzieherCount + 1 ;
ErzieherCount ist als Integer deklariert und 1 ist auch ein Integer, als gibt es eine Integeraddition, die ErzieherCount um 1 erhöht. Lasse ich mir vorher diesen Wert per ShowMessage ausgeben, bekomme ich eine Integerzahl ausgegeben, aber dann kommt der Fehler:
Erste Gelegenheit für Exception bei $7661E124. Exception-Klasse EConvertError mit Meldung ''''' ist kein gültiger Integer-Wert'. Prozess KiTaPlaner.exe (7996)