powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как завести числовое поле типа счетчик?
25 сообщений из 41, страница 1 из 2
Как завести числовое поле типа счетчик?
    #32522859
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть поле "адрес".
Есть таблица с двумя полями "№адреса" и "адрес".
Пользователь вводит адрес и соответствующий товар по этому адресу.
Мне нужно создать счетчик, который бы являлся идентификатором адреса.
Т.е. если адрес уже есть в базе данных, то у адреса нет приращения счетчика и номер адреса остается константой, а если адрес изменился, то значение счетчика приращается на единицу.
Как это сделать?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32522869
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А адрес заносится в эту же таблицу?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32523008
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, "адрес" и "счетчик адреса" находятся в одной и той же таблице.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32523070
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
То есть в одной таблице сидят примерно такие данные:

1 адрес1 товар1
2 адрес2 товар8
1 адрес1 товар4

Так?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32523656
Partner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может стоит использовать поле со списком для вода адреса; свойство "ограничиться списком" - да, если адреса нет в списке - написать процедуру добавления в таблицу нового адреса для события 'отсутствие в списке'.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32523665
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но здесь очень нехорошо, что в одной таблице сидят два поля, дублирующих друг друга. По-нормальному надо держать в отдельной таблице адреса и коды (по одному разу), а в обсуждаемую таблицу заносить только код.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32524770
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС:
>То есть в одной таблице сидят примерно такие данные:
>1 адрес1 товар1
>2 адрес2 товар8
>1 адрес1 товар4
>Так?
Да, так.
>Но здесь очень нехорошо, что в одной таблице сидят два поля,
>дублирующих друг друга.
Конечно, не очень правильно, но база уже написана, поэтому изменять все - слишком долго.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32524841
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну, тогда в общих чертах так:

dim n as variant
n=dlookup("addresscode","mytable","address=...")
if isnull(n) then n=dmax("addresscode","mytable")+1

и плюс обработка на случай, когда два юзера попытаются что-то сделать одновременно.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529527
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А без dlookup нельзя обойтись, а то он как-то тормозит процесс?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529530
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно написать свою функцию, которая будет работать точно так же.

function MyDLookup(s1 as string,s2 as string,s3 as string)
with currentdb.openrecordset(s2,dbopendynaset,dbreadonly)
.findfirst s3
if not .nomatch then MyDLookup=.fields(s1)
.close
end with
end function

плюс обработка ошибок.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529535
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, мысль ясна, а обработчик ошибок на что надо ставить и как он будет выглядеть?
(Для базы mdb, многопользовательской, Ac97)
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529577
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SORRY, а что надо писать вместо ...
Код: plaintext
n=dlookup("addresscode","mytable","address=...")
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529593
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Обработчик ошибок можно просто On Error Resume Next. Если будет ошибка во входных параметрах, то будет возвращен Null.

Теперь насчет n=dlookup("addresscode","mytable","address=..."):

addresscode - имя поля, в котором сидит код адреса
mytable - имя таблицы
address - имя поля, в котором сидит сам адрес
... - введенный адрес
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529599
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Я все так и написал, Access говорит "Ошибка синтаксиса", ругается на
n=dlookup("addresscode","mytable", "address=..." )
Пишу этот код на текущую запись.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529601
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно посмотреть на код?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529602
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... надо понимать как нужный тебе кусок Where + см хэлп на dlookup
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529603
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Почему where?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529614
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код:
Код: plaintext
1.
2.
Dim n As Variant
n = DLookup("поле_номер_магазина", "тбл_адрес", "поле_адрес=...")
If IsNull(n) Then n = DMax("поле_номер_магазина", "тбл_адрес") +  1 
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529617
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай - Access97.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529621
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, аргумент условие часто является эквивалентом предложения WHERE инструкции SQL, но без ключевого слова WHERE. Если аргумент условие опущен, DLookup выполняет


Функция DLookup

См. также Пример



Функция DLookup возвращает значение конкретного поля в указанном наборе (подмножестве) записей. Функцию DLookup используют в программах на Visual Basic, макросах, в выражениях в запросах, а также для определения вычисляемого элемента управления в форме или отчете.
Допускается использование функции DLookup для вывода значения поля в случае, когда это поле не принадлежит к базовому источнику записей формы или отчета. Предположим, например, что базовой таблицей формы является таблица «Заказано». В форме выводятся поля «КодЗаказа», «КодТовара», «Цена», «Количество» и «Скидка». Однако поле «Марка» находится в другой таблице, «Товары». В этом случае функция DLookup позволяет создать в этой форме вычисляемое поле, в котором будет выводиться значение поля «Марка».

