MS Access | Когда ID записи нужна до InsertСкачать пример в zip: OrderID.zipСкачать пример в mdb: OrderID.mdb |
Актуально в работе с многопользовательской формой.
Пример: несколько пользователей оформляют заказы клиентам. Каждому заказу необходимо присвоить уникальный ID до того, как заказ попадет в базу.
Сценарий решения: создадим таблицу с ключевым полем ID, в котором изначальным значением будет число – 0. Программно будем прибавлять к этому числу единицу каждый раз, когда любой из пользователей загружает форму с заказами. Получившееся число передается в форму с заказами полю OrderID.
1. Создаем таблицу, например tblOrderID:
Заполним ее: ID = 0, Desc = например, OrderNum
2. Редактируем данные таблицы, с помощью Recordset
Напишем функцию, которая откроет таблицу tblOrderID и в поле ID добавит имеющемуся значению единицу и возвратит получившийся результат (длинное целое = Long).
Function OrderNumber() As Long Dim mydb As Database 'будем работать с базой данных Dim rst As Recordset 'с помощью Recordset будем открывать таблицу tblOrderID Set mydb = CurrentDb() 'указываем текущую базу данных (здесь можно указать также путь к другой БД) Set rst = mydb.OpenRecordset("tblOrderID") 'с помощью Recordset открываем таблицу On Error GoTo Err rst.MoveFirst 'перейти на первую строку таблицы Do Until rst.EOF 'запустить цикл "до тех пор пока есть записи в таблицы" If rst!Desc = "OrderNum" Then 'если в поле Desc значение "OrderNum" OrderNumber = rst!ID 'функции присвоить значение поля ID rst.Edit 'включить возможность редактирования таблицы rst!ID = rst!ID + 1 'отредактировать поле ID rst.Update 'обновить таблицу изменениями End If rst.MoveNext 'перейти к следующей записи Loop 'вернуться к исходным командам цикла (Do Until...) Exit Function Err: MsgBox Error$ Exit Sub End Function
Учитывая, специфику таблицы tblOrderID в данной функции можно цикл и не применять (если в табл., например всегда хранится только одна известная запись).
3. В форме для составления заказа (ее название, например frmOrder) создадим TextBox, назовем его tbOrderID.
4. В свойствах формы на ее открытие (On Open) присвоим значение полю tbOrderID, равное результату функции OrderNumber():
Private Sub frmOrder_Open(Cancel As Integer) tbOrderID = OrderNumber() Refresh End Sub
Скачать пример в zip: OrderID.zipСкачать пример в mdb: OrderID.mdb |