Neuigkeiten:

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

Mobiles Hauptmenü

Info bei Tabellen-Duplikaten

Begonnen von Franz-70, Januar 26, 2017, 22:53:19

⏪ vorheriges - nächstes ⏩

Franz-70

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

Lachtaube

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
Grüße von der (⌒▽⌒)

Franz-70

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