"Поисковые поля" и SQL запросы:
Начиная с этого номера, в качестве примеров я буду использовать базу данных
описанную мной в статье "Язык запросов SQL" прошлого номера. Это будет удобней
для понимания обоих материалов.
Ещё одно отличие от предыдущих номеров - все компоненты для работы с
таблицами (TDataSource, TТable и др.) будут хранится в отдельном модуле (Data
Module). Для его создания нужно щёлкнуть по "New" из меню "File" и выбрать "Data
Module". На появившейся форме , можно расставлять компоненты для работы с базой
данных также, как мы это делали раньше.
Теперь у нас в проекте две формы. Для того, чтобы открыть любую из них можно
воспользоваться Project Manager-ом
Перейди в окно DataModule (рисунок 1). Как настроены связи я рассказывать не
буду, потому что это мы уже проходили. Теперь дважды щёлкни по Table2. Что здесь
нового? Ты наверно сразу не заметишь, но новое здесь есть - это "поисковое поле"
(ого какое я слово выдумал). Ты можешь заметить что-то неладное, если обратишь
внимание на то, что у нас два похожих поля "Country" и "Countr". Второе нас
сейчас и будет интересовать.
Создание "поискового поля". Сначала я объясню, для чего оно нужно. У таблицы
2 в поле "Country" хранится ссылка на поле из таблицы "Country". Поэтому в
DBGrid будет показываться индекс (я так и назвал это поле "индекс страны", это
поле ты можешь сделать невидимым). Теперь щёлкни правой кнопкой мыши в окошке
свойств полей (рисунок 3). Выбери пункт "New field".
В появившемся окне, нужно заполнить свойства:
- Name - любое, как тебе удобно
- Component - тоже любое, как тебе удобно
- Type - В нашем случае название страны - это строка.
- Size - Размер (если нужен).
- Field type - Тип поля. В нашем случае это Lookup
(поисковое).
- Key field - связующие поле из этой таблицы.
- Dataset - Dataset указывающий на таблицу-справочник.
- Lookup field - связующие поле из справочника. Связь
будет осуществляться как "Key field" - "Lookup field".
- Result field - Значение этого поля справочника будет
показываться вместо индекса.
Теперь остановись и внимательно обдумай всё что я здесь сказал. Попробуй
пощёлкать по спискам, но ничего не меняй.
Итак, у нас получается, что поле "Countr" будет показываться поле "Country"
из справочника, соответствующее полю "Country" из Table2. Запусти программу, и
посмотри на результат в работе.
Если что-то непонятно, то скоро будет ещё яснее. Сейчас мы познакомимся с
компонентом TDBLookupComboBox , результат действия которого будет
примерно таким же. Вот свойства, которые должны быть заполнены для получения
такого эффекта:
- DataSource - Таблицы, в которую сохраняется значение.
В нашем случае это "User1.db".
- DataField - Поле в этой таблице, где будет
сохраняться значение. В нашем случае это "Country".
- ListSource - Таблица, которая будет использоваться в
качестве элементов выпадающего списка. В нашем случае это "Country.db".
- ListFieldIndex - Поле из этой таблицы, которым будет
запелнен выпадающий список. В нашем случае это "Country".
- KeyField - Поле, по которому будет происходить связь
между таблицами. В нашем случае это "key1".
В итоге получается похожий эффект. Попробую объяснить на словах. У компонента
похожего на TСomboBox, выпадающий список заполняется значениями поля указанного
в ListFieldIndex из таблицы ListSource. Когда пользователь выбирает значение из
списка, то в поле указанное в DataField таблицы DataSource заноситься текущее
значение поля KeyField из таблицы ListSource. Остановись и хорошенько обдумай
всё, что я сказал. Если что-то непонятно, то придётся тебе играть с программой и
смотреть, что в это время происходит в базе данных. Если и это не поможет, то
иди мыть унитазы, программирование не для тебя.
Теперь рассмотрим простейший пример SQL запроса. Поставь в DataModule два
компонента: TDataSource и TQuery. Соедини их так же как ты соединял TDataSource
и TTable. У TQuery установи свойство DatabaseName также как и у TTable.
Это нужно, чтобы запрос смог найти базу данных. Теперь дважды щёлкни по свойству
SQL. В появившемся окне напиши:
SELECT *
FROM user1.db
Теперь установи свойство Active в "TRUE", и твой запрос выполнится.
Результат запроса я отобразил в "DBGrid3" (расположен внизу формы). В нашем
случае запрос очень простой, поэтому в нём нет ничего особенного, но со временем
ты научишься писать достаточно серьёзные запросы к базам данных.
TQuery и TTable очень похожи и большинство из того, что мы проходили по
TTable, ты можешь применить и к TQuery.
На этом наше занятие считаю оконченным. Удачи тебе.
|