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



© 2018 | Анна Петросян | pashelp@yandex.ru