Работа с базами данных

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

Поддержка новых версий СУБД и новых типов данных

Благодаря открытому и опубликованному интерфейсу Oracle 8, появляется возможность описывать прямые вызовы Oracle Call функций. Это значительно повышает скорость доступа к данным и отказ от посредника - BDE (Borland Database Engine), но в то же время усложняется прикладное программирование. Академическая работа с базами данных в Delphi ведется через универсальный механизм доступа BDE. Архитектура BDE предусматривает взаимодействие с каждым конкретным источником информации через драйвер (SQLLinks - для серверов баз данных). Delphi 4 Включает 32-битовые SQL Link для Oracle, Interbase, Sybase, МS SQLServer, Informix и DB2. Delphi Client Server Suite включает неограниченную лицензию для редистрибуции любых имеющихся драйверов.

Delphi 4 – единственное решение для масштабирования настольного Access до масштабов предприятия. Высокоскоростные драйверы баз данных для Microsoft Access обеспечивают возможность использовать средства RAD Delphi с наиболее популярной настольной базой данных.

В среде Delphi 4 имеется поддержка для баз данных FoxPro., самой быстрой среды разработки. Разработчики могут создавать приложения с помощью Delphi 4, используя существующие таблицы данных FoxPro и Clipper. Используя набор компонент Apollo, есть возможность полнейшей поддержки старых идеологий программирования данных. Разработчик программного обеспечения в Clippere или FoxPro теперь чувствует себя как «рыба в воде» благодаря этой компоненте. Синхронизация данных из DOS и Windows абсолютно прозрачна.

Для мультимедийных и других приложений, требующих неструктурированные данные, теперь можно работать с многочисленными двоичными объектами, каждый размером до 4GB, загруженными в единственную колонку таблицы базы данных. Поле Большого Объекта (LOB) располагается во внешней среде (файле). Вы можете оптимизировать использование новых двоичных типов, как например на время отложить перекачку LOB поля, пока пользователь не получит весь курсор, а затем уже, используя пакетные процедуры, получать необходимые большие данные. BLOB (Двоичный Большой Объект) является двоичным типом данных, который может использоваться, чтобы загрузить данные любого типа. Для управления документами или системами поиска текста, может быть использован CLOB (Символьный Большой Объект). Вы можете сделать ссылку на внешние файлы, отредактированные другими приложениями (как, например, аудио- файлы, AVI, BITMAP, и другие) без дублирования, так как BFILE данные загружаются в файлы операционной системы вне базы данных, что естественно экономит табличное пространство сервера базы данных.

Delphi 4 позволяет создавать высокоскоростные драйверы для доступа к базам данных. Native драйверы предлагают большие возможности, чем ODBC. Driver Development Kit (DDK) позволяет создавать Native драйверы для BDE Borland, которые дополняют новую Remote DataSet технологию. Native драйверы, создаваемые при помощи DDK, могут использоваться со всем семейством продуктов Borland, включая IntraBuilder, Borland C++ Builder, Delphi и Jbuilder.

Новый SQL Link драйвер (включенный только в Client/Server и Enterprise редакцию Delphi) теперь поддерживает доступ к V2 и V5 DB2 серверам.

Поддержка новых расширений Oracle8

Библиотека Borland Database Engine (BDE) теперь поддерживает и Oracle8, при этом поддерживаются новые расширения Oracle 8.04 Entrprise edition, такие как абстрактные типы данных (ADT - Abstract Data Type), массивы, ссылки, вложенные таблицы. В соответствии с этим созданы новые классы объектов - потомков TField: TADTField, TReferenceField, TDataSetField, TArrayField. При настройке алиаса BDE необходимо указать поддержку Object Mode=True, так же в компонентах Ttable, Tquery появилось свойство ObjectView которое устанавливается в True при работе с объектными типами данных .

