Автоматическая вставка номеров при добавлении записи
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Автоматическая вставка номеров при добавлении... Expand / Collapse
Автор
Сообщение
29.11.2006 14:54
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 08.12.2006 12:23
Сообщ.: 2, Visits: 16
Добрый день! Подскажите, пожалуйста, как для новичка решение следующего вопроса. При добавлении новой записи в базу Access нужно в определенное числовое поле вставлять значение Max(этого поля)+1, т.е. счетчик. Пробовал разные способы, но пока безуспешно.

Например, так: Поле29.Value = [Таблица1]![MaxNDog] +1

или так: =(Запрос1!Max1)+1 на событии "Вход" поля29

 М.б. дело в синтаксисе?

Заранее спасибо

Сообщ. #908176
29.11.2006 15:53
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 07.03.2008 19:04
Сообщ.: 328, Visits: 1 857
Поле29.Value=DMax("Имя_поля_номера_в_таблице","Имя_таблицы")+1

А тип данных "Счетчик" для поля с номером в таблице Вас не устраивает?
Сообщ. #908179
29.11.2006 16:21
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 07.03.2008 19:04
Сообщ.: 328, Visits: 1 857
В догонку
1. При таком подходе организации счетчика при работе в многопользовательской среде, нужно предусмотреть защиту от дублирования.

2. Если Вы ориентируетесь на событие Enter поля "Поле29", то при каждом переходе на это поле (даже нечаянном) будет происходить изменение номера, что не есть правильно.

3. Почитайте еще здесь об одном из недостатков выбранного Вами метода
[url=http://www.relib.com/forums/Topic905444-20-1.aspx][/url]
Кстати здесь же есть рекомендации по более правильной организации счетчика.
Сообщ. #908184
30.11.2006 12:27
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 08.12.2006 12:23
Сообщ.: 2, Visits: 16
Спасибо большое!

Поле "Счетчик" не подходит, т.к. нумерация должна начинаться не с "1", а во-вторых при отмене редактирования (например, по "Esc"), счетчик всё равно инкрементируется.

Событие "Enter" я взял просто для тренировки.

А что касается многопользовательской работы, то номер будет присваиваться после добавления новой записи в таблицу.

Сообщ. #908239
16.12.2006 15:21
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 10.01.2007 22:40
Сообщ.: 180, Visits: 1 968
если проблема в граблях с транзакциями, описанных в
http://www.relib.com/forums/Topic905444-20-1.aspx
то проблема решается в максимально явном виде например так:

Dim ThisDB As DAO.Database
Dim ThisWorkspace As DAO.Workspace
Set ThisDB = DBEngine.OpenDatabase("c:\file.mdb", False, False)
'естестно вместо открытия file.mdb можно взять рабочую не монопольную бд
Set ThisWorkspace = DBEngine.Workspaces(0)
If ThisDB.Transactions Then
ThisWorkspace.BeginTrans
ThisDB.Execute "INSERT INTO или UPDATE..."
ThisWorkspace.CommitTrans 'для отката используется .Rollback
End If

последний номер получить можно после проведения транзакции
Dim oRS As DAO.Recordset
Dim lMaxID As Long
Set oRS = ThisDB.OpenRecordset("SELECT MAX...", dbOpenForwardOnly, dbReadOnly)
If Not oRS.EOF And Not oRS.BOF Then lMaxID = oRS(0)
Сообщ. #908959
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 12:05