В данной статье показывается, как создать и использовать процедуру отображения номера текущей записи или текущей строки в подчиненной форме.
Как создать функцию GetLineNumber()
Корпорация Microsoft предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их корректной работы в конкретных случаях и в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования, а также, необходимых средств разработки и отладки. Специалисты служб технической поддержки Microsoft могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не поддерживается. Если Вам требуется дополнительная консультация по вопросам программирования, Вы можете обратиться в службу консалтинга Microsoft или связаться с сертифицированными партнерами компании Microsoft. Дополнительную информацию о партнерах компании Microsoft можно найти в сети Интернет по следующему адресу:
http://www.microsoft.com/partner/referral/ (http://www.microsoft.com/partner/referral/)
Дополнительная информация по условиям технической поддержки и контактная информация находятся на веб-сервере Microsoft по следующему адресу:
http://support.microsoft.com/default.aspx?scid=fh;RU;CNTACTMS (http://support.microsoft.com/default.aspx?scid=fh;en-us;cntactms)
Следующий пример показывает, как создать и использовать функцию-пример "GetLineNumber()".
Примечание: Пример кода в данной статье использует Microsoft Data Access Objects. Для корректного запуска данного примера Вы должны установить ссылку на Microsoft DAO 3.6 Object Library. Для этого откройте редактор Visual Basic, в меню "Tools" выберите пункт "References" и установите флажок напротив "Microsoft DAO 3.6 Object Library".
- Отройте пример базы данных Борей.mdb.
- Создайте программный модуль и введите следующую строку в разделе описаний:
- Введите следующую процедуру:
Function GetLineNumber (F As Form, KeyName As String, KeyValue)
Dim RS As DAO.Recordset
Dim CountLines
On Error GoTo Err_GetLineNumber
Set RS = F.RecordsetClone
' Найти текущую запись.
Select Case RS.Fields(KeyName).Type
' Найти по ключевому значению числового типа.
Case dbInteger, dbLong, dbCurrency, dbSingle, dbDouble, dbByte
RS.FindFirst "[" & KeyName & "] = " & KeyValue
' Найти, используя тип Data ключевой переменной.
Case dbDate
RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#"
' Найти, используя текстовый тип ключевой переменной.
Case dbText
RS.FindFirst "[" & KeyName & "] = "' & KeyValue & '""
Case Else
MsgBox "Ошибка: Неверный тип данных ключевого поля!"
Exit Function
End Select
' Пдсчет предшествующих записей.
Do Until RS.BOF
CountLines = CountLines + 1
RS.MovePrevious
Loop
Bye_GetLineNumber:
' Вернуть результат.
GetLineNumber = CountLines
Exit Function
Err_GetLineNumber:
CountLines = 0
Resume Bye_GetLineNumber
End Function
Функции "GetLineNumber()" необходимы следующие три параметра:
- Объект-форма, на который выводить порядковые номера.
- Имя уникального ключевого поля, расположенного в таблице на которой основана подчиненная форма. Если запись в источнике не имеет простого уникального ключевого поля, то для этих целей следует добавить в таблицу поле с типом данных "Счетчик".
- Текущее значение ключевой переменной.
Вы можете использовать следующий пример выражения для задания свойства "ControlSource" элемента Textbox подчиненной формы, если таблица, на которой основана подчиненная форма, имеет поле с именем "ID" (без кавычек) в качестве ключевого поля:
=GetLineNumber(Form,"ID",[ID])
Как использовать функцию GetLineNumber()
ВНИМАНИЕ! Если Вы выполните описанные в примере действия, то это приведет к изменению примера базы данных Борей.mdb. Вы можете создать резервную копию этого файла и продолжать выполнять эти действия на копии базы данных.
- Откройте таблицу "Заказано" в режиме "Конструктора", добавьте следующее поле в таблицу и сохраните её:
Field Name: ID
Data Type: AutoNumber
Данное поле является требуемым идентефикатором записей таблицы с уникальными значениями.
- Откройте запрос "Сведения о заказах" в режиме "Конструктора" и добавьте поле "ID" из таблицы "Заказано" в поле запроса, затем сохраните запрос.
- Откройте подчиненную форму "Заказы" в режиме "Конструктора" и добавьте в область данных формы элемент TextBox со следующими параметрами.
Name: LineNum
ControlSource: =GetLineNumber([Form], "ID", [ID])
- В меню "Вид" выберите "Последовательность перехода". Перетащите поле "LineNum" из нижнего положения списка "Последовательность" наверх и нажмите кнопку "ОК".
- Сохраните и закройте подчиненную форму "Заказы".
- Откройте форму "Заказы" в режиме "Формы" и найдите запись с несколькими элементами заказа. Обратите внимание, что поле "LineNum" отображает порядковый номер для каждого продукта в заказе.
Ссылки по теме