Введение
Эта книга посвящена программированию баз данных на Delphi 6 и Kylix. Большая часть исходного кода, представленного в книге (кроме глав о dbExpress), должна быть совместима с Delphi 5, однако такая возможность не проверялась.
Для кого эта книга
Книга предназначена для программистов, разрабатывающих базы данных на Delphi 6 и Kylix. Таким образом, предполагается, что читатель имеет представление о языке Object Pascal (прародителе Delphi) и знает, как создать приложение на Delphi и Kylix, поместить компоненты на форму, разработать и подключить обработчики событий - словом, выполнить все, что необходимо для создания полноценного приложения.
Также предполагается, что читатель обладает основными знаниями относительно баз данных и используемой терминологии. Поэтому я не буду объяснять значения слов таблица, представление, столбец и других терминов, связанных с базами данных.
В материалах, прилагаемых к этой книге в качестве примера, применяются разнообразные стандартные компоненты. Читатель должен уметь использовать компоненты при выполнении действий, работе с кнопками, окнами списков и т.д. В случае необходимости дополнительную информацию по всем этим компонентам можно найти в справочной системе Delphi/Kylix или в книгах по языку Delphi.
Как построена эта книга
Если читатель не знаком с программированием баз данных на Delphi/Kylix, то читать главы лучше по порядку. Если же читатель не новичок в программировании и хочет познакомиться с технологией dbExpress, то он может сразу перейти к интересующим его главам. Но, независимо от выбора, обратите внимание на краткое содержание каждой главы.
- Глава 1, "Установка и использование соединений с базой данных", знакомит с dbExpress - новейшей технологией доступа к данным с помощью Delphi/Kylix. В ней рассматриваются способы подключения к базе данных посредством dbExpress.
- В главе 2, "Наборы данных dbExpress", продолжается обзор технологии dbExpress и обсуждаются компоненты наборов данных, применяемых в dbExpress.
- Глава 3, "Основы клиентских наборов данных", знакомит с пользовательскими наборами данных и компонентом TClientDataSet, который обеспечивает высокоскоростной доступ к оперативным данным.
- В главе 4, "Операции с клиентскими наборами данных", продолжается обсуждение клиентских наборов данных и детально описываются более сложные операции с данными.
- Глава 5, "Расширенные компоненты", посвящена расширенным компонентам, которые обеспечивают взаимосвязь между данными и пользовательским интерфейсом приложения, автоматически отображая на экране информацию из набора данных и позволяя пользователю вводить новую информацию.
- В главе 6, "Информационные объекты", продолжается рассмотрение расширенных компонентов и демонстрируется, как редактировать данные в таблице и затем выводить их на экран.
- В главе 7, "Провайдеры наборов данных", изложены основы разработки комплексных наборов данных с помощью провайдеров.
- В главе 8, "Технология DataSnap", описывается, как правильно разработать полноценную программу путем создания отдельных клиентских и серверных приложений, взаимодействующих через локальную или глобальную сеть.
- В главе 9, "Программа ConMan", представлен исходный код организационного менеджера, который являет собой яркий пример использования технологий разработки многоуровневых баз данных (хотя, конечно же, пример несколько упрощен).
VCL или CLX
Поскольку все рассмотренные в книге технологии одинаково хорошо подходят как для Delphi 6, так и для Kylix (за исключением описанной в главе 8), представленные исходные коды работают только с библиотекой CLX. Однако для библиотеки VCL также доступен исходный код, поэтому, если приложение создается для одной системной платформы, можно отдельно поэкспериментировать с VCL.
Для тех, кто не знаком с этими терминами: VCL расшифровывается как Visual Component Library (библиотека визуальных компонентов) - основная библиотека классов Delphi для OC Windows. CLX означает Component Library Cross-Platform (X в аббревиатуре замещает слово Cross-Platform), т.е. межплатформенная библиотека компонентов. Это новейшая библиотека классов, которая поддерживается Delphi и Kylix.
Библиотека CLX состоит из четырех частей.
- BaseCLX. Включает "закулисные" сервисные классы и такие функции, как TStringList, TObjectList и т.д.
- DataCLX. Осуществляет поддержку технологии dbExpress и расширенных компонентов.
- VisualCLX. Включает визуальные компоненты: строки меню, панели инструментов, кнопки, окна списков и т.п.
- NetCLX. Содержит компоненты, необходимые для работы с Internet.
В этой книге рассмотрена только DataCLX (хотя некоторые элементы BaseCLX и VisualCLX использованы в тестовых приложениях библиотеки CLX).
По ходу рассмотрения исходного кода станет понятно, что, кроме оператора uses в каждом модуле, VCL и CLX практически не отличаются друг от друга, поэтому проблем с библиотекой CLX не должно возникнуть.
Чтобы избежать употребления в книге таких неудобоваримых конструкций, как "Delphi 6 и Kylix" или "Delphi/Kylix", я использую общий термин "Delphi", что означает как Delphi 6, так и Kylix. Если оператор относится только к библиотеке VCL в Delphi 6, это указывается отдельно.
Готовые компоненты
Хотя эта книга не посвящена исключительно разработке компонентов, в нее включены четыре потомка расширенных компонентов для VCL, которые могут вам пригодиться. Они рассмотрены в главах 5 и 6. В материалах к этой книге содержится программный пакет Delphi ETH, куда входят перечисленные ниже компоненты.
- TETHDBComboBox. Потомок информационного компонента TDBComboBox, позволяющий выбрать элемент из раскрывающегося списка и сохранить его индекс в поле целых чисел.
- TETHDBListBox. Потомок информационного компонента TDBListBox, который дает возможность выбрать элемент из списка и занести его индекс в поле целых чисел.
- TETHDBDateTimePicker. Информационная версия компонента TDateTimePicker для платформы Win32.
- TETHDBGrid. Потомок компонента TDBGrid, выполняющий определенное событие при изменении пользователем размера столбца.
Тестовые приложения
В каждой главе представлен исходный код тестовых приложений, который помогает лучше понять рассматриваемую тему. Все примеры откомпилированы и проверены в Delphi 6 как для библиотеки VCL, так и для CLX.
Исходный код примеров можно получить по адресу: http://www.williamspublishing.com, а также с личного Web-узла автора: http://www.tpx.turbopower.com/-Eric.Harmon.
Обратите внимание на список тестовых приложений, распределенных по главам книги.
Глава 1
- Программа Events. Показаны разнообразные события, выполняемые компонентом TSQLConnection.
- Программа MetaData. Показано, как получить простые метаданные посредством соединения dbExpress.
- Программа DDLSQL. Демонстрируется, каким образом можно отправить команды SQL (DDL) непосредственно компоненту TSQLConnection.
- Программа Transactions. Иллюстрируется поддержка транзакций в dbExpress.
- Программа Feedback. Обеспечение обратной связи с процессами соединения dbExpress.
Глава 2
- Программа Basic. Иллюстрируется базовый компонент TSQLDataSet.
- Программа Advanced. Показаны расширенные операции и методы компонента TSQLDataSet.
- Программа Scheme. Извлечение комплексных метаданных из соединения dbExpress с помощью компонента TSQLDataSet.
Глава 3
- Программа CDS. Основы поддержки клиентского набора данных.
- Программа Navigate. Навигационные операции компонента TSQLClientDataSet.
- Программа CDSIndex. Иллюстрируется создание и использование индексов TSQLClientDataSet.
- Программа RangeFilter. Ограничение количества данных TSQLClientDataSet путем применения интервалов и фильтров.
- Программа Search. Демонстрирует разнообразные методы, с помощью которых можно определить расположение конкретной записи в клиентском наборе данных.
Глава 4
- Программа EventLog. В ней применяются события, выполняемые функцией TSQLClientDataSet.
- Программа Updates. Обновление информационных элементов управления, за счет чего ускоряются операции с наборами данных.
- Программа BLOB. Сохранение изображений и заметок в клиентском наборе данных.
- Программа Nested. Внедрение в набор данных отношения между элементами по типу "главный/подчиненный".
- Программа ChangeLog. Обеспечение отмены выполненных действий с помощью клиентского набора данных.
- Программа Clone. Показан принцип клонирования, т.е. создания полноценной копии набора данных TSQLClientDataSet.
Глава 5
- Программа DataAware. Показано многообразие расширенных компонентов, описанных в главе.
Глава 6
- Программа Options. Разнообразные опции компонента TDBGrid.
- Программа CustomGrid. Изменение основных параметров компонента TDBGrid для улучшения внешнего вида таблицы.
- Программа CtrlGrid. Применение компонента TDBCtrlGrid (только для библиотеки VCL).
Глава 7
- Программа Updates. Базовые операции источника набора данных.
- Программа Joins. Иллюстрирует, как правильно оперировать данными, полученными посредством функции SQL JOIN.
- Программа DataFetch. Ограничение количества объектов BLOB и расширенных данных, полученных из набора данных, для повышения производительности приложения.
Глава 8
- Программа Methods. Добавление вызываемых методов к серверу приложения.
- Программа LocalConn. Создание приложения базы данных в одном исполняемом модуле.
- Программа Stateless. Создание независимого сервера приложений для работы с технологиями MTS или COM+.
Глава 9
- Программа ConMan. Пример приложения, в котором использовано большинство технологий и методов, описанных в этой книге.
Что касается прилагаемого исходного кода. Каждая глава находится в отдельном подкаталоге, содержащем папки с исходными кодами библиотек VCL и CLX. Последние, в свою очередь, содержат отдельный подкаталог для каждого приложения.
В дополнение к подкаталогам для каждой главы, в материалах к книге есть отдельная папка Components, содержащая потомки расширенных компонентов, о которых уже упоминалось ранее. В подкаталоге Data можно найти массив данных conman.gdb, используемый в некоторых тестовых приложениях, и файл сценария SQL (conman.sql), который пригодится для создания базы данных "с нуля".
Если при установке на диск не менять структуру основного каталога, то все программы должны работать без каких-либо проблем. Они настроены таким образом, чтобы получать доступ к базе данных CONMAN по относительному пути ..\..\..\Data\conman.gdb. Но в случае возникновения любых неполадок при работе с тестовыми программами можно задать более конкретный путь, например D:\Data\conman.gd.
Технология dbExpress
Это новейшая технология доступа к базам данных, разработанная компанией Borland, которая поддерживается языками Delphi и Kylix. Ряд других технологий доступа к базам данных, включая такие, как BDE, ADO, и IBX, поддерживались в прошлых версиях Delphi. Но если есть три одинаковых по своей сути технологии, нужна ли еще одна? Прежде чем дать ответ на этот вопрос, рассмотрим преимущества dbExpress.
- Совместимость с разными операционными системами. Технологии BDE и ADO работают на платформе Windows, а dbExpress - на ОС Windows и Linux (две платформы, поддерживающие Delphi/Kylix). Если компания Borland решит поддерживать какие-либо другие платформы, например Mac или BE, то dbExpress также не останется без внимания.
- Экономное использование системных ресурсов. dbExpress является, по сути, небольшой оболочкой системного API (Application Programming Interface) ядра базы данных, а потому практически не вмешивается в операции базы данных.
- Высокая эффективность. В основном благодаря предыдущему свойству технология dbExpress обладает высокой эффективностью, так как создана для совместной работы с клиентскими наборами данных Delphi.
- Небольшой размер. Приложения dbExpress занимают совсем немного места на любом носителе информации. Обычное приложение использует файл midas.dll и драйвер dbExpress для взаимодействия с серверной СУБД, что занимает приблизительно 150 Кбайт. Сравните этот размер с 10 Мбайт BDE.
Применяемые базы данных
Интерфейс dbExpress можно применять для подключения к самым разнообразным СУБД, включая InterBase, Oracle, DB2 и MySQL. Но для примеров, представленных в этой книге, надо было выбрать только одну базу данных; я остановился на InterBase и вот по каким причинам.
- Она бесплатна. Для работы с примерами этой книги можно бесплатно загрузить копию InterBase с Web-узла компании Borland.
- Универсальность. СУБД InterBase поставляется на компакт-дисках с Delphi и Kylix, так что если вы уже приобрели Delphi 6 или Kylix, то на компакт-диске будет и копия InterBase.
- Простая установка. Небольшую базу данных Interbase можно подготовить для загрузки всего за несколько минут. Затем она копируется на локальную систему - и дело сделано, следовательно, не придется думать о том, как бы передать читателю базу данных Oracle, занимающую 30 Мбайт.
- И последнее, просто это единственная СУБД, которая у меня есть.
Соглашения, принятые в книге
В этой книге принят ряд соглашений.
Команды, их параметры, операторы и текст, появляющийся на экране, выделяются моноширинным шрифтом.
Для новых терминов и определений используется курсив.
Как связаться с автором
Если появилась необходимость связаться со мной, чтобы задать любые вопросы, прокомментировать содержание, похвалить или раскритиковать книгу в пух и прах, пожалуйста, не стесняйтесь отправлять электронную почту по адресу: [email protected]. Я сделаю все возможное, чтобы ответить как можно быстрее, но, поскольку мне ежедневно приходит большое количество писем, это, к сожалению, может занять некоторое время.
Материалы к книге
Весь исходный код примеров, рассматриваемых в книге, можно найти по адресу: http://www.williamspublishing.com/cgi-bin/materials.cgi
Об авторах
Эрик Хармон (Eric Harmon), директор отдела по разработке программного обеспечения в корпорации Advanced Estimating Systems, Inc. (шт. Флорида), которая известна созданием The EDGE - промышленного стандарта в области аналитического программного обеспечения. В 1997 году Эрик стал членом TPX (TurboPower Experts) - группы программистов, которая оказывает поддержку компании TurboPower Software в работе с сетевыми конференциями. TurboPower считается одним из главных поставщиков компонентов Delphi для профессиональных программистов. Эрик пишет статьи по языку Delphi и технологии COM для журнала Visual Developer Magazine, а также является автором известной книги Delphi COM Programming (MTP/New Riders, 2000). Связаться с Эриком можно по адресу: [email protected].
Дэн Майзер (Dan Miser), менеджер по вопросам развития и разработки проектов в группе DSP компании Borland, большую часть времени проводит в исследованиях самых современных технологий. Ранее Дэн был участником команды Delphi R&D и занимался разработкой технологии DataSnap. В круг его обязанностей входит разработка протоколов передачи информации, поэтому он знает не понаслышке о технологиях построения распределенных приложений, таких, как MIDAS, SOAP, DCOM, RMI, J2EE, EJB, Struts и RDS. В качестве технического редактора внес свой вклад в создание книги Delphi 5. Руководство разработчика; написал несколько журнальных статей; работал в группе поддержки сетевых конференций компании Borland как участник TeamB; выступал на конференции BorCon по вопросам технологий COM и MIDAS. Таким образом, Дэн принял самое непосредственное участие в разработке и продвижении языка Delphi.
Рамеш Тейвендрен (Ramesh Theivendran), служащий отдела исследований и разработки компании SQL Links с октября 1995 года. Перед тем как присоединиться к Borland, Рамеш работал программистом в индийском институте технических и прикладных наук в Бомбее (Indian Institute of Technology - IITB) и системным аналитиком в компании Ramco Systems. Имеет десятилетний опыт разработки сервисных программ архитектуры клиент/сервер. В настоящее время руководит группой RAD (Rapid Application Development) компании Borland, занимаясь вопросом взаимодействия баз данных и разработкой технологии dbExpress. Рамеш со своей женой Аруной (Aruna) и ребенком живет в городе Санта-Круз, шт. Калифорния (Santa Cruz, California).
Филипп Бруно (Philippe Bruno), директор отдела исследований и развития в корпорации Scanpak, Inc., главный офис которой находится в Монреале. Корпорация специализируется на системах RFID (Radio Frequency Identification) и разработке технологии GETS (Galley Equipment Tracking System) - системы контроля за состоянием оборудования, применяемой в авиационной индустрии. Филипп преподает на компьютерных курсах в нескольких университетах и колледжах Монреаля. С 1987 года он создает программы на разных компьютерных языках, но отдает предпочтение Pascal и Delphi. Филипп также является участником группы TPX, помогает коллегам-программистам по сетевым конференциям TurboPower в экспертной оценке последовательной коммуникации, сетей и протоколов.
Посвящаю своей жене Тине
Благодарности
Написание книги нельзя считать делом рук одного человека, поэтому я хотел бы поблагодарить людей, которые помогли мне воплотить эту идею в жизнь.
Итак, Карен Вэкс (Karen Wachs) работала вместе со мной над этой книгой от начала и до конца. Она терпеливо помогала во время написания моей первой книги и приняла участие в создании этой. С ней всегда очень приятно работать. Спасибо тебе, Карен! Я также хотел бы поблагодарить Кэти Робинсон (Katie Robinson) и Чипа Гарднера (Chip Gardner): они отредактировали рукопись, исправив мои опечатки и грамматические ошибки.
Благодаря Хизеру Мак-Нейлу (Heather McNeill), который следил за процессом издания книги, все прошло как нельзя лучше; а Лори Мак-Гайер (Laurie McGuire) постоянно советовала, как улучшить подачу информации, чтобы сделать книгу понятной и интересной.
Хочу выразить особую признательность моим техническим рецензентам Дэну Майзеру (Dan Miser) и Рамешу Тейвендрену (Ramesh Theivendran), сотрудникам Borland. Они дали множество весьма ценных указаний и исправили технические ошибки. Рамеш является одним из главных специалистов по разработке технологии dbExpress, а Дэн - общепризнанный эксперт в технологии MIDAS. В дополнение к этому Филипп Бруно (Philippe Bruno) написал ценный и своевременный технический обзор последней главы и приложений. Едва ли можно найти лучших рецензентов.
Вместе с этими людьми я постарался сделать все возможное, чтобы исправить ошибки (как технические, так и типографские), которые могли встретиться в рукописи. Однако написание книги - это весьма сложный процесс, поэтому не исключен тот факт, что некоторые ошибки все-таки остались. Конечно, все они на моей совести.
Заранее приношу свои извинения тем, о ком я непреднамеренно ничего не сказал. Над созданием книги работали многие люди, с некоторыми из них я никогда непосредственно не общался, а потому просто не знаю всех имен. Тем не менее я глубоко благодарен всем, кто был причастен к созданию книги, но чьи имена не были упомянуты отдельно.