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 корпорация 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)
можно обеспечить доступ к виртульным дирректориям и их содержимому (файлам)
до уровня байта, за счет чего трафик сети будет сведен до минимума.
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 |
Такое представление данных даже в случае использования настольных СУБД весьма удобно просто потому, что оно решает общеизвестную проблему нехватки места на форме при наличии нескольких связанных таблиц. Единственное, о чем при этом следует позаботиться, это вызов метода ApplyUpdates компонента TClientDataSet (например, в обработчике события, связанного с выбором какого-либо пункта меню или с нажатием на кнопку):
Decision Grid позволяет динамически отображать многомерные данные в наилучшем виде с точки зрения пользователя для обеспечения принятия им управленческого решения.
Генератор отчетов QuickReports позволяет визуально разрабатывать формы
отчетных документов. Отчеты строятся с разделами, которые могут содержать
названия, страничные заголовки и нижние колонтитулы, многочисленные наборы
детальных строк, итоги, заголовки групп и нижние колонтитулы. Отчеты из
любого DataSource, включая TTable и TQuery, или даже из массивов или списков
могут быть просмотрены с помощью режима Preview. В процессе генерации отчета
могут выполняться вычисления итогов, подсчета полей автоматически. Счетчики
могут обнуляться на уровне групп. В QuickReport добавлены компоненты TQRTextFilter,
TQRHTMLFilter и TQRCSVFilter, позволяющие сохранять отчеты не только в
оригинальном формате *.qrp, но и в виде текстового файла, файла формата
HTML или CSV (Comma Separated Value).
Открытая архитектура 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.
В палитре компонентов теперь имеется отдельная страница 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 создаются примерно так же.
Открытый стандарт XA допускает транзакции серверов (как например, Oracle) для связи с MTS менеджером ресурсов. Теперь приложение клиента может получить однократное уведомление об успешном или неудачным выполнением пакета транзакций, которые передаются серверами в разнородной среде.
Большее число пользователей в сети могут получить доступ к серверам баз данных и быстрее выполнить анализ данных, благодаря поддержки в Delphi пула ресурсов. Пул ресурсов обеспечивает более быстрое соединение и сокращает сетевую загрузку, что увеличивает скорость выполнения приложений и уменьшает время откликов баз данных.