Сделай Сам Свою Работу на 5

Работа с базой данных ADO





Обзор средств доступа к БД


Система программирования Borland Delphi (Borland C++ Builder) включает в себя развитые средства для разработки приложений баз данных. С помощью этих средств можно создавать полноценные клиентские приложения баз данных (БД). Среди возможностей таких приложений можно назвать:
• доступ к локальным и удаленным БД;
• представление данных;
• формирование отчетов;
• оперативный анализ данных.
Доступ к БД можно осуществлять с помощью различных технологий. В Borland Delphi 7.0 доступны следующие технологии:
1. BDE (Borland Database Engine). Базовая технология доступа к БД от фирмы Borland. Позволяет получать доступ к реляционным БД с помощью специальных BDE драйверов или через ODBC драйверы. Исторически является первой технологией доступа к БД в средах Borland Delphi и Borland C++ Builder.
2. dbExpress. Более новая и совершенная технология доступа к БД от фирмы Borland. Появилась в 6-й версии Borland Delphi (Borland C++ Builder). По сравнению с BDE обеспечивает более быстрый и удобный доступ к данным.
3.ADO (ActiveX Database Objects). Технология доступа к данным от фирмы Microsoft. В свою очередь базируется на технологии OLE-DB. Обеспечивает удобный и надежный доступ к данным, хотя и несколько более медленный, чем в технологиях BDE и dbExpress. Хорошо подходит для работы с системами управления базами данных (СУБД) от фирмы Microsoft (MS Access, MS SQL Server).
4. InterBase. Специализированная технология доступа к серверу БД Borland InterBase. При работе с этой СУБД обеспечивает
наивысшую производительность по сравнению с другими технологиями.
Кроме того, сторонними фирмами разработано множество других специализированных технологий доступа к БД конкретных СУБД, таких как Oracle, DB2 и других.
Следует отметить, что принципы работы с БД с использованием любой из перечисленных технологий практически одинаковы. В связи с этим основы работы с БД будут рассмотрены на примере технологии BDE, имеющейся в любой версии Borland Delphi (Borland C++ Builder). Получив навыки работы с BDE, перейти к другим технологиям не составляет никакого труда.
Для работы с БД в Borland Delphi (Borland C++ Builder) имеются специальные наборы компонентов, с помощью которых доступны перечисленные выше технологии. Компоненты располагаются на следующих вкладках палитры компонентов:
Data Access. Компоненты доступа к данным. Включает в себя невизуальные компоненты, предназначенные для доступа к данным и являющиеся общими для всех технологий;
BDE.Компоненты доступа к данным с помощью технологии BDE;
dbExpress. Компоненты доступа к данным с помощью технологии dbExpress;
ADO. Компоненты доступа к данным с помощью технологии ADO;
InterBase. Компоненты доступа к данным с помощью технологии InterBase;
Data Controls. Визуальные компоненты представления данных;
Decision Cube. Визуальные и невизуальные компоненты для оперативного анализа;
Quick Reports. Визуальные компоненты для формирования отчетов по БД.
Принципы работы с перечисленными компонентами будут изложены в последующих параграфах.





 

 

Обзор утилит в составе Borland Delphi (Borland C++ Builder) для работы с БД
В состав системы программирования Borland Delphi (Borland C++ Builder) включены некоторые утилиты, облегчающие написание приложений БД. К таким утилитам следует отнести:
BDE Administrator. Позволяет создавать и изменять так называемые псевдонимы БД. Подробнее работа с данной утилитой, как и с утилитой SQL Explorer, рассматривается в параграфе «Создание псевдонимов БД».
SQL Explorer. Утилита во многом сходная с BDE Administrator, но помимо создания псевдонимов БД позволяет отлаживать SQL-запросы.
Database Desktop. Утилита, позволяющая создавать и заполнять БД. Хорошо работает только с БД формата Paradox. Для других форматов БД применять не рекомендуется.
Datapump. Утилита, позволяющая конвертировать БД из одного формата в другой. Использование утилиты с современными СУБД не рекомендуется.
SQL Monitor. Позволяет отлаживать SQL-запросы при использовании технологии доступа к БД BDE.
Из перечисленных утилит наиболее полезной является SQL Explorer.



Дилемма доступа к данным

 

По традиции, приложения Delphi использовали технологию BDE для доступа к данным. Но с появлением Delhi 5 появилась новая возможность - ADO.

С момента появления Delphi 5, который включает технологию ADOExpress ( она входит в Delphi Enterprise или продается как отдельная опция к Delphi Professional), программисты встретились с выбором: что использовать BDE или ADO для доступа к БД ? Типичным ответом на вопрос "Какую технологию Баз Данных использовать ?" будет - "Это зависит от ..."

