Как отобразить порядковые номера в подчиненной форме в Microsoft Access 2002

Источник: microsoft

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

Как создать функцию 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".

  1. Отройте пример базы данных Борей.mdb.
  2. Создайте программный модуль и введите следующую строку в разделе описаний:
     
                   Option Explicit 
  3. Введите следующую процедуру:
     
    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. Вы можете создать резервную копию этого файла и продолжать выполнять эти действия на копии базы данных.

  1. Откройте таблицу "Заказано" в режиме "Конструктора", добавьте следующее поле в таблицу и сохраните её:
     
       Field Name: ID
       Data Type:  AutoNumber 
    Данное поле является требуемым идентефикатором записей таблицы с уникальными значениями.
  2. Откройте запрос "Сведения о заказах" в режиме "Конструктора" и добавьте поле "ID" из таблицы "Заказано" в поле запроса, затем сохраните запрос.
  3. Откройте подчиненную форму "Заказы" в режиме "Конструктора" и добавьте в область данных формы элемент TextBox со следующими параметрами.
     
       Name: LineNum
       ControlSource: =GetLineNumber([Form], "ID", [ID]) 
  4. В меню "Вид" выберите "Последовательность перехода". Перетащите поле "LineNum" из нижнего положения списка "Последовательность" наверх и нажмите кнопку "ОК".
  5. Сохраните и закройте подчиненную форму "Заказы".
  6. Откройте форму "Заказы" в режиме "Формы" и найдите запись с несколькими элементами заказа. Обратите внимание, что поле "LineNum" отображает порядковый номер для каждого продукта в заказе.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=21869