Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Практический раздел.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.18 Mб
Скачать

Лабораторная работа №30

Тема: Разработка приложений с использованием технологии доступа к данным dbExpress

Цель работы: Изучить особенности использование технологии доступа к данным dbExpress.

Время работы: 2 учебных часа.

Правила по ТБ: Общие.

Оборудование рабочего места: Практикум, ПК.

Программное обеспечение: Windows, MS Office, Delphi

Вопросы входного контроля:

    1. Расскажите, какие компоненты необходимы для использования технологии InterBase Express.

  1. Расскажите, как подключать компоненты использования технологии InterBase Express.

  2. Перечислите все компоненты, которые могут использоваться в технологии InterBase Express.

  3. Охарактеризуйте некоторые методы и свойства компонентов для использования технологии InterBase Express.

  4. Перечислите наиболее часто используемые компоненты для работы с БД.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Какие преимущества технологии dbExpress

Данная технология обладает следующими важными преимуществами:

  • Средства dbExpress гораздо проще с точки зрения установки и компактнее по сравнению с их предшественником BDE;

  • Технология dbExpress является межплатформенной, которая может работать как в Windows (Delphi), так и в Linux (Kylix);

  • Для dbExpress можно создавать новые драйвера. При этом достаточно реализовать опубликованные интерфейсы и разработать библиотеку, обладающую методами доступа к базе данных.

Какие отличия dbExpress от остальных механизмов доступа к данным, и в первую очередь от BDE

  • dbExpress обеспечивает более простой и быстрый доступ к удаленным БД благодаря использованию однонаправленных наборов данных;

  • Так же, как и BDE, dbExpress обрабатывает пользовательские запросы и хранимые процедуры, однако понятие открытия таблицы базы данных в новом механизме отсутствует (в BDE открытие таблицы БД не только занимало большую часть ресурсов на стороне клиента, но и блокировало ресурсы сервера);

  • В отличие от BDE, dbExpress возвращает только однонаправленные наборы данных, не подлежащие редактированию. Для кэширования, фильтрации записей и индексирования возвращаемого множества записей, а также для навигации по нему необходимо использовать дополнительные компоненты, например ClientDataSet;

  • BDE кэширует метаданные, делая их доступными в последующих запросах. dbExpress этого не делает, а работа с метаданными на этапе проектирования осуществляется с использованием основного механизма доступа к данным;

  • При работе с удаленными SQL-базами данных через BDE время обращения к базе данных увеличивается за счет выполнения внутренних запросов, обеспечивающих навигацию по таблицам, доступ к BLOB-объектам и получение метаданных. dbExpress выполняет только запросы пользователей, отсутствие дополнительных операций помогает оптимизировать доступ к БД;

  • dbExpress управляет буфером записей с помощью внутренних механизмов, тогда как BDE требует, чтобы клиентская часть приложения выделяла память для хранения записей. Использование клиентского буфера может вызвать ошибку, если клиент выделит недостаточно памяти для хранения данных;

  • dbExpress не поддерживает локальные базы данных типа Paradox, dBase или FoxPro. Borland рекомендует перейти к использованию СУБД InterBase. Также можно воспользоваться драйверами сторонних производителей;

  • dbExpress содержит драйверы для таких СУБД, как InterBase, Oracle, DB2, Informix, MSSQL и MySQL. Для использования других серверов существует три возможности: перенос данных в формат одной из поддерживаемых СУБД, написание собственного драйвера или же использование драйверов сторонних разработчиков для работы с вашей СУБД.

Что такое однонаправленный набор данных

