Ein in VB6 geschriebenes Programm greift auf eine Access97-Datenbank zu.
Eine Anwenderin behauptet, wenn sie die Enter-Taste verwendet, um in einem Formular zum nächsten Eingabefeld zu wechseln, wird die Fehlermeldung „Laufzeitfehler 70“ angezeigt. Wenn sie die Tabulator-Taste dafür verwendet, gibt es keine Fehlermeldung. Bei allen anderen Anwendern gibt es auch mit der Enter-Taste keine Fehlermeldung.
Bei Access kann man in den Optionen festlegen, was bei Betätigung der Eingabetaste passiert (Optionen -> Clienteinstellungen -> Bearbeiten -> Cursor mit Eingabetaste bewegen.
Die Grundeinstellung ist, dass bei Eingabetaste in das nächste Feld gesprungen wird, wie es auch die Tabulator-Taste macht. Aber eventuell hat sie die Einstellungen z. B. auf Sprung zu nächsten Datensatz geändert. Wenn dann ein Pflichtfeld nicht ausgefüllt wurde und du in deinem Programm ohne Sicherheitsabfrage für diesen Fall arbeitest, könnte das einen Laufzeitfehler verursachen. Und das würde auch erklären, warum der Tab keinen Fehler produziert, sondern nur die Eingabetaste.
ich ergänze mal:
" in VB6 SCHLECHT geschriebenes Programm "
Fehlermeldungen hat ein Programm abzufangen und angemessen zu erläutern! Beschwer dich beim Hersteller dieses Machwerks, denn das ist der einzige, der das korrigieren kann und muss!
Der Hersteller des Machwerks ist leider vor 3 Jahren verstorben und ich habe die Aufgabe bekommen, dieses (und andere) schlecht geschriebene Programm(e) noch am Leben zu erhalten.
Eine neue Version des Programms ist in Arbeit, aber bis das fertig ist, müssen die Anwender halt mit dem alten weiterwurschteln.
Im Programm passiert bei Enter (bei allen Feldern in diesem Formular als KeyPress-Event) Folgendes:
If KeyAscii = 13 Then
SendKeys „{TAB}“
KeyAscii = 0
End If
In der Access-DB ist bei „Cursor mit Eingabetaste bewegen“ die Option „Zu nächstem Feld bewegen“ aktiviert.
In Access97 hab ich das übrigens unter Extras -> Optionen -> Tastatur gefunden.
Aber eine Einstellung in Access kann es eigentlich nicht sein, weil ja die anderen Anwender, bei denen es funktioniert, mit Enter ins nächste Feld zu springen, mit derselben DB arbeiten.
Und was passiert beim funktionierenden „Tab“ im Unterschied dazu?
Ich würde mir übrigens mal anzeigen lassen, was das Programm beim Drücken der Tasten eigentlich für ein Event bekommt. Vielleicht ist da noch irgendein Makro-Abfang-Programm dazwischen, das irgendwas fummelt. Und das umgefummelte kann nicht verarbeitet werden.
Hier einen Haltepunkt setzen und dann im EInzelschritt weiterfahren. Dabei sollte sich klären, ob der Fehler von hier ausgelöst wird - ich glaub’s eher nicht.
Natürlich kann ich bei mir einen Haltepunkt setzen (was ich auch schon gemacht habe), aber bei mir tritt der Fehler ja nicht auf … und bei der Anwenderin, wo der Fehler auftritt, ist kein Visual Studio installiert, wo man einen Haltepunkt setzen und debuggen könnte.
Aber warum sollte bei einer If-Abfrage eine Laufzeitfehler 70 auftreten? Kann ich mir nicht vorstellen.
Mit welchen Windows-Versionen wird denn gearbeitet?
Es ist bekannt, dass die Funktion SendKeys() seit Vista Probleme macht und einen Runtime-Error 70 auslösen kann.
Schau mal, ob dir das hier weiterhilft: