PDA

Zobacz pełną wersję : Komunikat o błędzie - indeks unikatowy założony na dwa różne pola



jaworski_m
04-11-08, 18:31
Witam,
Zakładam indeks (unikatowy) na pole1 i oraz oddzielny na pole2.

Pytanie:
W jaki sposób wygenerować własny komunikat o błędzie różny dla każdego
pola informujący o powtórzeniu się wartości typu: "Wartość w Polu1
została powtórzona" oraz "Wartość w polu2 została powtórzona".

Wykorzystanie do tego celu zdarzenia "OnError" ( w tym przypadku kod
będu 3022) spowoduje, że w wyświetlanym oknie dialogowym będzie
wyświetlany ten sam komunikat niezależnie od tego czy powtórzona
wartość została wpisana w "Pole1" czy "Pole2".

OS: win xp
MS Access 2003

Dziękuję za odpowiedź.
Marcin

koneton
05-11-08, 12:59
Niestety nie da się tego zrobić z automatu. Musiałbyś sam sprawdzić, które z pól jest błędne i wyświetlić odpowiedni komunikat.

Tak przy okazji, takie rzeczy najlepiej robić w zdarzeniu BeforeUpdate (obsłuży jednocześne update i insert) niż on Error.



Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim msg As String

msg = "Następujące pole(a) mają błędne wartości:"

Dim v1 As Variant
Dim v2 As Variant

v1 = DLookup("ID", "NazwaTabeli", "Pole1='" & Pole1 & "'")
If v1 > 0 Then
Cancel = 1
msg = msg & vbCrLf & " - pole [Pole1]"
End If
v2 = DLookup("ID", "NazwaTabeli", "Pole2='" & Pole2 & "'")
If v2 > 0 Then
Cancel = 1
msg = msg & vbCrLf & " - pole [Pole2]"
End If
If Cancel = 1 Then
MsgBox msg, vbExclamation, "Błąd integralności danych"
End If

End Sub


Założyłem, że masz pola o nazwach Pole1 i Pole2 (na formularzu i w bazie) oraz, że są to pola tekstowe. Jeśli jest inaczej to musisz zmienić odpowiednie wpisy. Musisz też zmienić nazwę tabeli na właściwą zamiast NazwaTabeli.
Pozdrawiam

jaworski_m
05-11-08, 19:03
Dziękuję. Działa OK.

Marcin