В процессе подготовки Oracle8 корпорация Oracle преобразовала свою СУБД из реляционной в объектно – реляционную. Система типов в Oracle была расширена для обеспечения поддержки как объектов, так и наборов (Collections) объектов. Тип OBJECT предоставляет возможность определять класс от которого в дальнейшем будут наследоваться экземпляры объекта. Абстрактные Типы Данных (ADT) позволяют определять собственные типы данных или бизнес-объекты, следуя бизнес-правилам. Эти типы данных могут включать существующие скалярные типы данных (как например, целые и даты), а также обеспечивают вложенность других ADT. Вы можете реализовать бизнес-объекты, которые могут загружаться в базу данных и извлекаться оттуда, когда это необходимо. Эти бизнес-объекты могут представлять собой людей, data warehouses, пункты оборудования, адреса, заказы, счет-фактура, или что-то еще, что определено в процедурах. Важно, что вновь созданный тип данных может быть возвращен в клиентское приложение из PL/SQL процедуры, в виде Result значения, элементом или наборои элементов VARRAY массива, а также в виде множества строк, одним из атрибутов которых будет выступать ADT, как значение поля. Создать таблицу в Oracle c Объектным типом данных можно следующим образом:

CREATE OR REPLACE TYPE "IGOR"."ADRES" AS OBJECT
(
STREET VARCHAR2(40),
GOROD VARCHAR2(30),
SHTAT VARCHAR2(20),
IND VARCHAR2(11)
);

CREATE OR REPLACE TYPE "IGOR"."PERSON" AS OBJECT
(
NAME VARCHAR2(40), FAMIL VARCHAR2(31),
ADR IGOR.ADRES, --Тип объект
DATA DATE,
--Описываем методы класса
MEMBER FUNCTION VOZRAST (SELF IN IGOR.PERSON) RETURN NUMBER,
PRAGMA RESTRICT_REFERENCES (VOZRAST,WNDS,WNPS),
--Метод MAP будет принимать участие в сортировках (ORDER BY)
MAP MEMBER FUNCTION SORTIROVKA (SELF IN IGOR.PERSON) RETURN VARCHAR2, PRAGMA RESTRICT_REFERENCES (SORTIROVKA,WNDS,WNPS,RNDS,RNPS)
);

А теперь реализация методов:

CREATE TYPE BODY "IGOR"."PERSON" IS
member function vozrast return number as
begin
return (trunc(to_number(sysdate-data)/365, 0));
end;
map member function sortirovka return varchar2 as
begin
return name||' '||famil ;
end;
END; /*type body*/

Создаем таблицу, одим из полей которой будет объект класса PERSON:

CREATE TABLE shtat
(kod NUMBER PRIMARY KEY,
person_data person, --Тип поля - объект
data DATE
);

Как видно из примера в качестве поля таблицы выступает объект класса PERSON, у которого кроме свойств присутствует и метод vozrast, который «оживляет» таблицу при выполнении команды SQL – SELECT.

Для извлечения данных из такой таблицы в свойтве SQL объекта класса Tquery необходимо установить примерно следующий запрос:

SELECT p.kod, p.person_data.famil, p.person_data.vozrast() from sotrudnik p;

Или

select * from shtat;

В этом случае DBGrid в Delphi будет выглядить следующим образом:

Как видно из рисунка, теперь реализованы в DBGrid подчиненные заголовки. Команды DML Oracle 8 обновляют поля - объекты с помощью соответствующих конструкторов класса.
Таким образом все колонки с типами данных, суммарный размер которых превышает 255 байт, представляются как псевдо BLOBS тип данных. Этот тип воспринимает как Query объект, через свойство Active:=True, так и объект класса TstoredProсedure.

В Delphi 4 можно строить новые типы приложений, которые будут точной моделью организации бизнеса при помощи VARRAY-поддержки. Обычный скалярный тип и новые объектно-реляционные данные могут храниться с беспрецендентной гибкостью благодаря наличию типа VARRAY. Он позволяет запоминать списки бизнес-объектов, которые могут ссылаться на дополнительные ADT.

