September 26, 2020, 19:00:19

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Insert-Into mit Formular triggern

Begonnen von seemawn, September 04, 2020, 16:04:36

⏪ vorheriges - nächstes ⏩

seemawn

Hallo zusammen,

ich bin nicht sicher, ob die Überschrift das Problem ausreichend beschreibt.

Ich habe/hatte hier eine Excel-Datenbank (haha) mit durchnummerierten Einträgen, die ich versuche, in eine Datenbank zu überführen. Es geht hier um Chemikalien. Jede Chemikalie hat in der Excel-Datei eine Nummer bekommen, die einigermaßen willkürlich vergeben wurde, Zielsetzung war allerdings eine fortlaufende Nummerierung. Ich versuche, eine Datenbank zu stricken, die der BCNF oder wenigstens der dritten Normalform genügt.

Eine Entität, um die es hier geht, also die Entität Chemikalie, soll diese vorher vergebene Nummer als Primärschlüssel (oder mindestens als Schlüsselkandidat) behalten, da sie unique und unveränderlich ist (respektive sein soll). Ein AutoWert allerdings geht nicht, da ich für ca. 1100 Datensätze die Nummer komplett neuvergeben und allen Abteilungen kommunizieren müsste, d. h. ich würde gerne die alten Nummern behalten. Ich nenne diese Spalte mal PrimaryKey. Um Inkonsistenzen beim Primärschlüssel bei der Eingabe in einem Formular (oder in der Tabelle selbst) zu vermeiden, würde ich gerne den Eintrag in diesem Feld mit jedem neuen Datensatz imkrementieren, zum Beispiel mit einer SQL-Abfrake aka:

Insert Into tblChemikalie(PrimaryKey)
Values ( Select max(tblChemikalie.PrimaryKey) from tblChemikalie + 1);

Diese Abfrage (sofern sie korrekt ist) würde ich gerne triggern, sobald der Nutzer eine neue Chemikalie anlegen will. Zum Beispiel nach Änderung des ersten Formularfeldes. Wie mach ich das am besten?

Ich kann natürlich noch eine Spalte bauen mit dem PrimaryKey und auf Autowert stellen, aber ich müsste trotzdem leider diese Nummer inkrementieren, also an dieser Abfrage käme ich nicht vorbei...

Ich wäre für Vorschläge dankbar.

Herzliche Grüße

Seemawn

MzKlMu

Hallo,
eine Abfrage ist dazu ungeeignet.
Verwende einfach die DMax Funktion.
Das machst Du dann im Ereignis "Nach Aktualisierung" des 1. Pflichtfeldes im Formular. Zusätzlich sollte noch geprüft werden ob das Formular in einem neuen Datensatz steht.
Das könnte in etwa so aussehen:
Private Sub PflichtfeldName_AfterUpdate()
   If Me.NewRecord = True Then
       Me.PrimaryKey = DMax("PrimaryKey","tblChemikalie") + 1
   End If
End Sub
Gruß
Klaus

Beaker s.a.

@seemawn
ZitatDiese Abfrage (sofern sie korrekt ist) würde ich gerne triggern, sobald der Nutzer eine neue Chemikalie anlegen will. Zum Beispiel nach Änderung des ersten Formularfeldes. Wie mach ich das am besten?
Mit einem gebundenen Formular, dessen DS-Herkunft das Feld enthält,
brauchst du dazu noch nicht einmal eine Abfrage.
Private Sub Form_Current()
    If Me.NewRecord Then
         Me.DeinFeldMitFldNummer = DMax("NummerfeldInTabelle", "DeineTabelle") +1
    End If
End Sub

gruss ekkehard


überschnitten
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

seemawn

Danke vielmals! Es hat funktioniert!

Von mir aus kann der Thread geschlossen werden.

Herzliche Grüße

seemawn

seemawn

Öhm, ich finde den "Thema-Gelöst"-Button nicht...