Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Как это работает






Частью процедуры инициализации формы является вызов содержащихся в ней элементов управления данными. Первая запись таблицы Publishers ста­новится текущей. При навигации по набору записей Publishers в связанном поле ввода с помощью элемента управления данными Datal отображается назва­ние издательства из текущей записи. Заметьте, что текст метки Label2 изме­няется в соответствии с названием издательства.

Во время инициализации элемента Datal и при каждом перемещении к но­вой записи происходит событие Reposition (Изменение позиции) и вызывается его обработчик. Следовательно, это самое подходящее место для кода, с помощью которого извлекаются названия книг, опубликованных текущим издательством. Вы динамически создаете текст SQL-запроса и указываете его в качестве значе­ния свойства RecordSource элемента Data2. Затем вызываете метод Refresh эле­мента Data2 для выполнения запроса. Поскольку элемент Data2 - это значение свойства DataSource элемента MS FlexGrid, все записи из набора, созданного Data2, автоматически отображаются в табличном поле.

В результате выполнения процедуры Datal_Reposition, срабатывающей при смене текущей записи, изменяется значение в поле ввода. А это влечет за собой инициализацию события Change для поля Textl. Следовательно, запускается на выполнение и процедура Textl_Change, которая берет содержимое поля ввода, то есть название издательства, и отображает его в тексте метки Label2.

 

Дополнительная информация

Для некоторых издательств в базе данных не указано ни одной книги. Найдите такие, двигаясь по набору записей с помощью навигационных кнопок. К сожалению, некорректный ввод ин­формации - недостаток всех унаследованных баз данных.

 

Еще раз взглянем на код обработчика события Reposition для элемента Datal.

 

Private Sub Data1_Reposition()

Dim IPubID As Long

IPubID = Data1.Recordset! PubID

Data2.RecordSource = " SELECT * FROM TITLES WHERE PubID = " & IPubID

Data2.Refresh

End Sub

 

Помните, в предыдущих главах говорилось о первичных и внешних ключах? Так вот, поле PubID является первичным ключом для таблицы Publishers - в разных записях оно имеет несовпадающие значения. Следовательно, нужно взять значение этого поля для некоторого издательства и найти в таблице Titles все записи, связанные с этой организацией. В таблице Titles поле PubID является внешним ключом. В каждой записи о книге в таблице Titles хранится значе­ние идентификатора PubID издательства, опубликовавшего книгу.

Всякий раз, когда изменяется позиция указателя в элементе управления дан­ными Datal, значение поля PubID в новой текущей записи считывается в пере­менную IPubID. Восклицательный знак показывает, что вы хотите обратиться (прочитать или записать) к некоторому полю в наборе записей; он отделяет на­звание набора от названия поля - Recordset! field. Эта нотация (обозначение) используется и в DAO, и в ADO, так что в следующих уроках будет рассмотрена более подробно.

Получив значение PubID, вы создаете простое предложение на языке SQL и присваиваете его в качестве значения свойству RecordSource элемента управ­ления данными Data2. Тем самым элементу Data2 сообщается о необходимости извлечь из таблицы Titles все записи, в которых поле PubID равно значению пе­ременной IPubID - уникальному идентификатору издательства.

Затем выполняется метод Refresh, и в результате создается новый набор записей в соответствии с только что установленным значением свойства RecordSource. По сути дела, вы создали динамический SQL-запрос, то есть сформировали запрос «на лету», во время выполнения программы, подставив значение переменной IPubID, а не вставляли текст запроса в код. Таким образом, запрос изменяется в зависимости от значения поля PubID в текущей записи об издательстве.

Того же результата можно добиться и без временной переменной IPubID. До­статочно подставить значение идентификатора издательства PubID непосред­ственно в текст запроса:

 

Data2. RecordSource = «SELECT * FROM TITLES WHERE PubID = " & _

Datal.Recordset! PubID

Data2.Refresh

 

Как видите, формирование динамического SQL-запроса заняло всего одну строчку кода. Однако для отладки лучше оставить первоначальный вариант. А ког­да вы получше освоитесь с Visual Basic, второй способ, который экономит время на одном присваивании переменной, будет казаться вам проще и удобнее.

РАБОТА С ДАННЫМИ ЧЕРЕЗ ИНТЕРФЕЙС

DAO






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.