Блог Александра Божко
Архивы
Рубрики

FireDAC

 

Событие, которое осталось не замеченным.

16 апреля вышел Hotfix for FireDAC for Delphi, C++Builder and RAD Studio XE3.

Зарегистрированные пользователи могут скачать его здесь: http://cc.embarcadero.com/item/29375

Hotfix включает в себя скомпилированные DCU файлы для MAC OS X и Win 64-bit платформ модуля uADStanCipher.pas, который не поставляется вместе с FireDAC, из-за экспортных ограничений (с шифрованием все не просто).

Напомню, что FireDAC доступен обладателям Enterprise, Ultimate и Architect редакций Delphi, C++ Builder и RAD Studio.

Пользователи Professional редакции могут приобрести Пакет дополнений к Delphi XE4 Professional для клиент-серверного подключения FireDAC .

В этом посте, как и обещал, немного расскажу об утилите, позволяющей вставлять элементы структуры БД в текст, посредством буфера обмена. Рабочее название DB2Clipboard.

Зачем это нужно?

Утилита избавляет разработчика от необходимости постоянно обращаться к СУБД при необходимости найти названия поля в определенной таблице. Название поля и другая информация, взятая из структуры БД (тип и размер поля, название таблицы и т.д. ),  могут быть вставлены в код приложения буквально с помощью одного нажатия кнопки мыши. При этом, в качестве редактора кода может быть использован не только Delphi, а в любой редактор.

Собственно, это развитие того приложения, о котором я писал больше года назад.

Как это работает?

В данной версии программы, структура базы данных загружается из  .xsd файла, который генерируется с помощью ERStudio (см. предыдущий пост). В отличие от предыдущего варианта данная версия может работать практически с любой СУБД. Минус, собственно заключается в том, что требуется ERStudio. Как и раньше на экране висит StayOnTop форма в левой части которой находится список таблиц (представлений, запросов и т.д.), а справа – набор кнопок, каждая из которых соответствует полю в соответствующей таблице. То, как это выглядит на практике показано на видео. Рекомендую смотреть в HD в полноэкранном режиме.

 Что сделано?

В настоящей версии поддерживаются скрипты. Т.е. можно вставить не только непосредственно имя поля, но и некий текст сгенерированный на основе данных модели. Например, если активирован скрипт

FieldByName(‘<fn>’).as<ft>;,

то вместо <fn> в текст будет вставляться имя поля, а вместо <ft> – его тип. Так же реализована поддержка циклического перебора полей и имитация нажатия некоторых клавиш (Enter, Home, Tab и т.д.).

Как это реализовано?

Поразмыслив, я решил полностью переработать структуру программы. Написал несколько классов.

TmbsTimer = class(TTimer)
 {skip}

 public
  property fgw: HWND read Ffgw write SetFGW;
end;

TmbsTableInfo = class
{skip}
 public

 constructor Create;

  property TblName: string read GetTableName write SetTableName;
  property FieldList: TmbsFieldList read GetFieldList  write SetFieldList;
end;

TmbsTableList = class
{skip}
  public
    { public declarations }
    constructor Create;
    procedure Add(pTable: TmbsTableInfo);
    procedure Delete(Index: Integer);
    function Count: Integer;
    procedure ImportXML(FileName: string);
    procedure Clear;

    property Tables[Index: Integer]: TmbsTableInfo read GetTable; default;
end;

TmbsFieldInfo =  class
{skip}
  public
  property FldName: string read GetFLDName write SetFLDName;
  property Table: TmbsTableInfo read GetTable write SetTable;
  property FldSize: integer read GetFldSize write SetFldSize;
  property FldType: string read GetFldType write SetFldType;
  property Checked: boolean read GetChecked write SetChecked;

end;

TmbsFieldList = class

{skip} 

  public
    { public declarations }
    constructor Create;
    procedure Add(pField: TmbsFieldInfo);
    procedure Delete(Index: Integer);
    function Count: Integer;
    property Table: TmbsTableInfo read GetTable write SetTable;
    property Fields[Index: Integer]: TmbsFieldInfo read GetField; default;
  published
    { published declarations }