Суть однонаправленных наборов данных заключается в том, что они не буферизируют данные при навигации или модификации. В отличии от используемых в BDE двунаправленных наборов данных с буферизацией в оперативной памяти, однонаправленные наборы отличаются большей эффективностью, но обладают и некоторыми ограничениями:

  • Однонаправленные наборы данных обладают всего лишь двумя навигационными методами: First() и Next(). Попытка вызова иных методов, например Last() или Prior(), приведет к исключению. Такое ограничение не удивительно, так как многие СУБД поддерживают лишь однонаправленные курсоры. Некоторые, методы такие как работа с закладками (Bookmarks), представляют собой просто заглушки;

  • Данные однонаправленных наборов нельзя редактировать, поскольку для них не выделяется буфер, пригодный для редактирования. Свойство CanModify всегда равно False, и попытки перевода датасета в режим редактирования всегда приводят к неудаче. Данная возможность полезна, при формировании отчетов. Редактирование данных, однако, может осуществляться с помощью SQL команды UPDATE или используя архитектуру provider/resolver (компоненты TSimpleDataSet или TDataSetProvider/TClientDataSet);

  • Однонаправленные наборы данных не поддерживают фильтрацию, поскольку отсутствие буфера не позволяет создавать набор для нескольких записей. При попытке фильтрации вызывается исключение. Все ограничения на диапазон выбираемых записей должны содержаться в SQL команде;

  • Однонаправленные наборы данных не поддерживают подстановочные (lookup) поля, т.к при этом необходимо буферизировать возможные значения такого поля.

Что такое provider/resolver

Это механизм, который отвечает за выдачу данных по запросу пользователя и проведение изменений в базе данных. Данный механизм состоит из двух частей:

  • Провайдер. Эта часть отвечает за выборку данных из массива по запросу пользователя, передачу их пользователю вместе с нужными метаданными и хранение их в памяти на время работы с ними, а также ведет протокол изменений переданных пользователю записей;

  • Ресолвер. Эта часть обеспечивает внесение изменений в базу данных. При обновлении базы данных серверу передается протокол изменений, в соответствии с которым начинается транзакция, и проводятся изменения в БД.

Какие преимущества использования механизма provider/resolver

Короткое время жизни транзакций

Долгие транзакции заставляют сервер БД удерживать блокировки, которые снижают возможности многопользовательской обработки данных и отнимают ресурсы сервера. При архитектуре provider/resolver, транзакция существует только в момент, когда применяются обновления. Таким образом снижается требование к ресурсам и уменьшается вероятность блокировок, особенно при большом количестве пользователей сервера БД;

Дает возможность редактировать любые записи

Записи, возвращаемые многотабличными выборками, хранимыми процедурами или нередактируемыми view не могут быть изменены напрямую. Но имеется возможность указать при помощи свойства ProviderFlags у объектов TField, какие столбцы должны обновляться, а в событии DataSetProvider.OnGetTableName - какая именно таблица должна обновляться. Или написать обработчик события BeforeUpdateRecord, с установкой Applied := True. При этом большинство нередактируемых данных станут редактируемыми;

Быстрая сортировка и поиск

Поскольку ClientDataSet хранит записи в памяти, они могут быть быстро отсортированы. Для повышения скорости сортировки или поиска, можно создать индексы над данными ClientDataSet либо во время разработки, либо во время выполнения приложения;

Автоматическое агрегирование

ClientDataSet может производить сложные вычисления, такие как Sum(Price) -Sum(Cost). Также можно группировать вычисления сумм по полю или комбинации полей. Доступные агрегаты Sum, Min, Max, Count и Avg;

Просмотр подмножества данных

Выражения фильтрации могут использовать синтаксис WHERE для отображения подмножества записей ClientDataSet, без необходимости конструировать запрос на клиенте и отправлять его каждый раз на сервер;

Множество видов данных

Возможность "клонировать" курсор ClientDataSet (метод CloneCursor) позволяет просматривать одни и те же данные различными способами, одновременно. Например, можно просматривать одни и те же данные, отсортированные по разным столбцам;

Вычисляемые столбцы на клиенте

Также имеется возможность добавлять вычисляемые столбцы к ClientDataSet во время разработки. Поскольку вычисления производятся скомпилированным Delphi кодом, они выполняются очень быстро и могут быть более сложными, чем вычисления, производимые на сервере;

Ограничение, которого нет

