Access 2003 Fehler 3201 bei DB Bestellabwicklung

Hallo,

ich habe mich mal an Access heran gewagt und bin schon ganz gut voran gekommen, jetzt plagt mich allerdings ein Problem:

Ich habe eine neue Datenbank mit der Vorlage „Bestellabwicklung“ erstellt (MS-Vorlage). So weit funkt die DB auch ganz gut. Wenn ich jedoch eine neue Bestellung anlegen möchte kommt es in einer bestimmten Situation zum Fehler 3201. Das passiert immer dann, wenn ich aus dem Feld „Bestell-Nr.“ (AutoWert) direkt in das Unterformular „Bestelldetails“ springe. Wenn ich zunächst im Hauptformular Daten ändere, erscheint der Fehler nicht.

Was ich mir selbst dazu zusammen gereimt habe, ist Folgendes: Im Hauptformular wird der Wert für die Bestellnummer ermittelt. Diese soll jedoch nur vergeben werden, wenn der User auch wirklich Daten in das Formular eingibt. Erst dann wird aus der Anzeige „AutoWert“ auch eine Zahl generiert. Springt man aus dem Feld Bestellnummer dirkt in das eingebettete Formular, wird der Prozess nicht abgeschlossen und das Hauptformular liefert nicht den Wert an die Tabelle, der für die referentielle Integrität zuständig ist, weiter. Access weigert sich folglich den Datensatz aus dem Unterformular zu speichen und gibt den Fehler 3201 aus.

PS: Das Problem kann jeder nachvollziehen, der in Access einmal die DB Bestellabwicklung anlegt.

Ich bin mitterlerweile etwas verzweifelt und könnte jeden Tipp gebrauchen.

Vielen Dank.

Hallo,

Das passiert immer dann, wenn ich aus dem Feld „Bestell-Nr.“
(AutoWert) direkt in das Unterformular „Bestelldetails“
springe. Wenn ich zunächst im Hauptformular Daten ändere,
erscheint der Fehler nicht.

logisch

Was ich mir selbst dazu zusammen gereimt habe, ist Folgendes:
Im Hauptformular wird der Wert für die Bestellnummer
ermittelt.

generiert

Diese soll jedoch nur vergeben werden, wenn der
User auch wirklich Daten in das Formular eingibt.

jaein, diese wird vergeben, wenn ein neuer Datensatz angelegt wird. Dabei ist es unerheblich ob im Formular, in er Tabelle oder per VBA etc.

Springt man aus dem Feld Bestellnummer dirkt in das
eingebettete Formular, wird der Prozess nicht abgeschlossen
und das Hauptformular liefert nicht den Wert an die Tabelle,
der für die referentielle Integrität zuständig ist, weiter.

richtig, da kein neuer Datensatz angelegt wurde

Access weigert sich folglich den Datensatz aus dem
Unterformular zu speichen und gibt den Fehler 3201 aus.

logisch, da kein Datensatz in der Haupttabelle vorliegt und ein Bezug nicht möglich ist. Du kannst auch kein Dach bauem, ohne ein Haus darunter.

Ich bin mitterlerweile etwas verzweifelt und könnte jeden Tipp
gebrauchen.

Erstmal verhindere, dass man in diesem Feld landet:

  • Rechtsklick auf das Feld
  • Eigenschaften
  • Aktiviert = nein
  • Gesperrt= ja

So nun wird i.d.R. ein anderes Feld als Erstes angesprungen, wenn man das Formular öffnet.

Nun ist es wichtig, dort eine Eingabe vorzunehmen.
Was für einen Sinn mancht es, Bestelldetails ohne Bestellung zu haben?

  • Rechtsklick auf dieses Feld
  • Eigenschaften
  • Reiter [Ereignis]
  • Bei Fokusverlußt
  • Ereignisprozedur
  • diesen Code eingeben

Private Sub MeineFeldbezeichnung_LostFocus()
if len(me.MeineFeldbezeichnung)=0 then
me.MeineFeldbezeichnung = „dummy“
endif
End Sub

Die Feldbezeichnung mußt du natürlich entsprechend anpassen.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

vielen Dank für den Tipp. Allerdings funkt es noch nicht so ganz wie gewünscht. Ich habe eine neues Feld in das Formular eingebaut (auch in der entsprechenden Tabelle). Beim Einstieg in das Formular springt Access auch brav da hin, jedoch wird kein Wert eingetragen.

Hast Du eine Idee?

Gruß aus Emsdetten

Thomas
Pommes69

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

um dieses Verhalten mit Sicherheit auszuschliessem, kann man in der Haupttabelle ein Feld anlegen, das z.B. das Anlegedatum des Datensatzes speichert, dieses Feld kann man im Formular platzieren u.U. auch unsichtbar.
Im „Beim Anzeigen“-Ereignis des Formulars kann man dann einfach folgenses Codieren:

if isNull(MeinAutoWertFeld) then

Me!AnlegeDatum = Format(Now(),„mm-dd-yyyy“)

end if

Dann ist Sichergestellt, das schon vor dem Anzeigen des Formulars der entsprechende Datensatz existiert.

Tschau
Peter

Hallo,

ja genau. Super. Es klappt. Alles Bestens.

Vielen Dank.

Thomas
Pommes69