"Виртуальная библиотека Delphi" - читать интересную книгу автора

Базы данных — прочие SQL сервера

1. Как осуществляется доступ к базе данных из Delphi?

Сначала вы должны в утилите BDE Configuration Utility (bdecfg или bdecfg32) определить псевдоним для базы данных, с которой вы хотите работать. Это позволит вам избежать написания сложного пути к базе данных в вашем приложении; вы теперь только ссылаетесь на псевдоним. Затем вы создаете минимум три объекта на форме: TTable или TQuery, который фактически общается с базой данных через псевдоним и получает данные; объект TDataSource, который связывает данные и визуальные компоненты; по крайней мере один компонент, отображающий данные.

Если вы потратили несколько часов, чтобы заставить все это работать, но ничего не получилось, попробуйте установить свойство Active у TTable или TQuery в True. Это откроет таблицу в базе данных. 


2. Какие серверы данных поддерживает Delphi?

Delphi (в старших вариантах поставки) напрямую работает с Oracle, Informix, InterBase, DB/2, Sybase, MS SQL Server. Вы можете использовать ODBC драйверы третьих фирм, чтобы работать с любым сервером. Наиболее известные производители качественных ODBC драйверов:

• InterSolv (www.intersolv.com)

• Visigenic Software (www.visigenic.com)

Есть специализированный вариант Delphi 2.0 — Delphi/400, который ориентирован исключительно на работу с AS/400.


3. Cуществует ли способ работать из Delphi с AS/400, исключая ODBC?

В состав Delphi 1.0 не входит, но доступен отдельно визуальный 16-разрядный компонент компании Gerald Limited.

Есть специализированный вариант Delphi 2.0 - Delphi/400, который ориентирован исключительно на работу с AS/400.


4. Cуществует ли способ работать из Delphi с Lotus Notes (IBM Notes), за исключением ODBC?

Существует только 16-разрядный линк для Notes. В состав Delphi он не входит (разработан компанией Brainstorm) и поставляется отдельно по каналам Borland. Спрашивайте дилеров Borland.


5. Можно ли создавать с помощью Delphi сетевые приложения не для схемы клиент-сервер, а для схемы с разделяемыми файлами (как, например, в FoxPro)?

Компонент TTable имеет свойство Exclusive; если Exclusive=False, то одну и ту же таблицу могут просматривать и редактировать несколько пользователей. При редактировании таблицы текущая запись автоматически блокируется. Если есть необходимость заблокировать несколько записей или всю таблицу, то для этого придется использовать функции BDE — модуль DBIPROCS (

) или BDE (

). Кстати, существенно, что это можно делать и на Delphi Desktop - отсюда вывод: сетевые приложения (в файл-серверной архитектуре) можно делать и на Delphi Desktop.


6. Можно ли работать при помощи Delphi не с IDAPI — или ODBC-драйверами, а с "родными" API каких-либо СУБД?

Да, можно. Это еще один пример открытости Delphi. В одном из проектов Демо-центра появилась необходимость прямого обращения к API SQL-сервера. Был написан соответствующий интерфейс поверх Borland InterBase API - и все заработало. Аналогично: существуют написанные компоненты для работы с AS/400 и для мэйнфреймов.


7. Какие версии Informix (Online, I-NET) поддерживают SQL Links?

BDE версии до 2.51 поддерживает работу с клиентской частью Informix ESQL/C I*NET 4.x. BDE версии 2.51-2.52 поддерживается ESQL/C I*NET 5.x.

32 SQL Link версии 3.5 и выше поддерживает ESQL/C I*NET 7.x.


8. Как работать с таблицами в виде текстовых файлов (ASCII)?

Информацию об этом вы можете найти в каталоге DELPHI\DOC. Файл называется ASCIIDRV.TXT.


9. Как правильно указать имя сервера Oracle?

Пишите имя по правилам Oracle - перед именем не забудьте поставить @.


10. Что такое транзакции (Transactions)?

SQL database серверы обрабатывают запросы в 'логических единицах работы' которые и называются транзакциями. То есть транзакция - это группа связанных операций (SQL запросов) которые все должны быть выполнены успешно перед тем, как сервер закончит (commit) изменение базы данных. Либо вся это группа будет выполнена, либо нет. Транзакции обеспечивают целостность базы данных ...


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

В Delphi может управлять транзакции так:

1. Implicitly — сам стартует и коммитит транзакции по необходимости, когда программа вызывает метод Post.

2. Explicitly —

 1. StartTransaction, Commit amp; RollBack методы TDatabase.

 2. При помощи SQL запросов через TQuery — это зависит от конкретного SQL сервера.

Неявные (1) транзакции выполняют TTable amp; TQuery.

Для явных (2.1) транзакций требуется TDatabase.

Для явных (2.2) транзакций требуется TQuery.

Важно:

При определении параметров драйвера SQLPASSTHRU MODE - определяет будут ли passthrough SQL (PSQL) amp; стандартные вызовы BDE (BDEC) использовать один и тот же connect к SQL серверу.

Возможные варианты:

1. NOT SHARED — PSQL amp; BDEC используют разные соединения с базой и следовательно влияют (интерферируют) друг на друга также как разные пользователи одной базы (см. Transaction isolation levels)

2. SHARED:

 1. SHARED AUTOCOMMIT — PSQL amp; BDEC используют одно соединение с базой, каждый PSQL запрос автоматически коммитятся.

 2. SHARED NOAUTOCOMMIT — PSQL amp; BDEC используют одно соединение с базой, PSQL запросы коммитятся 'вручную' (способом 2.1).

Еще важнее:

Если Вы все-таки решили управлять транзакциями при помощи SQL запросов через TQuery, то SQLPASSTHRU MODE должно быть NOT SHARED, иначе Implicit amp; Explicit транзакции могут влиять друг на друга и привести к 'неожиданным результатам'!


12. Использование формата Access 2.0 в Delphi.

Подробное описание подключения:

• Откройте Windows Control Panel, откройте икону ODBC.

• Добавьте драйвер Access в список доступных, если он не указан в списке текущих драйверов.

• Укажите какое-либо имя в "Data Source Name".

• Выберите файл БД кнопкой Select Database.

• Если вы хотите создать новый — выполните пункт Create Database  

• Запустите Database Engine Configuration

• Нажмите кнопку New ODBC Driver

• Выберите драйвер типа ACCESS DATA

• В качестве Default Data Source Name выберите предложенное.

• Создайте новый псевдоним в разделе Alias

• Укажите тип драйвера, путь и имя к нужному файлу БД Access.

• Сохраните изменения и закройте Database Engine Configuration

Примечание: избегайте русских названий имен таблиц, использования пробела в именах таблиц, а также русских имен полей в DB Access. 


13. Можно ли при помощи Delphi реализовывать проекты, не имеющие отношения к базам данных? Если да, то имеет ли это смысл?

В таком случае стоит воспользоваться вариантом Delphi Desktop или Developer. Выигрыш по скорости разработки очевидно будет значительным; в частности, разработка интерфейса программы под Windows производится действительно скоростными методами. Хороший пример — Screen Saver для Windows.