Может показаться, что у хранения записей в памяти есть ограничение по количеству таких записей, с которыми можно работать. Но обычно приложения разрабатываются таким образом, чтобы выбирать небольшой объем данных для минимизации сетевого трафика и загрузки сервера БД. Даже если нужно работать с необычно большим количеством записей, помните что 10 тысяч записей, каждая по 100 байт, занимают 1 мегабайт памяти. В случаях, когда объем данных действительно большой, компоненты ClientDataSet и DataSetProvider имеют свойства и события, которые позволяют выбирать часть записей, редактировать их, удалять из памяти и затем получать новую порцию записей. 

Соответствие компонентов доступа к базам данных, различных технологий

  InterBase Express

ADO

BDE

dbExpress

Комментарий

TIBDatabase

TADOConnection

TDatabase

TSQLConnection

Установление соединения с БД.

TIBTable

TADOTable

TTable

TSQLTable

Однонаправленный не редактируемый набор данных.

TIBQuery

TADOQuery

TQuery

TSQLQuery

Однонаправленный не редактируемый набор данных.

TIBStoredProc

TADOStoredProc

TStoredProc

TSQLStoredProc

Однонаправленный не редактируемый набор данных.

TIBDataSet

TADODataSet

нет аналога

TSQLDataSet

TSQLDataSet объединяет в себе возможности компонентов SQLTable, SQLQuery и SQLStoredProcedure.

TIBSQLMonitor

нет аналога

утилита SQL Monitor

TSQLMonitor

Отслеживает все инструкции SQL, проходящие между компонентом SQLConnection и сервером базы данных, к которому он подключен.

нет аналога

нет аналога

TBDEClientDataSet

TSimpleDataSet

Используется при разработке 2-ух уровневых приложений. Является комбинацией SQLDataSet, DataSetProvider, ClientDataSet и позволяет читать и редактировать данные.

нет аналога

нет аналога

TBatchMove

нет аналога

При необходимости, придется повторить данную функциональность.

&hbsp;

 

TSession

нет аналога

Механизм TSession в технологии dbExpress не нужен.

 

 

TUpdateSQL

нет аналога

Возможности TClientDataSet заменяют механизм CachedUpdates.

 

 

TNestedDataSet

нет аналога

Возможность обработки вложенных наборов данных встроена в TDataSetProvider и TClientDataSet. 

Что такое Borland MyBase

Данные содержащиеся в ClientDataSet могут быть сохранены или загружены как дисковый файл в двоичном, либо в XML формате. Это позволяет ClientDataSet функционировать как однопользовательская система реляционной базы данных. Данную возможность можно использовать следующим образом:

  • Создавать приложения в соответствии с моделью "портфеля", при которой пользователь портативного ПК выбирает данные из сервера базы данных и сохраняет их локально. Затем пользователь отсоединяется от сети, вставляет, удаляет и обновляет записи; потом сохраняет данные и протокол изменений, снова подключается к сети и выполняет обновления в базе данных;

  • Использовать для импорта/экспорта данных в XML;

  • Использовать в качестве временной, хранящейся в памяти таблицы, которая может создаваться и ликвидироваться «на лету».

Недостатки:

  • Данные должны быть размещены в памяти во время осуществления доступа;

  • В предыдущих версиях Delphi (на Delphi7 - не знаю), импорт/экспорт данных в XML формате, вызывал небольшую утечку памяти.

В некоторых примерах, имеются упоминания о компоненте TSQLClientDataSet, но Delphi7 и Help его не находят

В Delphi7 данный компонент, не рекомендуется к использованию, он заменен на TSimpleDataSet. Для поддержки старых приложений, исходники компонента TSQLClientDataSet размещены в каталоге "...\Demos\Db\SQLClientDataset".

 

Для чего нужен компонент TSimpleDataSet

