VB6 Laufzeitfehler 70

Hallo Welt

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.

Wer weiß, was die Ursache dafür sein könnte?

Schöne Grüße aus Österreich
Roland

Moin,

da müsste man schon ins Programm schauen, was bei Enter passiert. Der Fehler weist auf eine Zugriffsberechtigung hin.

Gruß
Ralf

ps: Es gibt spezielle Access-Foren, dort wäre die Frage wohl besser aufgehoben, zB MSO

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.

Nur so eine Idee. Vielleicht hilft es ja weiter.

1 Like

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.

Btw., du hast mein Mitgefühl:

Bei Tab springt der Cursor ins nächste Feld.
Es wird kein Event ausgelöst.

Bei Enter wie geschrieben das KeyPress-Event:
If KeyAscii = 13 Then
SendKeys „{TAB}“
KeyAscii = 0
End If

Makro gibt es keines in der DB.

Danke für dein Mitgefühl!

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.

Gruß
Ralf

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.

… und was kommt nach dem End If?

denn nach KeyAscii = 0 gehört denn auch ein Exit Sub gesetzt

Wenn möglich, lass mal die ganze Routine lesen

LG
Ce

Wofür ist das:

eigentlich gut?

Könnte es sein, dass das schon das Problem ist?
Wobei ich keine Idee habe, warum das nur bei diesem einen Rechner passiert.

Das ist schon die ganze Routine.
Sie besteht nur aus dem If.
Nach dem End If kommt nur mehr ein End Sub.

Was sich mein verstorbener Vorgänger bei KeyAscii = 0 gedacht hat, entzieht sich leider meiner Kenntnis.

den Tastaturpuffer löschen… wenn ich mich richtig erinnere

BTW: Abfolge der Tastatur-Events ist ja
KeyDown
KeyPress
KeyUp
… die beiden anderen sind sauber (leer)?

KeyDown und KeyUp kommen in diesem Programm nicht vor.

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:

1 Like

KeyAscii ist keine Funktion, sondern die Variable, die den Tastendruck als Ascii-zeichen enthält. „0“ ist ein gültiges Ascii-zeichen.

Man sollte also mal nachschauen, wer die Variable füllt und was nach der Auswertung in der zitierten Unterroutine passiert.

KeinesHerrenKnecht, dein Link hat die Lösung des Problems gebracht!

Unter Windows 7 muss man die UAC-Einstellungen auf „Nie benachrichtigen“ ändern, dann kommt die Fehlermeldung nicht mehr.

Vielen Dank!

1 Like