Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет повторяющихся записей / 9 сообщений из 9, страница 1 из 1
08.07.2019, 17:29
    #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
08.07.2019, 17:55
    #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
08.07.2019, 18:13
    #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
08.07.2019, 18:15
    #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
08.07.2019, 18:38
    #39835167
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет повторяющихся записей
звиняйте-упустил что удостоверение должно быть текстом и обрамляется апострофами:
Код: vbnet
1.
...удостоверение='" &  me.удостоверение & "' and..... 
...
Рейтинг: 0 / 0
08.07.2019, 18:48
    #39835171
metro-maks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет повторяющихся записей
Код: sql
1.
    l = DCount ("*", "Çàïèñü", "Óäîñòîâåðåíèå = '" & Me.Óäîñòîâåðåíèå & "' AND Äàòà=" & Format(Me!Äàòà, "\#mm\/dd\/yyyy\#")



Все равно ошибка где-то. или у меня руки кривые. И вверху желтым подсвечивается Private Sub addbutt_Click()
...
Рейтинг: 0 / 0
08.07.2019, 18:56
    #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
09.07.2019, 12:00
    #39835386
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрет повторяющихся записей
metro-maks,
1. проверка должна проводится на BeforeUpdate, до сохранения значения в поле, с возможностью отмены действия, если такая запись уже существует
2.моя вина-поторопился dcount надо сравнивать с 0 (=0 такой записи нет;>0 или =1 такая запись уже существует
3. так какой же тип имеет поле "удостоверение"?
...
Рейтинг: 0 / 0
09.07.2019, 12:39
    #39835402
Запрет повторяющихся записей
metro-maksКак прописать чтобы повторно нельзя было внести человека с удостоверением 1111 на 01.01.2000 и выходило сообщение "Ваша запись на выбранную дату уже внесена" и соответственно не сохранялась запись). Как сделать этот запрет? Если создать уникальный составной индекс по удостоверению и дате, то Вы не сможете повторно внести №1111 на 01.01.2000.
Если ввод выполняется через форму, то сработает событие Form_Error, где по номеру ошибки можно выдать адекватное сообщение.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет повторяющихся записей / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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