Данный компонент появился в Delphi7, как замена TSQLClientDataSet. Он комбинирует в себе TSQLDataSet, TDataSetProvider и TClientDataSet и является простой заменой TQuery при переходу с BDE на dbExpress. Также экономится время в процессе разработки, так как вместо трех компонент используется один. Однако данный компонент имеет недостатки:

  • Не поддерживает многозвенные приложения;

  • Невозможно подключить дочерний TDataSet для получения вложенных наборов данных;

  • События встроенного TDataSetProvider не экспортированы;

  • Свойство Options встроенного TDataSetProvider не экспортировано. Нет возможности устанавливать параметры провайдера во время разработки или выполнения;

  • Если используется только Borland MyBase (база данных встроенная в TClientDataSet), то лучше использовать ClientDataSet отдельно, для уменьшения используемых ресурсов;

  • Свойства и методы встроенного TSQLDataSet не эквивалентны свойствам TQuery. Поэтому использование TSimpleDataSet при переносе проектов с BDE могут потребовать больше изменений в коде.

Как обойти недостатки компонента TSimpleDataSet

Необходимо разместить компоненты TSQLQuery, TDataSetProvider и TClientDataSet на форму или модуль данных. Установить свойство DataSetProvider.DataSet на SQLQuery, ProviderName на ClientDataSet. Выбрать все три компонента, и в главном меню среды выбрать - Component | Create Component Template. Указать имя класса, компонента и палитры для нового шаблона. Теперь можно использовать три компонента так же легко как один компонент TSimpleDataSet.

 

Как управлять транзакциями

Класс TSQLConnection имеют методы StartTransaction, Commit, Rollback и позволяет работать с несколькими транзакциями, активными в один и тот же момент. Для поддержки такого режима методы StartTransaction, Commit и Rollback принимают параметр TTransactionDesc, объявленный следующим образом:

TTransactionDesc = packed record

TransactionID : longword;

GlobalID : longword;

IsolationLevel : TTransactionIsolationLevel;

CustomIsolation: longword;

end;

Для каждой отдельной транзакции необходим объявить переменную типа TTransactionDesc и установить TransactionId в число, которое должно быть уникально между всеми активными транзакциями. Поле GlobalId используется только в Oracle для распределенных транзакций. IsolationLevel может быть xilDirtyRead, xilReadCommitted или xilRepeatableRead. Поле CustomIsolation пока не поддерживается.

Пример:

var   T: TTransactionDesc; begin   T.TransactionID := 1;   T.IsolationLevel := xilREADCOMMITTED;   SQLConnection.StartTransaction(T); end;

Для обеспечения одного из главных достоинств dbExpress - короткое время жизни транзакции, необходимо придерживаться следующей схемы:

  • Пользователь редактирует данные в ClientDataSet;

  • Старт транзакции;

  • Вызов ApplyUpdates;

  • Commit или Rollback.

Как управлять загрузкой параметров подключения во время выполнения приложения

Для загрузки значений параметров подключения во время выполнения приложения необходимо присвоить значение True свойству LoadParamsOnConnect. При загрузке приложения компонент класса TSQLConnection определяет размещение файла dbxconnections.ini на основании содержимого ключа системного реестра Connection Registry File в ветви HKEY_CURRENT_USER\Software\Borland\DBExpress. Изменение значения этого ключа можно сделать в момент установки приложения, а также не забыть включить в поставку сам файл dbxconnections.ini.

 

Как отсортировать записи в TSQLDataSet

Для типа команды:

  • ctQuery:  порядок сортировки записей при выборке данных определяется конструкцией SQL ORDER BY, заданной в тексте запроса;

  • ctTable: порядок сортировки по умолчанию определяет SQL сервер. Для изменения порядка сортировки в этом случае необходимо в свойстве SortFieldNames указать имена полей сортировки, разделив их точкой с запятой. При генерации запроса на выборку таблицы данные поля будут вставлены в запрос в конструкции ORDER BY. Данный способ пригоден и для команды ctQuery. При этом в тексте SQL команды не должно содержаться ORDER BY. Однако первый описанный способ сортировки для типа команд ctQuery более предпочтителен;

  • ctStoredProc: порядок сортировки определяется в самой хранимой процедуре.

Как выполнять команды DDL и DML

