Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datensatz in verbundener Tabelle automatisch anlegen

Begonnen von martin1991, Juni 18, 2019, 14:34:16

⏪ vorheriges - nächstes ⏩

martin1991

Hallo zusammen,

ich habe wieder ein Problem das mit meinem letzten Thread verwandt ist.

Dank PhilS Hilfe funktioniert jetzt meine DB. Mein Problem ist jetzt aber, das ich beim anlegen neuer Datensätze in den Tabellen Projekt bzw. Kunde direkt ein Datensatz in der Tabelle tblAnhangVerteilen benötige. das habe ich auch mit folgendem Code gelöst:

Private Sub Form_AfterInsert()
'nach dem Speichern wird in tblAnhangVerteilen ein neuer Datensatz angelegt, mit Tabellenname und ID des neuen Datensatzes
'dazu muss unter Values 'Projekt' und Me!ID an die Tabelle angepasst werden
    Dim db As Database
    Set db = CurrentDb()
    db.Execute "INSERT INTO tblAnhangVerteilen (Tabelle,IDTabelle) VALUES ('tblProjekt'," & Me!ID & ");"
   
    'Hier wird der neu angelegte Datensatz gesucht und dessen ID als Fremdschlüssel in die aktuelle Tabelle geschrieben
    Me!IDAnhang = DMax("ID", "tblAnhangVerteilen")
End Sub

Private Sub Form_BeforeInsert(Cancel As Integer)
    'nötig, damit der Datensatz initial angelegt werden kann
    Me!IDAnhang = DMax("IDAnhang", "tblProjekt") + 1
End Sub


Diese Lösung finde ich aber irgendwie Suboptimal. Da es sich um eine Multiuser-Umgebung handelt und je nach Performance ja die falsche ID als Fremdsclhüssel gezogen werden könnte.

Weiß da jemand eine bessere Lösung?

Vielen Dank im Vorraus für eure Hilfe.

Mfg
Martin

ebs17

Mit freundlichem Glück Auf!

Eberhard

martin1991

Danke Ebs für die Hilfe.

Ich finde dazu aber leider nur Lösungen für C# bzw. für VB außerhalb von Access.

Könntest du mir die Zeile:
Me!IDAnhang = DMax("ID", "tblAnhangVerteilen")

so anpassen das sie mit @@Identity läuft?

ich denk es müsste so ähnlich lauten:
dim rs as recordset
Set rs = db.OpenRecordset("SELECT @@IDENTITY", dbOpenSnapshot)
debug.print rs(0)

funktioniert bei mir aber leider nicht....





ebs17

ID des zuletzt hinzugefügten Autowertes ermitteln
Wie erkennbar, geht man hier von einem Autowert aus.

Aber auch:
Zitatfalsche ID als Fremdsclhüssel gezogen werden könnte
Ein Fremdschlüssel referenziert auf einen bekannten Primärschlüssel. Wo kann da etwas Falsches herkommen?
Mit freundlichem Glück Auf!

Eberhard

martin1991

Hallo Eberhard,

falscher Wert kann zustande kommen, wenn das wirklich der letzte Autowert ist der angelegt wurde (Datenbankübergreifend oder auch nur Tabelle) und ein anderer User gleichzeitig einen Datensatz erstellt.

ich bin nicht wirklich ein Fan davon, auf timing zu setzen, wenn es eine andere Lösung gibt.

Mfg
Martin

ebs17

Autowert als Fremdschlüssel? Ich frage das Gleiche mit anderer Formulierung.

Ermitteln müsste man dagegen einen soeben erstellten Primärschlüssel, den man umgehend (Code-Lösung) als Fremdschlüssel verwenden will.

Insgesamt: Erst muss man über die Aufgabenstellung im Klaren sein (auch der Fragesteller), ehe man in Richtung Lösung denken kann.
Mit freundlichem Glück Auf!

Eberhard