Vor kurzem ist es mir passiert, dass ich bei einer Wertzuweisung an einen Long-Datentyp den "Fehler 6 - Überlauf" bekam, obwohl der Wert noch lange nicht die Grenzen des Long-Datentyps sprengen würde. Konkret sollte der User eine Zeit einstellen können, nach der Nachrichten im E-Mail Programm autom. als gelesen gekennzeichnet werden sollen. Die Zeitspanne kann der User im Bereich zwischen 0 und 60 Sekunden festlegen. Für das autom. Kennzeichnen der Nachricht mit dem Status "Gelesen" wird ein Timer eingesetzt. Der vom User festgelegte Wert muss für das korrekte Arbeiten des Timers mit dem Faktor 1000 multipliziert werden, da das Timer-Control die Interval-Eigenschaft in Millisekunden erwartet. Der verwendete Code sah wie folgt aus: Option Explicit Dim nTimeAutoRead As Integer ... ' vom User festgelegte Zeit aus INI-Datei auslesen nTimeAutoRead = GetIniInt("eMail", "Vorschauzeit", "10", sIniFile) ... ' Timer-Interval einstellen (Zeit in Millisekunden!) Timer1.Interval = nTimeAutoRead * 1000 Das ganze funktionierte prima, bis ein User auf die Idee kam, die Zeit auf 60 Sekunden festzulegen. Normalerweise ja kein Problem, da die Interval-Eigenschaft des Timers Werte bis 65535 aufnehmen kann und die eingestellte Zeit von 60 Sekunden ja mit 60000 Millisekunden noch unter dem max. zulässigen Wert von 65535 liegt. Nur was geschah? Timer1.Interval = nTimeAutoRead * 1000 Nur warum? VB verarbeitet hier aber scheinbar die Multiplikation als INTEGER-Multiplikation, die somit ab dem Wert 33 (33 * 1000 = 33000) zu dem Überlauf führt. Abhilfe schafft hier nur das explizite Umwandeln der Integer-Variable in den Long-Datentyp, wie nachfolgend gezeigt: Timer1.Interval = CLng(nTimeAutoRead) * 1000 Alternativ kann man die Variable nTimeAutoRead auch gleich als LONG deklarieren statt INTEGER. Dieser Tipp wurde bereits 10.020 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |