powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет повторяющихся записей
9 сообщений из 9, страница 1 из 1
Запрет повторяющихся записей
    #39835111
metro-maks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть форма записи на рабочий день, стоит ограничение не более 104 записей на дату, с этим все норм и работает, проблема чтобы запретить повторную запись на дату (например уже внесли человека с удостоверением 1111 на 01.01.2000. Как прописать чтобы повторно нельзя было внести человека с удостоверением 1111 на 01.01.2000 и выходило сообщение "Ваша запись на выбранную дату уже внесена" и соответственно не сохранялась запись). Как сделать этот запрет? Уже много чего перепробовал, не могу въехать. Знаю что с помощью DCount, НО КАК?? я не силен в access. Сейчас нажатие кнопки "Записаться" выглядит так:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Option Compare Database
Option Explicit

Private Sub addbutt_Click()
Dim s As String
Dim l As Long

    If Me!Удостоверение.ListIndex = -1 Then
        MsgBox "ВВЕДИТЕ ТАБЕЛЬНЫЙ НОМЕР!", vbExclamation
        Me!Удостоверение.SetFocus
     
        Exit Sub
    End If
    
    If IsNull(Me!Дата) = True Then
        MsgBox "ВЫБЕРИТЕ ДАТУ!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If

'Проверка

    s = "дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    l = DCount("*", "Запись", s) 'всего записей
    
    'Debug.Print l
    If l >= 104 Then
        MsgBox "ЗАПИСЬ НА ДАННУЮ ДАТУ ЗАВЕРШЕНА!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If
   
    
'Добавление
    Me.Dirty = False
    s = "ЗАПИСЬ УСПЕШНО ВЫПОЛНЕНА!" & vbCrLf & "ВАША ЗАПИСЬ №: " & l + 1 & ""
    MsgBox s, vbInformation
    DoCmd.Close acForm, Me.Name 'Закрытие текущей
    DoCmd.OpenForm "index"
    
End Sub


Private Sub Удостоверение_AfterUpdate()
Me.код_южд = DLookup("код", "южд", "удостоверение =" & Me.Удостоверение.Column(0))
End Sub
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835130
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
metro-maks,
Код: vbnet
1.
2.
3.
If(Dcount("*","tbl","удостоверение=" & Me.удостоверение & " and дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")>1 then
msgbox "уже есть"
end if

И так,упаси боже, до 32 операторов AND или OR
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835149
metro-maks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Кажется я делаю что-то не так - синтаксическая ошибка постоянно:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Compare Database
Option Explicit

Private Sub addbutt_Click()
Dim s As String
Dim l As Long

    If Me!Óäîñòîâåðåíèå.ListIndex = -1 Then
        MsgBox "ÂÂÅÄÈÒÅ ÒÀÁÅËÜÍÛÉ ÍÎÌÅÐ!", vbExclamation
        Me!Óäîñòîâåðåíèå.SetFocus
     
        Exit Sub
    End If
    
    If IsNull(Me!Äàòà) = True Then
        MsgBox "ÂÛÁÅÐÈÒÅ ÄÀÒÓ!", vbExclamation
        Me!Äàòà.SetFocus
        Exit Sub
    End If

'Ïðîâåðêà

    s = "äàòà=" & Format(Me!Äàòà, "\#mm\/dd\/yyyy\#")
    l = Dcount("*","Çàïèñü","Óäîñòîâåðåíèå=" & Me.Óäîñòîâåðåíèå & " and Äàòà=" & Format(Me!Äàòà, "\#mm\/dd\/yyyy\#")
    If l >= 1 Then
    MsgBox "Óæå åñòü"
End If
    
    'Debug.Print l
    If l >= 104 Then
        MsgBox "ÇÀÏÈÑÜ ÍÀ ÄÀÍÍÓÞ ÄÀÒÓ ÇÀÂÅÐØÅÍÀ!", vbExclamation
        Me!Äàòà.SetFocus
        Exit Sub
    End If
   
    
'Äîáàâëåíèå
    Me.Dirty = False
    s = "ÇÀÏÈÑÜ ÓÑÏÅØÍÎ ÂÛÏÎËÍÅÍÀ!" & vbCrLf & "ÂÀØÀ ÇÀÏÈÑÜ ¹: " & l + 1 & ""
    MsgBox s, vbInformation
    DoCmd.Close acForm, Me.Name 'Çàêðûòèå òåêóùåé
    DoCmd.OpenForm "index"
    
End Sub


Private Sub Óäîñòîâåðåíèå_AfterUpdate()
Me.êîä_þæä = DLookup("êîä", "þæä", "óäîñòîâåðåíèå =" & Me.Óäîñòîâåðåíèå.Column(0))
End Sub
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835153
metro-maks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется я делаю что-то не так - вечно ошибка лезет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Compare Database
Option Explicit

Private Sub addbutt_Click()
Dim s As String
Dim l As Long

    If Me!Удостоверение.ListIndex = -1 Then
        MsgBox "ВВЕДИТЕ ТАБЕЛЬНЫЙ НОМЕР!", vbExclamation
        Me!Удостоверение.SetFocus
     
        Exit Sub
    End If
    
    If IsNull(Me!Дата) = True Then
        MsgBox "ВЫБЕРИТЕ ДАТУ!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If

'Проверка

    s = "дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    l = Dcount("*","Запись","Удостоверение=" & Me.Удостоверение & " and Дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    If l >= 1 Then
    MsgBox "Уже есть"
End If
    
    'Debug.Print l
    If l >= 104 Then
        MsgBox "ЗАПИСЬ НА ДАННУЮ ДАТУ ЗАВЕРШЕНА!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If
   
    
'Добавление
    Me.Dirty = False
    s = "ЗАПИСЬ УСПЕШНО ВЫПОЛНЕНА!" & vbCrLf & "ВАША ЗАПИСЬ №: " & l + 1 & ""
    MsgBox s, vbInformation
    DoCmd.Close acForm, Me.Name 'Закрытие текущей
    DoCmd.OpenForm "index"
    
End Sub


Private Sub Удостоверение_AfterUpdate()
Me.код_южд = DLookup("код", "южд", "удостоверение =" & Me.Удостоверение.Column(0))
End Sub
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835167
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
звиняйте-упустил что удостоверение должно быть текстом и обрамляется апострофами:
Код: vbnet
1.
...удостоверение='" &  me.удостоверение & "' and..... 
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835171
metro-maks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
    l = DCount ("*", "Çàïèñü", "Óäîñòîâåðåíèå = '" & Me.Óäîñòîâåðåíèå & "' AND Äàòà=" & Format(Me!Äàòà, "\#mm\/dd\/yyyy\#")



Все равно ошибка где-то. или у меня руки кривые. И вверху желтым подсвечивается Private Sub addbutt_Click()
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835176
metro-maks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак не получается....Или руки кривые.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Option Compare Database
Option Explicit

Private Sub addbutt_Click()
Dim s As String
Dim l As Long
    If Me!Удостоверение.ListIndex = -1 Then
        MsgBox "ВВЕДИТЕ ВАШ ТАБЕЛЬНЫЙ НОМЕР!", vbExclamation
        Me!Удостоверение.SetFocus
        Exit Sub
    End If
    
    If IsNull(Me!Дата) = True Then
        MsgBox "ВЫБЕРИТЕ ДАТУ!", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If

'Проверка

    s = "дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    l = DCount ("*", "Запись", " Удостоверение = " & Me.Удостоверение & " AND Дата=" & Format(Me!Дата, "\#mm\/dd\/yyyy\#")
    If l >= 1 Then
    End If
    
    l = DCount("*", "Запись", s) 'всего записей
    
    'Debug.Print l
    If l >= 104 Then
        MsgBox "ЗАПИСЬ НА ДАННУЮ ДАТУ ЗАВЕРШЕНА", vbExclamation
        Me!Дата.SetFocus
        Exit Sub
    End If
'Добавление
    Me.Dirty = False
    s = "ЗАПИСЬ ВЫПОЛНЕНА!" & vbCrLf & "ВАША ЗАПИСЬ №: " & l + 1 & " "
    MsgBox s, vbInformation
    DoCmd.Close acForm, Me.Name 'Закрытие текущей
    DoCmd.OpenForm "index"

    
End Sub

Private Sub Удостоверение_AfterUpdate()
Me.код_южд = DLookup("код", "южд", "удостоверение =" & Me.Удостоверение.Column(0))
End Sub
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835386
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
metro-maks,
1. проверка должна проводится на BeforeUpdate, до сохранения значения в поле, с возможностью отмены действия, если такая запись уже существует
2.моя вина-поторопился dcount надо сравнивать с 0 (=0 такой записи нет;>0 или =1 такая запись уже существует
3. так какой же тип имеет поле "удостоверение"?
...
Рейтинг: 0 / 0
Запрет повторяющихся записей
    #39835402
metro-maksКак прописать чтобы повторно нельзя было внести человека с удостоверением 1111 на 01.01.2000 и выходило сообщение "Ваша запись на выбранную дату уже внесена" и соответственно не сохранялась запись). Как сделать этот запрет? Если создать уникальный составной индекс по удостоверению и дате, то Вы не сможете повторно внести №1111 на 01.01.2000.
Если ввод выполняется через форму, то сработает событие Form_Error, где по номеру ошибки можно выдать адекватное сообщение.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет повторяющихся записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]