Для выполнения команд DDL и DML, в TSQLConnection имеется два метода:

  • ExecuteDirect. Имеет всего один параметр - выполняемую команду SQL. Если возвращается значение 0, то команда выполнена успешно, иначе возвращается код ошибки dbExpress. Кода ошибок можно найти в файле dbExpress.pas;

  • Execute. Кроме самой команды SQL, может содержать список значений для входных параметров и указатель на результирующий набор данных (например если SQL команда возвращает набор). Если в качестве указателя на результирующий набор данных передать nil и команда SQL вернет набор данных, то он не будет учтен, но и не будет ошибок и исключений.

При многократном исполнении одних и тех же SQL команд, их следует параметризировать. Для облегчения заключения текстовых значений в кавычки, следует использовать функцию QuotedStr.

Пример:

SQLDataSet1 := TSQLDataSet.Create(nil); try   SQLConnection1.Execute('select * from filials', nil, SQLDataSet1);   ... finally   SQLDataSet1.Free; end;  

Как создать базу данных в InterBase

Так как с помощью метода ExecuteDirect не удается создать базу данных, то можно воспользоваться следующим способом (или низкоуровневым API):

  • Создать пустую базу данных;

  • Создать ресурс например с именем EMPTYDB, с помощью команды. EMPTYDB RCDATA DISCARDABLE "путь к EMPTY.GDB" и поместить данную команду в файл EmptyDB.RC;

  • С помощью компилятора ресурсов откомилировать: brcc32 EmptyDB.RC;

  • Полученный файл EmptyDB.RES, подключить в приложение с помощью {$R EmptyDB.RES}.

Пример:

{$R EmptyDB.RES} procedure CreateDB(const DatabaseName: string); var   HRsrc: THandle;   Stream: TResourceStream; begin   HRsrc := FindResource(HInstance, PChar('EMPTYDB'), RT_RCDATA);   if HRsrc <> 0 then   begin     Stream := TResourceStream.Create(HInstance, 'EMPTYDB', RT_RCDATA);     try       Stream.SaveToFile(DatabaseName);     finally       Stream.Free;     end;   end; end;  

Как TDataSetProvider определяет изменена ли запись другим пользователем

Для этих целей компонент DataSetProvider имеет свойство UpdateMode. Когда провайдер генерирует операторы SQL для обновления базы данных, каждый оператор UPDATE или DELETE включает условие WHERE для идентификации записи. Если UpdateMode установлен в:

  • upWhereAll. В WHERE включены все поля. Обеспечивает наиболее высокую степень уверенности в том, что запись не изменялась со времени ее первоначального извлечения из базы данных. Если два пользователя редактируют одну и ту же запись, то первый пользователь может эту запись обновлять, тогда как второй пользователь получит сообщение об ошибке "Another user changed the record". Если в дальнейшем понадобится уточнить, какие именно поля следует проверять, следует установить значение pfInWhere в False;

  • upWhereChanged. В WHERE включены только ключевые и модифицированные поля. Два пользователя могут одновременно редактировать одну и ту же запись, если только редактируются разные поля;

  • upWhereKeyOnly. В WHERE включены только ключевые поля. Существующая запись всегда замещается новой. Реализуется принцип "выигрывает последний".

Как обновлять результаты многотабличных выборок, процедур и не редактируемых view

Имеется три метода:

  • Если запись включает столбцы из одной таблицы (например возвращаемые хранимой процедурой), то необходимо создать обработчик OnGetTableName, возвращающий имя таблицы которую необходимо обновить;

  • Для обновления многотабличных выборок, где надо обновлять записи только одной таблицы. Необходимо установить ProviderFlags конкретных полей для указания, что именно эти поля надо обновлять и создать OnGetTableName, возвращающий имя нужной таблицы. После этого провайдер будет генерировать операторы SQL для обновления таблицы автоматически;

  • Если нужно обновлять много таблиц для каждой записи, то необходимо также обрабатывать событие BeforeUpdateRecord, в котором можно создавать любое количество запросов, опираясь на различные факторы, например на значение параметра UpdateKind и значение полей в наборе DataSet. При просмотре или модификации записей, содержащихся параметре DeltaDS необходимо использовать свойства OldValue и NewValue соответствующего объекта TField (при использовании свойств TField.Value или TField.AsXXX может быть непредсказуемый результат).