end;

  TmbsCustomButton = class(TBitBtn)
{skip}
  public
    { Public declarations }
    procedure Click; override;
    property FGW: HWND read FFGW write SetFGW;
    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    destructor Destroy; override;
  published
    { Published declarations }
    property InsertedText: string read GetInsertedText write SetInsertedText;
    property Timer: TmbsTimer read GetMbsTimer write SetmbsTimer;
  end;

  TmbsTblButton = class(TmbsCustomButton)
{skip}
  public
    { Public declarations }
     function ExpressionToInsString(AEpression: string): string;
     procedure Click; override;

  published
    { Published declarations }
    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Expression: string read GetExpression write SetExpression;
    property DefExpressionIndex: integer read GetDefExpressionIndex write SetDefExpressionIndex;
    property Table: TmbsTableInfo read GetTable write SetTable;
  end;

  TmbsFieldButton = class(TmbsCustomButton)
{skip}
  public
    { Public declarations }
    class function ReplaceTblTags(s: string; aTbl: TmbsTableInfo): string; static;
     function ExpressionToInsString(AEpression: string): string;
     procedure Click; override;
  published
    { Published declarations }

    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Field: TmbsFieldInfo read GetField write SetField;
    property InsertType: TmbsFldInsType read GetInsertType write SetInsertType;
    property Expression: string read GetExpression write SetExpression;
    property DefExpressionIndex: integer read GetDefExpressionIndex write SetDefExpressionIndex;
  end;

  TmbsFieldCheckBox = class(TcheckBox)
{skip}

 published
    { Published declarations }

    constructor Create(AOwner: TComponent);  override; //; Fld: TmbsFieldInfo
    property Field: TmbsFieldInfo read GetField write SetField;

  end;

Выше приведены фрагменты описания классов. Вкратце, что для чего…

  • TmbsTimer – таймер, который “слушает” систему на предмет текущего окна, хэндл которого и хранит в свойстве fgw.
  • TmbsTableInfo – информация о таблице, содержит название таблицы и список полей.
  • TmbsTableList – список таблиц. Кроме обычных для списка методов содержит метод ImportXML.
  • TmbsFieldInfo- информация о поле
  • TmbsFieldList- список полей
  • TmbsCustomButton- базовый класс, реализующий кнопку, которая вставляет текст в активное окно (то самое, хэндл которого хранит таймер).
  • TmbsTblButton – кнопка, вставляющая информацию о таблице.
  • TmbsFieldButton – кнопка, вставляющая информацию о поле.
  • TmbsFieldCheckBox- чекбокс, для выбора полей, обрабатываемых в выражении.

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

Что дальше?

Естественно, самым логичным шагом было бы обеспечить прямой импорт структуры непосредственно из БД. Что я и планирую сделать используя FireDAC.

Кроме того, работа над эргономикой. Например, фильтр таблиц, “горячие клавиши” и т.д.

А можно посмотреть?

Все что сделано в рамках данного проекта, я делал для себя. Пока я не имею представления о дальнейшем его развитии. Возможно, это будет полностью бесплатное приложение, возможно коммерческое, а возможно очередной “мёртвый проект”. Я не спешу выкладывать его в открытый доступ, но обещаю, что все читатели моего блога при желании смогут получить программу бесплатно. Те, кому не терпится посмотреть как это работает могут написать сюда и получить ссылку на приложение в том виде, в котором оно есть.

Условно “новый” продукт компании EmbarcaderoFireDAC можно использовать не только Delphi XE3, но и с предыдущими версиями Delphi. Для тех, кто не в курсе напоминаю, что покупая Delphi, C++ Builder или RAD Studio XE3, вы бесплатно получаете  соответствующие продукты всех версий, начиная с Delphi 7. Если вам необходимо установить FireDAC  на Delphi предыдущей версии, то можно воспользоваться директивой компилятора: /IDE:<обозначение версии Delphi>. Например, для установки FireDAC на Delphi XE2 следует вызвать директиву /IDE:DXE2.

Альтернативный вариант – использовать ручную установку (об этом детально написано в FAQ продукта).

Сегодня компания Embarcadero официально представила библиотеку доступа к данным FireDAC, позволяющую осуществлять доступ к InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix из Delphi и C++ Builder. Владельцы Delphi или C++ Builder XE3 в редакциях Enterprise, Ultimate или Architect могут получить продукт бесплатно! Владельцы Professional редакции смогут приобрести FireDAC Client/Server Pack отдельно по цене $399 (прямой ссылки пока нет, уточняйте у консультантов).

Официальную видео презентацию продукта сделал Марко Канту:

Русский перевод ролика и страницы продукта появится в ближайшее время.

Вы так же можете ознакомиться с FAQ по продутку.

Владельцы старших редакций Delphi или C++ Builder XE3 могут скачать  и установить FireDAC прямо сейчас.

Так же напоминаю, что буквально через две недели истекает срок акции, по условиям которой вы можете приобрести редакцию Architect по цене Enterprise при покупке RAD Studio, Delphi или C++Builder XE3!

Купить on-line (продукты, на которые распространяется акция):

Delphi XE3 Professional »  HTML5 Builder в подарок (9017,09 руб.)
C++Builder XE3 Professional »HTML5 Builder в подарок (9017,09 руб.)
Delphi XE3 Architect » 60284,84 руб.

C++Builder XE3 Architect » 60284,84 руб.

RAD Studio XE3 Architect » 84410,84 руб.

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика