Guten Morgen,
ich versuche bei einem Formular, welches aus Nummer, Datum von und Datum bis besteht, beim Eintragen einer Nummer, welche schon in einem Zeitraum vergeben ist, einen Eintrag in der Tabelle zu verhindern. Den Vergleich zwischen dem Formular mit der Tabelle, wo das DAtum gleich ist, funktioniert einwandfrei. Ich habe nur das Problem, wenn das Datum zwischen von und bis ist, dieses auszuwerten und eine Eintragung zu verhindern.
Hier mein Code:
Private Sub btnspeichen_Click()
On Error GoTo Err_btnspeichen_Click
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim dblznr As Double
Dim strvdat As String
Dim strbdat As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("Tbl_NR", dbOpenDynaset)
dblznr = Me.ZNR
strvdat = Me.vonDatum
strbdat = Me.bisDatum
Hier soll der Vergleich sein:
rst.FindFirst "((ZN like'" & dblznr & "') and (('" & strvdat & "') between (VON like'" & strvdat & "') and (BIS like '" & strvdat & "')))"
Dieser Teil funktioniert:
'rst.FindFirst "((((ZN like '" & dblznr & "') and ((VON like'" & strvdat & "') or (BIS like '" & strvdat & "') or (BIS like'" & strvdat & "') or (BIS like'" & strbdat & "')))))"
If rst.NoMatch Then
rst.AddNew
rst![ZN] = Me.ZNR
rst![VON] = Me.vonDatum
rst![BIS] = Me.bisDatum
rst.Update
MsgBox "Nummer gespeichert!", vbExclamation, "Nummer gespeichert"
Else
Me.ZNR = ""
Me.vondatum = Date
Me.bisdatum = Date
MsgBox "Nummer im Zeitraum vorhanden!", vbExclamation, "Nummer vorhanden"
End If
rst.Close
Set db = Nothing
Exit_btnspeichen_Click:
Exit Sub
Err_btnspeichen_Click:
MsgBox Err.Description
Resume Exit_btnspeichen_Click
End Sub
Der Vergleich soll beide Möglichkeiten der Datumseingabe überprüfen.
Vielleicht kennt wer eine Lösung, ???
Vielen Dank im Voraus!
Hallo und guten Morgen,
etwa so (unchecked):
Private Sub btnspeichen_Click()
On Error GoTo Err_btnspeichen_Click
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL as String
Set db = CurrentDb()
'Hier ist der Vergleich drin:
strSQL = " Select * from Tbl_NR where ZN= " & nz(Me!ZNR,0) & " and " & Format(nz(Me!vonDatum,Date),"\#yyyy-mm-dd\#") & " Between Von and Bis Or " & Format(nz(Me!bisDatum,Date),"\#yyyy-mm-dd\#") & " Between Von and Bis ")
Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
If rst.BOF or rst.EOF
rst.AddNew
rst![ZN] = Me.ZNR
rst![VON] = Me.vonDatum
rst![BIS] = Me.bisDatum
rst.Update
MsgBox "Nummer gespeichert!", vbExclamation, "Nummer gespeichert"
Else
Me.ZNR = Null
Me.vondatum = Date
Me.bisdatum = Date
MsgBox "Nummer im Zeitraum vorhanden!", vbExclamation, "Nummer vorhanden"
End If
rst.Close
Set db = Nothing
Exit_btnspeichen_Click:
Exit Sub
Err_btnspeichen_Click:
MsgBox Err.Description
Resume Exit_btnspeichen_Click
End Sub
Hallo Franz,
danke für deine rasche Antwort - bin erst jetzt zum Testen gekommen. Konnte auf Grund deiner Codes mein Problem lösen.
Hier mein Code:
rst.FindFirst "(((ZN like '" & dblznr & "') and ((VON like'" & strvdat & "') or (BIS like '" & strvdat & "') or (BIS like'" & strvdat & "') or (BIS like'" & strbdat & "'))) or
((ZN like'" & dblznr & "') and (" & Format(Nz(Me!vonDatum, Date), "\#yyyy-mm-dd\#") & " Between Von and Bis)) and
((" & Format(Nz(Me!bisDatum, Date), "\#yyyy-mm-dd\#") & " Between Von and Bis)) or
((ZN like'" & dblznr & "') and Von between " & Format(Nz(Me!vonDatum, Date), "\#yyyy-mm-dd\#") & " and " & Format(Nz(Me!bisDatum, Date), "\#yyyy-mm-dd\#") & ")) or
(((ZN like'" & dblznr & "') and Bis between " & Format(Nz(Me!vonDatum, Date), "\#yyyy-mm-dd\#") & " and " & Format(Nz(Me!bisDatum, Date), "\#yyyy-mm-dd\#") & "))"
Habe nun die Lösung!
Danke für deine Hilfe.
LG und schönes Wochenende
Andi