Пример:

procedure TForm1.DataSetProvider1BeforeUpdateRecord(Sender: TObject;   SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;   UpdateKind: TUpdateKind; var Applied: Boolean); var   SQL: string;   Connection: TSQLConnection; begin   //Будем использовать соединение переданного набора данных   Connection := (SourceDS as TCustomSQLDataSet).SQLConnection;   case UpdateKind of     ukInsert: begin       SQL := 'Вставка записи в 1-ую таблицу';       Connection.Execute(SQL, nil, nil);       SQL := 'Вставка записи в 2-ую таблицу';       Connection.Execute(SQL, nil, nil);     end;     ukModify: begin       SQL := 'Изменение 1-ой таблицы';       Connection.Execute(SQL, nil, nil);       SQL := 'Изменение 2-ой таблицы';       Connection.Execute(SQL, nil, nil);     end;     ukDelete: begin       SQL := 'Удаление из 1-ой таблицы';       Connection.Execute(SQL, nil, nil);       SQL := 'Удаление из 2-ой таблицы';       Connection.Execute(SQL, nil, nil);     end;   end;   //Уведомляем провайдер, что изменения выполнены вручную   Applied := True; end;  

Где разместить бизнес-логику

Так как в обработчике BeforeUpdateRecord провайдера имеется возможность проверять запись перед ее обновлением, и изменять значения полей - то это лучшее место для размещения бизнес логики. Если в данном обработчике будет производиться модификация полей, перед отправкой на сервер базы данных, то необходимо установить poPropogateChanges в True. Теперь провайдер будет отсылать изменения обратно в ClientDataSet для обновления записей, хранимых в памяти.  

Что такое клонирование данных

Это способность клиентского набора данных TClientDataSet, клонировать информацию из другого набора данных. При этом создается только одна физическая копия данных, к которой получают доступ два и более различных наборов данных.  Изменения в одном наборе данных немедленно отражаются на представлении данных другого набора. Зачем это надо:

  • просмотр копии набора данных без использования текущего указателя записи первичного набора данных;

  • к копии можно применять различные фильтры и диапазоны, не зависимо от первичного набора данных.

Пример:

var    cdsClone: TClientDataSet; begin    cdsClone := TClientDataSet.Create(nil);   try     cdsClone.CloneCursor(ClientDataSet1, False, False);     ...   finally     cdsClone.Free;   end; end;

Какие функции доступны для локальной фильтрации клиентских наборов данных TClientDataSet

Функция 

Описание 

Пример 

Проверка равенства 

ID=100 

<> 

Проверка неравенства 

ID<>100 

Меньше чем 

ID<100 

Больше чем 

ID>100 

<= 

Меньше или равно 

ID<=100 

>= 

Больше или равно 

ID=>100 

BLANK 

Пустое строковое поле (не тоже что NULL) 

Name=BLANK 

IS NULL 

Проверка на нулевое значение 

ID IS NULL 

IS NOT NULL 

Проверка на ненулевое значение 

ID IS NOT NULL 

AND 

Логическое И 

(ID=100) AND (Name=BLANK) 

OR 

Логическое ИЛИ 

(ID=100) OR (Name=BLANK) 

NOT 

Логическое ОТРИЦАНИЕ 

NOT (Name=BLANK) 

Сложение (чисел, строк и дат/времени) 

 

Вычитание (чисел и дат/времени) 

 

Умножение (чисел) 

 

Деление (чисел) 

 

Upper 

Верхний регистр 

Upper(Name)='PEGAS' 

Lower 

Нижний регистр 

Upper(Name)='pegas' 

SubString 

Вырезать подстроку 

SubString(Name, 3)='AS' 

Trim 

Вырезание начальных и конечных символов строки 

Trim(Name) или Trim(Name, '.') 

TrimLeft 

Вырезание начальных символов строки 

TrimLeft(Name) или TrimLeft(Name, '.') 

TrimRight 

Вырезание конечных символов строки 