Синтаксис

DLookup(выражение, набор[, условие])



Функция DLookup использует следующие аргументы.

Аргументы Описание

выражение Выражение, определяющее нужное поле. Данный аргумент может задаваться строковым выражением, определяющим поле в таблице или запросе, или представлять выражение, задающее выполнение вычислений над данными, содержащимися в поле. Допускается использование в аргументе выражение имени поля в таблице или элемента управления в форме, константы, а также встроенной или определяемой пользователем функции. Не допускается использование в аргументе выражение других статистических функций по подмножеству или статистических функций SQL.
набор Строковое выражение, определяющее набор записей, образующих подмножество. Может представлять имя таблицы или запроса.
условие Необязательное строковое выражение, ограничивающее диапазон данных, в которых производится поиск значений. Например, аргумент условие часто является эквивалентом предложения WHERE инструкции SQL, но без ключевого слова WHERE. Если аргумент условие опущен, DLookup выполняет действия над полем, заданным в аргументе выражение, для всего набора записей. Любое поле, указанное в аргументе условие, должно принадлежать подмножеству, заданному аргументом набор; в противном случае функция DLookup возвращает значение Null.


Дополнительные сведения

DLookup возвращает значение поля или выражения, определенного в аргументе выражение. Выбираемые в таблице или запросе значения принадлежат подмножеству записей, определяемых аргументом набор и удовлетворяющих условиям отбора, задаваемым в аргументе условие.
Если ни одна из записей набора не удовлетворяет аргументу условие или набор не содержит записей, функция DLookup возвращает значение Null.
Если указанным условиям удовлетворят несколько полей, DLookup возвращает значение первого найденного поля. Рекомендуется указывать условия, обеспечивающие уникальность значения, возвращаемого функцией DLookup. Одним из способов обеспечения уникальности возвращаемых значений является указание условий для ключевого поля, такого как поле «КодСотрудника» в следующем примере:

Dim varX As Variant
varX = DLookup("[Фамилия]", "Сотрудники", "[КодСотрудника] = 1")



При любом использовании функции DLookup в макросе или в модуле, в выражении в запросе или в вычисляемом элементе управления необходимо обеспечить правильное составление аргумента условие.

Функция DLookup может быть включена в строку «Условие отбора» бланка запроса, в выражение для вычисляемого поля, а также в строку Обновление запроса запроса на обновление.

Допускается использование функции DLookup в вычисляемом элементе управления в форме или отчете в случае, когда поле, для которого проводится поиск значения, не принадлежит к базовому источнику записей формы. Например, предположим, что в форме «Заказы» создано поле с именем «КодТовара», в котором выводится значение поля «КодТовара» из таблицы «Заказы», и что требуется одновременно вывести значение поля «Марка» из таблицы «Товары», соответствующее выведенному коду. Для этого следует создать в форме другое поле и ввести для него следующее выражение в ячейку свойства Данные (ControlSource).

=DLookup("[Марка]", "Товары", "[КодТовара] =" & Forms![Заказы]!КодТовара)



Советы

• Хотя функция DLookup позволят проводить поиск значений во внешней таблице, обычно более эффективным приемом оказывается создание запроса, содержащего все необходимые поля, с последующим созданием формы или отчета на базе этого запроса.
• Поиск значений во внешней таблице может быть также проведен с помощью мастера подстановок.



Примечание. Несохраненные изменения записей, входящих в набор, не учитываются данной функцией. Если требуется обеспечить учет в функции DLookup измененных значений, необходимо сначала сохранить изменения с помощью команды Сохранить запись из меню Записи, перевести фокус на другу запись или вызвать метод Update.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529633
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Студент, а почему вместо ... ничего не подставлено???
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529635
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч 13:05 ???
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529637
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А. То есть многоточие надо понимать как кусок where. Дошло. Да, студент этого не сделал.
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529643
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, дошло.
А что примерно должно быть в WHERE?
Я тоже не понял Саныч 13:05?
...
Рейтинг: 0 / 0
Как завести числовое поле типа счетчик?
    #32529648
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Это был вопрос к Shuhard'у. Но он уже отменен.

Насчет что должно быть вместо ... - см. 12:51.
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как завести числовое поле типа счетчик?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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