Ich habe folgendes Problem in Access:
Ich habe in Access mehrere Formulare, die über „Weiter“-Buttons miteinander verknüpft sind. Die Formulare basieren alle auf einer Tabelle in einer MS-SQL-Server Datenbank. Mit dem ersten Formular möchte ich einen neuen Datensatz bestehend aus: Name Vorname und ID in die Tabelle eingeben. Wennn ich im ersten Formular auf den weiter-Button klicke soll das zweite Formular auch auf genau diesem Datensatz mit der gleichen ID basieren.
Der VBA Code für meinen Weiter Button sieht so aus:
stLinkCriteria = „[id]=“ & Me![id]
DoCmd.OpenForm Formular2, , , stLinkCriteria
Leider funktioniert das ganze recht unzuverlässig, d.h manchmal zeigt das zweite Formular den gewünschten Datensatz an, ab und zu springt es aber auf den ersten Datensatz in der Tabelle. Bei Formularen, die auf Access Tabellen basieren funktioniert es aber einwandfrei.
tut mir leid, ganz vergessen: Für die Übergabe der id von einem Formular zum anderen brauchst Du (zumindest ist das ein Weg) eine globale Variable. Modul öffnen oder neu anlegen und eintragen
Public intID As Integer
Ich vermute einmal Integer trifft zu.
Dann kanst Du vor Schließen von Formular0, von wo Du nach Formular1 wechselst, die id einlesen:
intID = Forms!Formular0!id
und den Code beim Öffnen von Formular1 anpassen:
DoCmd.FindRecord intID
Ich hoffe, das hilft weiter.
ujk
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Vielen Dank für Dein Hilfe. Das Ganze sieht jetzt so aus:
Code im Formular1:
Private Sub bntweiter_Click()
Me!id.SetFocus
intid = Me!id
DoCmd.OpenForm „Formular2“
End Sub
Code im Formular2:
Private Sub Form_Open(Cancel As Integer)
DoCmd.FindRecord intaid
End Sub
code in Modul1:
Public intid as integer
Der Debugger bringt die Fehlermeldung:
Ein Makro das einer eigenschaft des aktuellen Felds zugeordnet ist, konnte wegen eines Fehlers in einem Argument der SuchenDatensatz Aktion (findRecord) nicht ausgeführt werden.
Leider funktioniert das ganze recht unzuverlässig, d.h
manchmal zeigt das zweite Formular den gewünschten Datensatz
an, ab und zu springt es aber auf den ersten Datensatz in der
Tabelle. Bei Formularen, die auf Access Tabellen basieren
funktioniert es aber einwandfrei.
Versuch’s noch mal mit diesem Code. Du musst dann aber sicherstellen, dass die Speichern-Aktion auch in der SQL-Server-Datenbank stattgefunden hat (z. B. falls irgendwas mit Transaktionen läuft, die noch nicht abgeschlossen sind). Access ist, was das angeht, ziemlich „tolerant“ und damit transaktionsfehleranfällig, und speichert den Datensatz sofort. Damit ist er im Folgeformular schon vorhanden.
Bei einer verknüpften Server-Tabelle könnte der Zugriff über Dein Link-Kriterium hin und wieder schon erfolgen, bevor der Server sein Commit (also das Speichern) ausgeführt hat.
Aber abgesehen davon: Verwende doch ein Formular ggf. mit einem Registersteuerelement, bei dem Du ggf. auch nur das jeweils aktuelle Registerblatt sichtbar schaltest. Dann sollten diese Probleme nicht auftreten.
@ ujk,
Danke, der Code funktioniert jetzt.
Leider ist das eigentliche Problem noch nicht behoben.
Wenn ich z.B einen neuen Datensatz eingebe und diesen speichere wird diesem Datensatz automatisch eine ID zugewiesen. Damit die Verknüpfung der Formulare funktioniert sollte diese ID die aktuelle ID des Formulars sein, bzw. Me!Id sollte den Wert der gerade zugewiesenen ID haben. Genau dies funktioniert nicht richtig. Wenn ich das Programm schrittweise mit dem Debugger durchlaufen lasse wird Me!Id manchmal die akuelle ID zugewiesen machmal bleibt der Wert aber auch auf der ID des vorletzten Datensatzes stehen. Ich denke das Problem liegt irgendwo anders.
@Manfred:
„Bei einer verknüpften Server-Tabelle könnte der Zugriff über Dein Link-Kriterium hin und wieder schon erfolgen, bevor der Server sein Commit (also das Speichern) ausgeführt hat.“
Wenn ich den Datensatz in dem Access Formular speichere, steht er auch sofort in der MS-SQL Server Tabelle drin. Müsste es dann nicht gehen?