Delphi и базы данных

Delphi и базы данных
Delphi и базы данных
"Поисковые поля" и 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.

На этом наше занятие считаю оконченным. Удачи тебе.

 Исходники примера забирай здесь



Опубликовал admin
7 Май, Среда 2003г.



Программирование для чайников.