Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как завести числовое поле типа счетчик? / 25 сообщений из 41, страница 1 из 2
18.05.2004, 18:32
    #32522859
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
У меня есть поле "адрес".
Есть таблица с двумя полями "№адреса" и "адрес".
Пользователь вводит адрес и соответствующий товар по этому адресу.
Мне нужно создать счетчик, который бы являлся идентификатором адреса.
Т.е. если адрес уже есть в базе данных, то у адреса нет приращения счетчика и номер адреса остается константой, а если адрес изменился, то значение счетчика приращается на единицу.
Как это сделать?
...
Рейтинг: 0 / 0
18.05.2004, 18:35
    #32522869
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
А адрес заносится в эту же таблицу?
...
Рейтинг: 0 / 0
18.05.2004, 21:22
    #32523008
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Да, "адрес" и "счетчик адреса" находятся в одной и той же таблице.
...
Рейтинг: 0 / 0
19.05.2004, 00:26
    #32523070
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
То есть в одной таблице сидят примерно такие данные:

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

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

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

и плюс обработка на случай, когда два юзера попытаются что-то сделать одновременно.
...
Рейтинг: 0 / 0
23.05.2004, 00:51
    #32529527
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
А без dlookup нельзя обойтись, а то он как-то тормозит процесс?
...
Рейтинг: 0 / 0
23.05.2004, 01:06
    #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
23.05.2004, 01:42
    #32529535
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Спасибо, мысль ясна, а обработчик ошибок на что надо ставить и как он будет выглядеть?
(Для базы mdb, многопользовательской, Ac97)
...
Рейтинг: 0 / 0
23.05.2004, 11:52
    #32529577
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
SORRY, а что надо писать вместо ...
Код: plaintext
n=dlookup("addresscode","mytable","address=...")
...
Рейтинг: 0 / 0
23.05.2004, 12:51
    #32529593
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Обработчик ошибок можно просто On Error Resume Next. Если будет ошибка во входных параметрах, то будет возвращен Null.

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

addresscode - имя поля, в котором сидит код адреса
mytable - имя таблицы
address - имя поля, в котором сидит сам адрес
... - введенный адрес
...
Рейтинг: 0 / 0
23.05.2004, 13:02
    #32529599
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Да. Я все так и написал, Access говорит "Ошибка синтаксиса", ругается на
n=dlookup("addresscode","mytable", "address=..." )
Пишу этот код на текущую запись.
...
Рейтинг: 0 / 0
23.05.2004, 13:04
    #32529601
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Можно посмотреть на код?
...
Рейтинг: 0 / 0
23.05.2004, 13:05
    #32529602
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
... надо понимать как нужный тебе кусок Where + см хэлп на dlookup
...
Рейтинг: 0 / 0
23.05.2004, 13:05
    #32529603
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Почему where?
...
Рейтинг: 0 / 0
23.05.2004, 13:48
    #32529614
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Код:
Код: plaintext
1.
2.
Dim n As Variant
n = DLookup("поле_номер_магазина", "тбл_адрес", "поле_адрес=...")
If IsNull(n) Then n = DMax("поле_номер_магазина", "тбл_адрес") +  1 
...
Рейтинг: 0 / 0
23.05.2004, 13:52
    #32529617
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
На всякий случай - Access97.
...
Рейтинг: 0 / 0
23.05.2004, 13:59
    #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
23.05.2004, 14:12
    #32529633
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Студент, а почему вместо ... ничего не подставлено???
...
Рейтинг: 0 / 0
23.05.2004, 14:14
    #32529635
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Саныч 13:05 ???
...
Рейтинг: 0 / 0
23.05.2004, 14:16
    #32529637
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
А. То есть многоточие надо понимать как кусок where. Дошло. Да, студент этого не сделал.
...
Рейтинг: 0 / 0
23.05.2004, 14:33
    #32529643
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Да, спасибо, дошло.
А что примерно должно быть в WHERE?
Я тоже не понял Саныч 13:05?
...
Рейтинг: 0 / 0
23.05.2004, 14:44
    #32529648
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как завести числовое поле типа счетчик?
Это был вопрос к Shuhard'у. Но он уже отменен.

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


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