TrimRight(Name) или TrimRight(Name, '.') 

Year 

Возвращает год из значения даты 

Year(BDay)=2003 

Month 

Возвращает месяц из значения даты 

Month(BDay)=4 

Day 

Возвращает дня из значения даты 

Day(BDay)=8 

Hour 

Возвращает часы (24 часовой формат) из значения времени 

Hour(MTime)=14 

Minute 

Возвращает минуты из значения времени 

Minute(MTime)=40 

Second 

Возвращает секунды из значения времени 

Second(MTime)=0 

GetDate 

Возвращает текущую дату и время 

BDayTime < GetDate 

Date 

Возвращает дату из значения дата/время 

Date(BDayTime) 

Time 

Возвращает время из значения дата/время 

Time(BDayTime) 

LIKE 

Частичное сравнение строк 

Name LIKE '%PEGAS%' 

IN 

Поиск во множестве значений 

Month(BDay) IN (10, 11, 12) 

Частичное сравнение строк 

Name = '*AS' 

Способы развертывания приложения, использующего dbExpress

Имеется два способа: в виде автономного единого EXE файла, либо используя динамически подключаемые библиотеки DLL.

Для создания автономного файла, необходимо добавить в оператор USES ссылку на три DCU файла, находящихся в директории Lib.

Модуль 

Необходимо включить 

dbExpInt

Если приложение подключается к базе данных InterBase

dbExpOra

Если приложение подключается к базе данных Oracle

dbExpDb2

Если приложение подключается к базе данных DB2

dbExpMySQL

Если приложение подключается к базе данных MySQL 3.23.x (dbExpMyS для версии 3.22.x)

Crtl, MidasLib

Если приложение dbExpress использует клиентские наборы данных. Лучше подключать всегда, так как без них у Delphi7 - случается внутренняя ошибка компиляции приложения

Использование динамически подключаемыех библиотек DLL.

Работу механизма dbExpress в программе выполняют две библиотеки. Их имена совпадают с именами DCU файлов.

Библиотека DLL 

Используется 

dbExpInt.dll

Если приложение подключается к базе данных InterBase

dbExpOra.dll

Если приложение подключается к базе данных Oracle

dbExpInf.dll

Если приложение подключается к базе данных Informix

dbExpMSS.dll

Если приложение подключается к базе данных MS SQL

dbExpDb2.dll

Если приложение подключается к базе данных DB2

dbExpMySQL.dll

Если приложение подключается к базе данных MySQL 3.23.x (dbExpMyS.dll для версии 3.22.x)

Midas.dll

Если приложение dbExpress использует клиентские наборы данных. Также данную библиотеку необходимо регистрировать в реестре.

Все дополнительные библиотеки должны находится либо в директории вашей программы, либо в директориях указанных в переменной PATH.

СОДЕРЖАНИЕ И ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

    1. Изучить теоретические введения.

  1. Создать новый проект.

  2. Поместить на форму основные компоненты для использования технологии доступа к данным InterBase Express.

  3. Подключить базу данных и связать компоненты для использования технологии.

  4. Написать код, который позволяет манипулировать данными с использованием методов и свойств технологии InterBase Expres.

  5. Проверить работоспособность подключения.

  6. Проверить работу всего проекта.

  7. Продемонстрировать преподавателю работу разработанного образца проекта.

  8. Получить от преподавателя индивидуальное задание и создать проект (по аналогии) для выполнения индивидуального задания.

  9. Подготовиться к защите лабораторной работы, которая включает в себя демонстрацию индивидуального варианта, защиту по контрольным вопросам теоретической части работы.

Вопросы выходного контроля:

  1. Расскажите, какие компоненты необходимы для использования технологии dbExpress.

  2. Расскажите, как подключать компоненты использования технологии dbExpress.

  3. Перечислите все компоненты, которые могут использоваться в технологии dbExpress.

  4. Охарактеризуйте некоторые методы и свойства компонентов для использования технологии dbExpress.

  5. Перечислите главные отличия при использовании технологий InterBase Expres и dbExpress.