powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчет количества записей таблицы (DAO)
9 сообщений из 9, страница 1 из 1
Подсчет количества записей таблицы (DAO)
    #40035751
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые "форумчане"!
Имеется форма объектом источником которой является таблица KartochkiUchetaNeispravnostei в таблице (и на форме) одно из полей называется NomerKUNAltn.Поле числовое,допускаются пустые поля но по задумке нужно чтобы совпадений не было там,где значение поля не пустое,ввожу данные в форме,и в случае, если в таблице уже имеется введенное значение в поле NomerKUNAltn - нужно чтобы выдавалось юзеру соответствующее сообщение о том, что введенное значение по полю "NomerKUNAltn" не уникально.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Вообщем ключевой фрагмент конструкции (что я навоял в VBA) который мне позволил бы это реализовать такой: 
Private Sub NomerKUNAltn_AfterUpdate()
Dim strokivtablice As Long
       RST1 = CurrentDb.OpenRecordset("SELECT KartochkiUchetaNeispravnostei.NomerKUNAltn FROM KartochkiUchetaNeispravnostei WHERE KartochkiUchetaNeispravnostei.NomerKUNAltn like '" & Me.NomerKUNAltn & "';")
        If (RST1.RecordCount > 0) Then
           RST1.MoveLast
           strokivtablice = RST1.RecordCount


Но это неправильно, т.к. при опции Me.Dirty=True значение strokivtablice не соответствует действительности.Например, если я на новой записи ввожу значение в поле NomerKUNAltn которое уже имеется в базе, то переменная strokivtablice=1 (а не 2,что позволило бы мне программно отловить дубль).Как можно реализовать задуманное не прибегая к методу Me.Dirty=False ???
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035795
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
if  DCount("*", "tbl", "ctlì='" & Me.ctl & "'")>0 then 'если поле числовое без дефисов
' действия
'Else
'действия
End If
End Sub
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035804
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
drafty,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
if  DCount("*", "tbl", "ctlì='" & Me.ctl & "'")>0 then 'если поле числовое без дефисов
' действия
'Else
'действия
End If
End Sub


Интересно,интересно,ща протестирую...
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035812
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty,
цифры после "ctl" не писал,а не сделал пробел-шайтан какой-то
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
if  DCount("*", "tbl", "ctl='" & Me.ctl & "'")>0 then 'если поле числовое без дефисов
' действия(+если надо  ctl.Undo,Cancel=True)
'Else
'действия
End If
End Sub
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035826
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
drafty,
цифры после "ctl" не писал,а не сделал пробел-шайтан какой-то
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
if  DCount("*", "tbl", "ctl='" & Me.ctl & "'")>0 then 'если поле числовое без дефисов
' действия(+если надо  ctl.Undo,Cancel=True)
'Else
'действия
End If
End Sub


Я уже понял (а то не мог понять, что за опция ctl#236)
Вот корректный синтаксис для моего случая If DCount("*", "KartochkiUchetaNeispravnostei", "NomerKUNAltn= " & Me.NomerKUNAltn) > 0
Только блин,незадача...Дело в том,что при пустом значении Me.NomerKUNAltn - выдается ошибка (хотя не должна,т.к. первый аргумент "*")
Кроме того,работает точно так-же,как и в моем вышеописанном варианте кода...
Все упирается в Dirty
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035831
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
sdku
drafty,
цифры после "ctl" не писал,а не сделал пробел-шайтан какой-то
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
if  DCount("*", "tbl", "ctl='" & Me.ctl & "'")>0 then 'если поле числовое без дефисов
' действия(+если надо  ctl.Undo,Cancel=True)
'Else
'действия
End If
End Sub


Я уже понял (а то не мог понять, что за опция ctl#236)
Вот корректный синтаксис для моего случая If DCount("*", "KartochkiUchetaNeispravnostei", "NomerKUNAltn= " & Me.NomerKUNAltn) > 0
Только блин,незадача...Дело в том,что при пустом значении Me.NomerKUNAltn - выдается ошибка (хотя не должна,т.к. первый аргумент "*")
Кроме того,работает точно так-же,как и в моем вышеописанном варианте кода...
Все упирается в Dirty

Хотя нет,не работает только в случае,если я перешел на форме к какой-либо уже существующей записи,и попытался опять перенабрать то-же значение в этом поле,в этом случае DCOUNT=1 (хотя по идее должна быть равной=0)
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035848
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty,
-А Вы обновите таблицу после удаления старого значения из поля и только после считайте(если запись не новая это можно делать по кнопке "редактирование")
-почитайте справку по DCOUNT и разберитесь в каких случаях считаются/не считаются значения NULL(что должно быть первым аргументом и вообще допустимы ли в этом поле NULL значения)
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035855
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все наоборот(а не как Вы себе думаете).
Выдержка из HELP:
"Функция DCount не подсчитывает записи, содержащей пустые (Null) значения в поле, задаваемом аргументом выражение, за исключением случая, когда в аргументе выражение задан подстановочный знак звездочка (*) "
...
Рейтинг: 0 / 0
Подсчет количества записей таблицы (DAO)
    #40035862
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Все наоборот(а не как Вы себе думаете).
Выдержка из HELP:
"Функция DCount не подсчитывает записи, содержащей пустые (Null) значения в поле, задаваемом аргументом выражение, за исключением случая, когда в аргументе выражение задан подстановочный знак звездочка (*) "

Да,я потом заново перечитал...
Но в моем случае,обновленное поле не должно быть пустым.
И все-равно спасибо,функция работает в принципе так как надо,все остальные найденные мною косяки (т.е. все несоответствия моим замыслам) можно легко устранить косвенными способами.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчет количества записей таблицы (DAO)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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