Hallo zusammen,
ich würde gerne noch einmal eure Hilfe in Anspruch nehmen.
In unserem Verein, Hilfe für Bedürftige haben wir eine Teilnehmer-Datenbank, in der, wie es sich jetzt herausgestellt hat einige Dubletten existieren. Mit einem zusammengesetzten Index aus 3 Feldnamen aus tblTeilnehmer (Name, Vorname und GebJahr) wollen wir dieses Problem im Prinzip lösen. Nun wollen wir aber, wenn dieses Ereignis noch einmal stattfindet, das nicht erst zum Ende bei der Eingabe eines neuen Datensatzes per Fehlermeldung informiert wird, sondern schon wenn das letzte Datenfeld dieses 3er Indexsystem ausgefüllt wurde.
Dann sollen neben den dreien genannten (Name, Vorname und GebJahr) noch weitere Daten aus dem schon vorhandenen Datensatz in frmNeuanmeldung_Ufo angezeigt werden.
Und zwar (auch alle aus tblTeilnehmer)
Teil_Key
Zusatz
Straße
Nr
Kommentar
Bei allen Feldern handelt es sich übrigens alles um gebundene Felder.
Schon einmal vielen Dank im Voraus.
Gruß
Franz
Im konkreten müsste man mehr über die Datenbank wissen, um spezielle Hilfe in Form von Code anbieten zu können. Deslhalb ist nachfolgender (an Deine Bedürfnisse anzupassender) Code für das Eingabeformular etwas allgemeiner gehalten.Private Function DataIsValid(ByRef Complete As Boolean) As Boolean
' besser Nachname verwenden, weil Me.Name auf den Namen des Formulars
' verweist
' die 3 Steuerelemente sollten auch nur in neuen Datensätzen bearbeitbar
' sein
' kann auch als gespeicherte Abfrage mit Parametern vorliegen
Const QRY$ = _
"SELECT Count(*) FROM Tabellenname" & _
" WHERE Name = [@Name] AND" & _
" Vorname = [@Vorname]" & _
" GebJahr = [@GebJahr]"
' wenn eines der drei Steuerelemente unausgefüllt ist, sind die Daten
' ungültig
If IsNull(Me!Name) Or IsNull(Me.Vorname) Or IsNull(Me.GebJahr) Then
Complete = False
Exit Function
End If
Complete = True
With CurrentDb().CreateQueryDef(vbNullString, QRY)
.Parameters("@Name") = Me!Name
.Parameters("@Vorname") = Me.Vorname
.Parameters("@GebJahr") = Me.GebJahr
' gültig, wenn kein Datensatz gefunden wurde
DataIsValid = .OpenRecordset(dbOpenSnapshot)(0) = 0
End With
End Function
' optionale Einzelprüfung; für Vorname + GebDatum wiederholen
Private Sub Name_BeforeUpdate(Cancel As Integer)
Dim Complete As Boolean, Valid As Boolean
Valid = DataIsValid(c)
' nur aussagekräftig, wenn bereits in allen drei Pflichtfeldern Daten
' vorliegen
If Complete Then
If Not Valid Then
Cancel = True
MsgBox "Es existiert bereits ein Datensatz mit den gleichen Daten " & _
"aus:" & vbCrLf & "Name, Vorname & GebDatum"
Me!Name.Undo
End If
End If
End Sub
' Erforderlich: prüfen vor dem Speichern
Private Sub Form_BeforeUpdate()
Dim Complete As Boolean, Valid As Boolean
Valid = DataIsValid(Complete)
If Not Valid Or Not Complete Then
' Speichern verhindern
Cancel = True
' Es fehlt mindestens ein Eintrag in einem Pflichtfeld
If Not Complete Then
If IsNull(Me!Name) Then
MsgBox "Bitte Pflichtfeld Name ausfüllen"
Me!Name.SetFocus
ElseIf IsNull(Me.Vorname) Then
MsgBox "Bitte Pflichtfeld Vorname ausfüllen"
Me.Vorname.SetFocus
Else
MsgBox "Bitte Pflichtfeld GebJahr ausfüllen"
Me.GebJahr.SetFocus
End If
' Es existiert bereits ein Datensatz
Else
MsgBox "Es existiert bereits ein Datensatz mit den gleichen Daten " & _
"aus:" & vbCrLf & "Name, Vorname & GebDatum"
End If
End If
End Sub
Hallo Lachtaube,
Super, es funktioniert, es passt alles perfekt. Das ist so etwas wie ein rund rum sorglos Paket.
Schade dass man nicht unmittelbar ins "offene Ufo eingreifen" kann. Dann hätten wir in einem Zug an dieser gefundenen AusweisNr. einen Ersatz Ausweis anbinden können. Aber darauf hattest du ja schon hingewiesen. Es ist trotzdem perfekt. Uns ist sehr damit sehr geholfen. Dafür danke ich dir recht herzlich.
Franz