REFs ускоряют доступ к объектно-реляционным данным. Ссылки на вложенные объекты запоминаются в объектах этого типа данных. Когда указатель REF разрешается, ссылочные объекты переводятся в пространство объекта клиента для просмотра и модификации (pinned). Ссылка на объект – это глобальный уникальный идентификатор, который в Oracle назвается Object ID. Эти уникальные идентификаторы обеспечивают просмотр REF-указателей по требованию (известному как объектная навигация (object navigation) или погоня указателя (pointer chasing). Недостатком использования ссылок на объекты является отутствие контроля ссылочной целостности, так как при использовании ссылок мы не можем наложить на такие поля ограничения FOREIGN KEY. Возникают зависшие ссылки, однако Delphi c этим справляется благодаря строгому описанию типов в Oracle 8.
В Delphi 4 можно создавать ссылки на файлы, внешние по отношению к базе данных, что исключает дублирование больших файлов (как например, документы), обеспечивая более гибкий файловый доступ, и уменьшая потребность в памяти. Тип данных FLOB хранит в таблицах базы данных только ссылки на уникальные идентификаторы файлов, корые раположены в физических областях дискового пространства. Эти области создаются с помощью команды CREATE DIRRECTORY при наличии соответствующих привилегий у пользователя. С помощью компоненты Delphi 4 TstoredProcedure и пакетных процедур Oracle 8 (пакет DBMS_LOB) можно обеспечить доступ к виртульным дирректориям и их содержимому (файлам) до уровня байта, за счет чего трафик сети будет сведен до минимума.

Поддержка вложенных таблиц

Компонент TDBGrid теперь может отображать вложенные таблицы. Вложенные таблицы допускают повторную группировку информации, которая должна загружаться непосредственно в существующую таблицу, не требуя ввода, который должен генерироваться для каждой строки.
Порядок создания вложенной таблицы Oracle 8:
Cоздаем тип, описывающий поля вложенной таблицы, в качетстве поля может быть и любой скалярный тип данных Oracle, но в этом случае вложенная таблица будет содержать только одно поле:

CREATE OR REPLACE TYPE "IGOR"."PROEKT" AS OBJECT
(
KOD NUMBER(11, 0),
NAME VARCHAR2(100),
CONTEXT VARCHAR2(1000),
CTOIMOST NUMBER(15, 2)
);
Создаем табличный тип (Object Table )
CREATE TYPE "IGOR"."PROEKTS" AS TABLE OF IGOR.PROEKT;

Создаем таблицу, одним из полей которой будет вложенная таблица

CREATE TABLE "IGOR".otdel
(
kod NUMBER PRIMARY KEY,
name VARCHAR2(30),
proekt IGOR.PROEKTS NULL
) NESTED TABLE "PROEKT" STORE AS proekts_table_otdel;

После создания такой схемы приступим к разработке клиентского приложения. На форму выкладываем компоненты Ttable и ТnestedTable. Первую компоненту связываем с таблицей OTDEL, а вторую с соответствующим полем типа DataSet. Отношение мастер-деталь готово. Выкладываем DBGrid и DataSource, производим настройку свойств и получилось приложение:

При двойном щелчке мышкой по полю Proekts активизируется дополнительное окно для просмотра и редактирования вложенной таблицы. Измененные данные кэшируются на клиентской машине и с помощью ApplyUpdates и Commit фиксируются на сервере.
Доступ к данным NestedTable можно осуществить и через обычные DML команды, используя объектное расширение языка SQL Oracle 8. Собственно эти команды и необходимо прописать в компоненте UpdateSQL. Серьезным недостатком вложенной таблицы является отсутствие возможности накладывать на нее ограничения первичных ключей.

Имеются функции для определения количества вложенных строк и манипулирования ими. Для иллюстрации этой возможности воспольуемся таблицами customer.db, orders.db и items.db, поставляемыми вместе с Delphi. Поместим на форму три компонента TTable, три компонента TDataSourse, один компонент TClientDataSet и один компонент TProvider. Установим следующие свойства этих компонентов:
Компонент Свойство Значение
DBGrid1 DataSource DataSource3
DBNavigator1 DataSource DataSource3
Table1 DatabaseName 'DBDEMOS'
TableName 'customer.db'
Active True
DataSource1 DataSet Table1
Table2 DatabaseName 'DBDEMOS'
TableName 'orders.db'
IndexFieldNames 'CustNo'
MasterFields 'CustNo'
MasterSource DataSource1
Active True
DataSource2 DataSet Table2
Table3 DatabaseName 'DBDEMOS'
TableName 'items.db'
IndexFieldNames 'OrderNo'
MasterFields 'OrderNo'
MasterSource DataSource2
Active True
Provider1 DataSet Table1
ClientDataSet1 ProviderName 'Provider1'
Active True
DataSource3 DataSet ClientDataSet1

Сами таблицы формата Paradox, естественно, не поддерживают поля, содержащие вложенные таблицы, но такие поля поддерживает компонент TClientDataSet со страницы MIDAS палитры компонентов. Связав его с компонентом Table1 посредством компонента Provider1, мы получим набор данных, содержащий поле Table2 типа TDataSetField, а внутри вложенной таблицы - поле Table3 того же типа:

Такое представление данных даже в случае использования настольных СУБД весьма удобно просто потому, что оно решает общеизвестную проблему нехватки места на форме при наличии нескольких связанных таблиц. Единственное, о чем при этом следует позаботиться, это вызов метода ApplyUpdates компонента TClientDataSet (например, в обработчике события, связанного с выбором какого-либо пункта меню или с нажатием на кнопку):

Если не использовать этот метод, данные будут сохраняться только в кэше, которым фактически и является компонент TClientDataSet, а не в самих таблицах.

Новый генератор запросов - SQL Builder

В Delphi 4 в качестве построителя запросов используется SQL Builder, уже знакомый пользователям Visual dBase 7 и C++Builder 3. Он позволяет создавать и выполнять запросы, редактировать созданные SQL-предложения, использовать вычисляемые поля и связи между таблицами, основанные на выражениях. Сгенерированный запрос можно отредактировать вручную, и все внесенные изменения будут отображены в дизайнере запросов. SQL Builder представляет следующие возможности:
· Генерирует и грамматически разбирает SQL операторы.
· Поддерживает вложенные запросы.
· Динамически изменяет форматы строк.
· Позволяет задавать строки без кавычек.
· Обеспечивает обновление данных.
· Позволяет пользователям легко соединять и манипулировать многочисленными таблицами базы данных.
Рис. SQLBuilder
Рис. Редактор запросов
Возможен также просмотр результатов запроса и копирование полученного набора данных в буфер обмена.
Рис. Выполнение запроса и просмотр результата в SQL Builder
Отметим, что скопированный в буфер обмена текст легко преобразуется в таблицы текстовых процессоров (например, MS Word 97).

Новые возможности генерации отчетов

В новый компонент Delphi 4 DecisionCube заложена более мощная система поддержки принятия решений для многомерного анализа данных. Drill Down, Pivot и Aggregation предоставляют новые возможности визуального представления данных для более полного анализа.

Decision Grid позволяет динамически отображать многомерные данные в наилучшем виде с точки зрения пользователя для обеспечения принятия им управленческого решения.

Генератор отчетов QuickReports позволяет визуально разрабатывать формы отчетных документов. Отчеты строятся с разделами, которые могут содержать названия, страничные заголовки и нижние колонтитулы, многочисленные наборы детальных строк, итоги, заголовки групп и нижние колонтитулы. Отчеты из любого DataSource, включая TTable и TQuery, или даже из массивов или списков могут быть просмотрены с помощью режима Preview. В процессе генерации отчета могут выполняться вычисления итогов, подсчета полей автоматически. Счетчики могут обнуляться на уровне групп. В QuickReport добавлены компоненты TQRTextFilter, TQRHTMLFilter и TQRCSVFilter, позволяющие сохранять отчеты не только в оригинальном формате *.qrp, но и в виде текстового файла, файла формата HTML или CSV (Comma Separated Value).

Рис. Создание отчета с возможностью сохранения данных в формате HTML
Рис. Отчет сохраненный в формате HTML при просмотре через броузер

Публикация данных в Web

Открытая архитектура Delphi и поддержка DLL обеспечивает высокую призводительность при создании прикладных разработок для internet. Приложения для WebServer создаются в виде DLL, которая связывает их непосредственно по ISAPI и NSAPI с серверами Microsoft и Netscape соответственно.

Для того, чтобы упростить разработку Internet теперь имеется WebBridge, который позволяет разработчикам программировать на общем API как для NSAPI так и ISAPI. Эта гибкость защищает код от проблем, связанных с конкуренцией стандартов Internet. WebBridge позволяет сконцентрировать внимание разработчика на осуществлении деловых решениях независимо от внутреннего web-сервера.

WebDispatcher – компонент, ответственный за обработку событий в Web Server Application. WebDispatcher позволяет работать с существующим запросами (query) и таблицами (table) при разработке CGI и HTML приложений. Это позволяет воспроизводить содержание на web с теми же навыками в разработке клиент/серверных приложений.

Web-модули централизуют отправку запросов web-клиента, ответы на запросы, и создают HTML страницы. Эти web-специфические действия объединены с возможностью доступа к данным и бизнес-правилами. WebModule визуально управляет многочисленными запросами, приходящими результатами работы web под-site’ов с клиент/серверной функциональностью в web.

Имеется возможность превратить любую форму Delphi 4 в ActiveForm. ActiveForms - ActiveX Controls, которые используют формы Delphi как контейнеры для других Delphi компонентов. ActiveForms публикуют ActiveX свойства и type librarу для высокоскоростного взаимодействия с другими средствами разработки, например Internet Explorer, Visual Basic, Optima или PowerBuilder, или для использования этих форм в Internet. Delphi ActiveForms и Remote Data Broker помогают создавать ультра-тонких и zero-configuration клиентов в web.

Delphi 4 использует ActiveX архитектуру, чтобы легко разворачивать тонкого-клиента, (zero-configuration приложение) в web, этим самым уменьшая стоимость конфигурации программного обеспечения и дистрибуции. Web Deployment использует стандартные прикладные механизмы Microsoft поставки (CAB File delivery) и инфраструктуру web для распространения приложений большому числу пользователей в Internet, Intranet в масштабах предприятия.

В Delphi 4 имеется DB Web Application Wizard, позволяющий автоматизировать создание приложения для публикации данных в Internet.

Рис. Выбор компоненты DB Web Application Wizard
Рис. Установка типа приложения
Рис. Выбор источника данных
Рис. Выбор публикуемых полей
Рис. Определение заголовка и ввод дополнительного текста
Рис. Результат генерации
Рис. Установка свойства Action компонента TWebModule
После того, как все шаги пройдены, можно скомпилировать приложение и затем запускать его с помощью любого web-броузера.
Рис. Результат выполнения созданного приложения
Delphi 4 обеспечивает разработку эффективных прикладных модулей, которые могут быстро и легко распространяться через Intranet большому числу пользователей. Delphi 4 позволяет создавать приложения с Packages, уменьшая размер самого приложения. Packages при этом как правило остаются неизменными. Packages являются уникальной технологией компиляции, которая дает разработчикам возможность многократно использовать скомпилированные части без потери эффективности при их исполнении. Приложения с Packages используют настраиваемую прикладную среду, которая поставляется и конфигурируется один раз, уменьшая как сложность этой операции, так и потребность в дополнительных ресурсах при дистрибуции.

Создание многозвенных систем

Возможности создания многозвенных информационных систем в Delphi 4 существенно расширены по сравнению с прежней версией.

В палитре компонентов теперь имеется отдельная страница MIDAS, содержащая компоненты, используемые в серверах приложений и "тонких" клиентах, в частности, новые компоненты TCorbaConnection, TDCOMConnection, TSocketConnection, TOLEnterpriseConnection (последние три обладают свойством LoginPrompt, поддерживающим аутентификацию пользователя). В репозитарии объектов имеется соответствующая страница Multitier, содержащая генераторы соответствующих типов приложений.

MIDAS позволяет создавать распределенные приложения с тонким клиентом, которое легче поддерживать, модифицировать и корректировать через расширенную поддержку связи master-detail и вложенных таблиц. Полная информация реляционной базы данных, включая табличные структуры может распределяться по тонким клиентам без написания кода. Обновление всех данных осуществляется автоматически.

Серверы MIDAS теперь поддерживают открытую стандартную архитектуру CORBA, обеспечивая взаимосвязь работающих серверов приложений на различных платформах. Имеется больший выбор для серверов приложений с CORBA, связываемых с тонким клиентом.

MIDAS существенно ускоряет получение результатов клиентом, позволяя пользователю сразу просматривать простые данные, задерживая вывод blob-данных до завершения чтения других данных, или делая это только по требованию пользователя.

Ответом на требования разработки мобильных и не связанных постоянно с данными приложений баз данных является поддержка операций с отключенной связью с базой данных MIDAS. Все изменения в данных, включая добавления, удаления и модификации автоматически прослеживаются в dataset. Одношаговый процесс ресинхронизации автоматически оперирует с master-detail данными.

MIDAS распространяет приложения с тонким клиентом с минимальным сетевым трафиком. Эффективность возрастает при использовании низкоскоростных модемов или сетях, подобных Internet. MIDAS использует для связи только открытые и существующие стандарты, подобные TCP/IP, CORBA и DCOM.

Создание многозвенной системы, где сервер приложений обеспечивает доступ к данным, по-прежнему представляет собой несложный процесс.

После выбора соответствующей пиктограммы (например, Remote Data Module) из репозитария объектов и ввода характеристик соответствующего COM-объекта получим удаленный модуль данных, в который можно поместить компоненты доступа к данным.

Рис. Главная форма и модуль данных сервера приложения

Далее следует экспортировать компоненты доступа к данным из модуля данных:

Рис. Библиотека типов удаленного модуля

После этого можно скомпилировать сервер приложений и приступить к созданию "тонкого" клиента. С этой целью можно добавить в имеющуюся группу проектов еще один проект (если разработка клиента ведется на том же компьютере, где создавался сервер приложений), либо просто создать новый проект или активную форму (в случае "тонкого" клиента в виде ActiveX) и поместить туда какой-либо компонент доступа к удаленному серверу (например, TSocketConnection). Для осуществления удаленного доступа с помощью TSocketConnection следует запустить на том компьютере, где содержится сервер приложений, Borland Socket Server. Затем следует установить свойства Host и ServerName равными имени компьютера и удаленного модуля данных (в формате <имя исполняемого файла>.<имя удаленного модуля данных>) соответственно. Далее можно поместить на форму компонент TClientDataSet, связать его с компонентом TSocketConnection и выбрать значение свойства ProviderName из выпадающего списка. Теперь можно помещать на форму компоненты для отображения данных (например, создав объекты TFields и переместив их на форму методом drag-and-drop из списка полей). Таким образом, "тонкий" клиент готов.

«Ложка дегтя» – MIDAS не поддерживает на прямую изменения таблиц с новыми BLOB и CLOB данными. Для изменения таких таблиц необходимо воспользоваться «ручным способом», а именно событием Tprovider.BeforeUpdateRecord;

Компоненты TsocketConnection, TMIDASConnection, ScktSrvr требуют операционную систему Windows 98 и NT, для Windows 95 необходимо установить WinSock 2 с Microsoft WEB Site.

Помимо соединения клиента с сервером с помощью протокола TCP/IP, возможно использование Microsoft DCOM (Distributed Component Object Model) и соответственно компонента TDCOMConnection, а также технологии OLenterprise (с помощью компонента TOLEnterpriseConnection).

Отметим, что CORBA-серверы и CORBA-клиенты с помощью Delphi 4 создаются примерно так же.

Поддержка Microsoft Transaction Server

Приложения Баз Данных могут теперь выполнить кросс-транзакции с другими серверами баз данных (подобно Sybase, Oracle, и DB2), как в операционных системах Microsoft, так и разнородных средах. Более надежная система транзакций теперь доступна для связи с любой базой данных, непосредственно поддерживающейся BDE Borland с MTS двух фазовым commit.

Открытый стандарт XA допускает транзакции серверов (как например, Oracle) для связи с MTS менеджером ресурсов. Теперь приложение клиента может получить однократное уведомление об успешном или неудачным выполнением пакета транзакций, которые передаются серверами в разнородной среде.

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

Поддержка Java