Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: martin1991 am Juni 18, 2019, 14:34:16

Titel: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: martin1991 am Juni 18, 2019, 14:34:16
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
Titel: Re: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: ebs17 am Juni 19, 2019, 08:38:36
http://bfy.tw/OAdf
Titel: Re: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: martin1991 am Juni 19, 2019, 11:34:29
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....




Titel: Re: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: ebs17 am Juni 19, 2019, 19:36:02
ID des zuletzt hinzugefügten Autowertes ermitteln (http://www.access-im-unternehmen.de/589.0.html)
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?
Titel: Re: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: martin1991 am Juni 24, 2019, 10:13:19
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
Titel: Re: Datensatz in verbundener Tabelle automatisch anlegen
Beitrag von: ebs17 am Juni 24, 2019, 16:29:18
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.