Технология BDE ( http://www.borland.com/bde ) имеет длинную и славную историю. Она появилась в Delphi 1 в качестве механизма для доступа к таблицам Paradox и, позднее, была частью ISAPI - инициативы поддерживаемой IBM, Novell и WordPerfect. Несмотря на некоторые проблемы, BDE является одной из причин успеха Delphi на арене Баз Данных и достигнув версии 5 она является достаточно зрелой технологией. И хотя есть несколько проблем в процессе программирования и установки готовых программ, Delphi - программисты научились жить с BDE.

Несколько белых пятен.

Так зачем уходить от BDE ? Разворачивание ее на арендуемых Internet серверах зачастую невозможно из-за неодобрения ISP'ом запуска сервисов системного уровня на своих серверах. И хотя BDE была усилена для поддержки таких возможностей, как обьектно-реляционная модель Oracle 8, некоторые из ее возможностей все еще сдерживаются ее Paradox корнями. Например, способ сопоставления числовых полей Базы Данных и типов переменных создает проблемы совместимости при работе Delphi с различными SQL серверами. Другая проблема в том, что BDE полностью включает ядро, используемое Paradox и dBase для доступа к данным. Нет возможности поставлять облегченную версию BDE исключив поддержку Paradox'а, если вы работаете только с SQL серверами. (С другой стороны, некоторые из этих проблем, такие как работа SQL сервера на ISP сервере, актуальны и для использования ADO.)

В конце концов, с приходом Kylix (технология Delphi и C++Builder для Linux), мы увидим версию Delphi которая не сможет использовать BDE, но очевидно будет базироваться на новом облегченном ядре. Если для BDE нет места в будущем Delphi для Linux, она врядли может считаться будущим и для Windows. Borland продолжает утверждать, что BDE остается, но как мы видим за последние пару лет разрабатывается очень мало.

Технология ActiveX Data Objects (ADO) это разработка Microsoft. Она предоставляет упрощенный способ для доступа к данным основанный на OLE DB, сама же мощная лошадка остается за сценой. Программировать непосредственно на OLE DB уровне достаточно сложно, поэтому Microsoft предоставляет более простое решение.

Включая технологию ADOExpress в Delphi Borland принял ADO в качестве общей технологии и признал Microsoft Access, как широко распространенный механизм доступа к БД (Прим.перев.: с полгода назад Microsoft заключил серию соглашений с Inprise- Microsoft заплатил в общей сложности порядка 250 млн. долларов за поддержку его технологий в продуктах Inprise). Не смотря на то, что в последнее время вы уже могли использовать БД Access через BDE, возможности все же были ограничены. Microsoft также установил несколько препятствий на дороге - таких как сокрытие новой версии DAO, фронтэнд Access'a обычно используемый в Visual Basic - чтобы подтолкнуть других поставщиков средств разработки для Windows в сторону ADO.

Так или иначе, ADO это достаточно интересная технология. Она оптимально "легковесная", достаточно мощная, предоставляет доступ к данным вне реляционных БД, и Microsoft пытается продвинуть ее в качестве открытого стандарта. Вы даже можете написать OLE DB провайдера для ADO в Delphi.

Потеря управления.

Хотя ADO и умное решение, есть одна вещь, которая мне не нравится: вы теряете контроль, который предоставляет BDE. BDE ограничена в своей возможности обновлять результат запроса, поэтому чтобы использовать живые запросы (live queries) в Delphi вы часто используете компонент UpdateSql, а с SQL предложениями для замены, вставки и удаления - компонент Query. Это может показаться неудобным, но на самом деле позволяет сделать значительную тонкую настройку вашего приложения. ADO с другой стороны, делает много работы, чтобы обновлять результат запроса без какого либо дополнительного кодирования, но у вас нет контроля над SQL-кодом посылаемым серверам, если только Вы не разместили собственное решение отбросив живые запросы. Некоторая тонкая настройка доступна в ADO через использование DataSet'a, курсора, и блокировочных опций, но эти возможности ведут себя по разному на разных SQL серверах и, как оказывается, тонко настраиваются только для Microsoft SQL Server и Access.

Рассмотрим последнее подробнее: Несмотря на то, что использование ADO для доступа к нескольким базам данных является хорошей идеей, есть несколько возможностей в ADO , которые похоже связаны только с Access. Например, Access является единственной, из всех что я знаю, базой данных, в которой вы имеете возможность блокирования записей при чтении на случай, если вы захотите редактировать их в будущем. Как и BDE включает в себя некоторые Paradox-специфичные возможности, так и ADO включает несколько возможностей, которые более Access-ориентированы, чем должно было бы предоставлять универсальное средство доступа к данным.

Некоторые из наиболее интересных возможностей ADO связаны с использованием курсоров со стороны клиента. Вы можете скопировать полностью набор данных на клиентский компьютер и выполнить ряд операций на этом кэше, включая сортировку, фильтрацию и редактирование данных. Вы можете даже скопировать часть данных в локальный файл и работать с ним в режиме offline.

BDE тоже выполняет кэширование на локальном компьютере, но не позволит вам работать с кэшем. Однако, довольно много Delphi программистов научились использовать компонент ClientDataSet для работы с кэшированными данными. Я исследовал этот предмет и пришел к заключению, что ClientDataSet делает все, что делает клиентский (client-side) курсор ADO, включая сортировку, фильтрацию и локальное кэширование выборки из набора данных (local snapshots). Обе технологии позволяют вам создать локальный набор данных наложенный (mapped to) на файл в удаленной базе данных без соединения с ней. Обе имеют поддержку для XML - хотя и различными путями. Обе могут быть использованы для построения трехуровневых приложений. И обе предоставляют вложенные (nested) таблицы для создания master-detail представлений данных.

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

Обилие опций

ADO и BDE не единственная альтернатива для доступа к данным в Delphi. Есть и другие компоненты наборов данных производимых Borland и третьими фирмами для непосредственного доступа к SQL серверам, таким как Oracle и Interbase. Есть также альтернативы для ADO - это разработки, которые предоставляют прямой доступ к DAO, и другие альтернативные технологии поддерживающие от Btrieve до AS/400. Но я все еще не нашел решения для прямого OLE DB доступа.

BDE больше не является общим знаменателем для доступа к базам данных в Delphi. Я даже написал пару dataset'ов для доступа к данным не из баз данных. Вы, разумеется, не нуждаетесь в ADO и специальных OLE DB провайдерах для этого.

Oracle, один из предпочтительных back-end серверов для Delphi приложений, наслаждается таким широкораспространенным использованием (колоритная фраза, я не стал ее "русифицировать"- прим.перев.), что я подозреваю, что успех ADO стратегии в значительной степени зависит от поддержки Oracle - по крайней мере с точки зрения перспективы для Delphi разработчиков. Очевидно, что поставляемый Microsoft'ом OLE DB провайдер для Oracle на сегодня не является ни живучим, ни полным решением. Если Oracle не подтолкнет ADO, то будущее этой технологии не видится столь ярким. А поскольку Microsoft наращивает ADO в направлении к собственным реализациям баз данных, то становится понятным сопративление Oracle'a продвижению ADO.

Самое большое преимущество технологии ADO в том, что она широко распространена в Windows и продвигается фирмой Microsoft. Если вам нужен доступ к базам данных Microsoft SQL Server или Access, то вы вероятно предпочтете использовать ADO. Если вы используете Paradox или Interbase, тогда вам вероятно лучше поставить на BDE - если только вы не погрузились на корабль "InterBase Express". С таким большим количеством вопросов в программном бизнесе, ответом на "Какую технологию мне надо бы использовать ?" будет : "Это зависит от ..."

 

ADO (от англ. ActiveX Data Objects — «объекты данных ActiveX») — интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде.

ADO (Active Data Objects) - это высокоуровневый компонент технологии доступа к данным от Microsoft. (т.н. MDAC - Microsoft Data Access Components) Другие компоненты - это старый добрый ODBC и новый низкоуровневый интерфейс OLE DB.

Данными для ADO могут быть как привычные таблицы Access или серверные базы MS SQL или Oracle, так и несколько экзотичные Microsoft Active Directory Service, XML-файлы и т.п.

ADO- более новая технология чем ODBC, работает через интерфейс OLE DB.

Впрочем, можно использовать ADO и через ODBC - хотя стоит ли? OLE DB превосходит ODBC по скорости и, похоже, Microsoft основную ставку делает именно на парочку ADO+OLE DB. Более того, похоже, и Borland делает ставку на ADO, старик BDE готовится к отправке на пенсию, а компоненты для работы с ADO от Borland (ADOExpress) теперь входят в поставку Delphi. (существуют также Delphi-компоненты для работы с ADO от сторонних фирм). Так что если вы хотите работать с MS SQL 7 или MS SQL 2000 без ограничений, которые накладывает BDE (BDE по-прежнему полностью поддерживает только MS SQL 6.5 и обновления BDE пока не предвидится) то вам прямая дорога к изучению ADO Express. Что касается баз Access то я очень бы посоветовал обратить на них внимание программистам, уставшим от «парадоксального» поведения Paradox+BDE. Начиная с версии Access 2000 Microsoft удалось догнать и перегнать старый, добрый Paradox (не менявшийся, насколько мне известно, уже довольно давно).

Обзор компонент

Для работы с ADO на вкладке компонентов ADO есть шесть компонентов:TADOConnection, TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc.

  • TADOConnection аналогичен компоненту BDE TDatabase и используется для указания базы данных и работы транзакциями.
  • TADOTable – таблица доступная через ADO.
  • TADOQuery – запрос к базе данных. Это может быть как запрос, в результате которого возвращаются данные и базы (например, SELECT), так и запрос, не возвращающий данных (например, INSERT).
  • TADOStoredProc – вызов хранимой процедуры. В отличие от BDE и InterBase хранимые процедуры в ADO могут возвращать набор данных, поэтому компонент данного типа является потомком от TDataSet, и может выступать источником данных в компонентах типа TDataSource*.
  • TADOCommand и TADODataSet являются наиболее общими компонентами для работы с ADO, но и наиболее сложными в работе. Оба компонента позволяют выполнять команды на языке провайдера данных (так в ADO называется драйвер базы данных).

Разница между ними в том, что команда, исполняемая черезTADODataSet, должна возвращать набор данных и этот компонент позволяет работать с ними средствами Delphi (например, привязать компонент типа TDataSource). А компонент TADOCommand позволяет исполнять команды не возвращающие набор данных, но не имеет штатных средств Delphi для последующего использования возвращенного набора данных.

Очевидно, что все компоненты должны связываться с базой данных. Делается это двумя способами либо через компонентTADOConnection либо прямым указанием базы данных в остальных компонентах. К TADOConnection остальные компоненты привязываются с помощью свойства Connection, к базе данных напрямую через свойство ConnectionString.

База данных может быть указана двумя способами через файл линка к данным (файл в формате Microsoft Data Link, расширение UDL), либо прямым заданием параметров соединения.

Простейшее приложение

  • cоздадим простейшее приложение, состоящее из одной таблицы.
  • cоздаем форму состоящую из трех компонент
  • TADOTable с палитры компонент ADO,
  • TDataSourceс палитры компонент Data Access,
  • TDBGridcпалитры компонент Data Controls.

Рис 7

  • cвязываем компоненты, устанавливая
  • свойствоTDBGridDataSource на компонент TDataSource,
  • свойствоDataSet компонента TDataSource на компонент TADOTable.

Теперь нам необходимо указать базу данных. Делается это в свойствеConnectionString компонента TADOTable. При нажатии на кнопку “” появится редактор параметров соединения. Отметим радокнопку “Use data link file”, нажмите на кнопку “Browse…” и выберите в появившемся окне после файл линка к базе данных “\Program Files\Common Files\System\ole db\Data Links\DBDEMOS.UDL”. Этот линк указывает на базу в формате MS Access, входящую в поставку Delphi.

После этого в свойствеTableName компонента TADOTable выберем таблицу customer.

Активизируем компонентаTADOTable, установив свойство Active в True.

Приложение можно запускать. Этот пример можно найти в директории Simple.

Работа с базой данных ADO

ADOConnection1

ConnectionString

 

BaseDBEx:=True;

if Not FileExists(BasemdbLink) then

begin

ShowMessage('Файл базы данных '+BasemdbLink+' не найден');

BaseDBEx:=False;

end;

 

ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0

 

if Not ADODataSet1.Active then

ADODataSet1.Active:=True;

 

ADODataSet1.Insert;

ADODataSet1.FieldByName('Date').Value:=Date;

ADODataSet1.FieldByName('Zone').Value:=a;

ADODataSet1.Post;

 

if BaseDBEx then

begin

ADODataSet1.Close;

ADODataSet1.CommandText:='select * from Picture';

ADODataSet1.Open;

ADODataSet1.Insert;

ADODataSet1.FieldByName('Date').Value:=Date;

ADODataSet1.FieldByName('Time').Value:=Date;

ADODataSet1.FieldByName('Picture').Value:=SaveL+FormatDateTime('dd-mm-yyyy',Date)+'('+FormatDateTime('hh-nn-ss',Time)+')'+'.jpg';

ADODataSet1.Post;

 

ADOConnection1.Connected:=False;

ADOConnection1.Close;

ADODataSet1.Close;

end;

 

ADOQuery1.Edit;TBLOBField(ADOQuery1.FieldByName('myField')).LoadFromFile('c:\my.bmp');ADOQuery1.Post;

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.