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

Прочее

Компания Embarcadero продлила срок действия своего специального предложения. До конца II-го квартала2013-го года продукты линии XE4 можно приобрести на 10% дешевле.

Цены с учетом скидки приведены здесь.

FAQ по лицензированию XE4.

Вчера лента Facebook привезла ссылку на новый бесплатный инструмент от  DevArt.

Online SQL Formatter. При всей кажущейся функциональной простоте сервис мне очень понравился, и я счел нужным поделиться ссылкой в блоге. Как и следует из названия, Online SQL Formatter просто форматирует SQL, превращая его из невнятного набора символов в читабельный код. При этом имеется около 90 настроек форматирования.

Очень удобно в процессе отладки динамически создаваемых запросов. Вытаскиваем SQL из лога, например так:

SELECT EmployeeID, FirstName, LastName, FirstName + ‘ ‘ + LastName AS Name, Login, Enable, IIF(Enable = 0, ‘-‘,”) as Disable , Rate FROM tblEmployees WHERE Enable = 1 AND EmployeeID IN (SELECT EmployeeID FROM tblEmployeeLicenses WHERE AppID IN (SELECT AppID FROM tblApps WHERE AppName = ‘ATRClient’)) ORDER BY Login

Вставляем в поле ввода сервиса и выполняем форматирование.

На выходе получаем форматированный код.

 

SELECT
  EmployeeID,
  FirstName,
  LastName,
  FirstName + ' ' + LastName AS Name,
  Login,
  Enable,
  IIF(Enable = 0, '-', '') AS Disable,
  Rate
FROM tblEmployees
WHERE Enable = 1 AND EmployeeID IN (SELECT
  EmployeeID
FROM tblEmployeeLicenses
WHERE AppID IN (SELECT
  AppID
FROM tblApps
WHERE AppName = 'ATRClient')
)
ORDER BY Login

Заодно и синтаксис проверит, при чем, сделает это лучше и наглядней чем тот же MS Access.

Рекомендую.

К слову, лично я был бы не против получить API для доступа к сервису из приложений.

В релизном билде RAD Studio XE4  отсутствовал InterBase Express (IBX), что вызвало множество вопросов. Насколько я понял, это объясняется тем, что перед самым выпуском Embarcadero решила исправить критический баг. Никаких изменений в лицензии или чего-то подобного не произошло.

Вчера InterBase Express стал доступен для зарегистрированных пользователей: http://cc.embarcadero.com/item/29408.

Доступно для пользователей всех редакций, кроме Starter.

Инструкция по инсталляции в комплекте.

 

Компания Embarcadero приглашает разработчиков на “Запуск RAD Studio XE4“.

Встреча с разработчиками состоится 23 мая в Москве, 4 июня в Киеве и 6 июня в Минске.

Специально приглашены разработчики Embarcadero, которые принимали непосредственное участие в создании продукта.  Вы увидите не только живые демонстрации новых возможностей из первых рук, но и сможете поучаствовать в дискуссии по поводу планов выпуска RAD Studio под Android.

В повестке дня..

  • Новейшие возможности поддержки мульти-платформенной разработки;
  • Быстрая разработка бизнес-приложений для компьютеров, ноутбуков, планшетов и мобильных устройств, включая MAC, iPhone, iPAD;
  • Принципы использования единой базы исходного кода для различных устройств;
  • Новую компонентную базу FireMonkey 3;
  • Технология создания приложений для iOS с помощью Delphi;
  • Варианты реализации доступа к корпоративным данным с мобильных устройств;
  • … и многое другое, что приятно удивит пользователей «классических» версий RAD Studio.

 

Участие бесплатно.

Регистрация обязательна!

Дополнительная информация(в настоящее время ссылка не доступна).

Читать далее

На прошлой неделе я стал обладателем Enterprise редакции FastReport. И в сегодняшнем посте хочу немного рассказать о возможностях старших редакций флагмана мирового отчетостроения.

Прежде всего, хочу отметить, что продукт великолепно документирован. Особенно приятно, что имеется  документация и на русском  языке. Три объемных руководства (пользователя, программиста и разработчика) дополнены обширным набором примеров, который обеспечивает «лёгкое вхождение» в продукт.

Для многих программистов FastReport стал основным средством построения отчетов в Delphi еще до появления  Embarcadero редакции. Редакция, вошедшая в состав RAD Studio, конечноимеет свои ограничения, но, тем не менее, предоставляет весь тот базовый набор функций, который был у предшественников. Я имею ввиду Rave Report и Quick Report, которые были «родными» для более ранних версий Delphi и C++ Builder. Впрочем, к моменту выхода Delphi XE2 мало кто пользовался этими средствами построения отчетов, по крайней мере, для новых проектов.

В свое время  я, как и многие, оказался непосредственно вовлечен в процесс перевода старого проекта на новую систему построения отчетов. Правда, на тот момент я использовал Basic Edition. Собственно, я уже писал о том, как можно «малой кровью» портировать отчет с Rave на FastReport. К слову, подобным образом поддерживается переход и с других устаревших систем построения отчетов, в частности  Quick Reports и Report Builder.

В этом обзоре я хочу рассказать, что же не вошло в Embarcadero редакцию FastReport.

Итак, кроме редакции, поставляемой в комплекте с Delphi/C++ Builder существует еще четыре варианта комплектации продукта – Basic, Standard, Professional и Enterpriseю Сразу приведу ссылку на сводную таблицу функционала в зависимости от редакции и немного прокомментирую  представленные в ней возможности. Читать далее

В этом посте, как и обещал, немного расскажу об утилите, позволяющей вставлять элементы структуры БД в текст, посредством буфера обмена. Рабочее название 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.

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

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

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

О вебинаре

К сожалению, запись вебинара не удалась по техническим причинам. Здесь никто не виноват, просто произошел сбой. Поэтому я выкладываю ролики, которые я подготовил для вебинара с краткими комментариями, описывающими происходящее. Эти ролики демонстрируют то, как лично я использую ERStudio в работе. Собственно, именно вокруг этого видео и строилась наша беседа с Андреем Совцовым и Всеволодом Леоновым на прошедшем вебинаре. Ролики лучше смотреть в HD качестве.

Первая запись демонстрирует reverse engine рабочей базы с последующим экспортом полученной физической модели в XML формат. Обратите внимание на то, что в результате реверсинга базы была получена как физическая так и логическая модель данных. Это можно использовать для переноса базы на другую платформу.

Об отчетах в ER Studio я уже писал. Инструмент исключительно удобный, и на практике я его активно использую.

И еще один полезный инструмент – сравнение структуры базы.

Но зачем же я делал экспорт в XML формат на первом ролике? Ответ в четвертом фрагменте.

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

Вот что получается.

Буквально до конца недели я планирую сделать развернутый пост, посвященный этой утилите.

Что же касается вебинара, то кроме всего прочего был затронут вопрос об Architect редакции Delphi, в состав которой входит Developer редакция ERStudio, о возможностях полной версии ERStudio и о нише продукта на рынке средств моделирования. Кстати, для тех, кого интересует последний вопрос, привожу ссылку на вышедший буквально на днях документ “ER/Studio vs. ERwin – Discover the Difference in Three Areas Every Data Modeler Must Understand“. Для скачивания требуется авторизация.

Полную редакцию ERStudio можно купить у официальных реселлеров (на сайте версия не последняя, уточняйте у консультантов).

Об акциях Embarcadero

Срок действия специальных предложений Embarcadero истекает 29 марта! В контексте предыдущей темы это хороший шанс получить Architect со значительной скидкой! Кроме того, при покупке Delphi или C++ Builder в редакции Professional вы получите HTML5 Builder бесплатно! Так же до 29-го марта вы сможете сэкономить $100 при покупке FireDAC!

 

Купить 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 руб.

Для покупателей из Украины – все эти продукты представлены на сайте компании DC Link – официального партнера Embarcadero. Пишите, звоните – проконсультирую лично. Кроме того, покупателям Delphi в редакции Professional и выше – подарок от DC Link. Какой пока не скажу для поддержания интриги.

Прочее

Решил сделать отдельную страничку, посвященную софту, который я использую (помимо продуктов Embarcadero). Вот буквально сегодня купил по акции Paragon Partition Manager —  набор утилит для работы с разделами жестких дисков. Must have! Цена просто смешная для такой программы - 389,40 руб. Акция действует до 7 апреля.

Срок действия акций «Architect по цене Enterprise» и «Купи Delphi/C++ Builder Professional и получи HTML5 Builder» продлен до 29 марта 2013.

1. Купите Delphi XE3 или C++Builder XE3 в редакции Professional и получите HTML5 Builder, бесплатно!

Зарегистрируйте ваш продукт Delphi или C++Builder XE3, потом зайдите по ссылке для скачивания продукта HTML5 Builder в течение 14 дней после покупки. Пользователи RAD Studio получают HTML5 Builder автоматически как часть установочного пакета RAD Studio. Предложение распространяется как на новые лицензии, так и на обновления.
Академические лицензии и пакеты из 5 и 10 лицензий в акции не участвуют.

2. Получите редакцию Architect по цене Enterprise при покупке RAD Studio, Delphi или C++Builder XE3!

Вместо того, чтобы купить редакцию Enterprise, приобретите редакцию Architect. Цена на редакции Architect продуктов RAD Studio XE3, Delphi XE3 и C++Builder XE3 снижается до стоимости редакции Enterprise до 15 марта 2013 г. Предложение действительно как для покупки новых лицензий, так и для обновления. Академические лицензии не участвуют в акции.
Детальное описание условий акции приведено на официальном сайте.

Купить 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 руб.

Одной из отличительных особенностей современных IDE является набор инструментов, делающих разработку комфортной. И Delphi здесь не исключение. От версии к версии эта среда разработки “обрастает” новыми полезными инструментами, что не может не радовать. Скажу честно, когда мне приходится запускать Delphi 7 для того, что бы посмотреть какой-нибудь старый проект, я уже испытываю чувство дискомфорта. Многих полезных вещей там попросту не хватает. В последних же версиях Delphi стало появляться столько всего полезного, что некоторые инструменты попросту остались незамеченными. В частности, лично я пропустил появление в комплекте Delphi мощной утилиты для сравнения текста – Beyond Compare. Она не особо афишировалась, и

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

Beyond Compare Lite включен в состав RAD Studio, начиная с версии XE (собственно, утилита доступна и тем, кто покупает Delphi или C++ Builder отдельно). Вызывается она из IDE (Edit | Compare) или путем запуска исполняемого файла BCompareLite.exe, размещенного в каталоге Bin. Лично я вывел иконку  Beyond Compare Lite на рабочий стол и зачастую использую отдельно, не запуская IDE.

Читать далее

Еще один короткий пост-шпаргалка. Те, кто использует FastReport должны знать, что организация многоуровневых отчетов главный-подчиненный производится, если так можно выразиться, естественным образом. Т.е. для создания такого отчета нужно связать исходные источники данных связью Master-Details. Официальная документация FastReport весьма подробно рассказывает как это сделать.

Проблема заключается в том, что у некоторых DataSet‘ов, в частности у TADOQuery, отсутствуют свойства MasterSource и MasterField. Это отнюдь не означает, что с помощью этих компонентов нельзя построить отчет с несколькими уровнями данных. Однако, для  этого необходимо организовать связь Главный-Подчиненный вручную. Вариантов того, как это сделать достаточно много. Один из простейших – обработать событие OnAfterScroll для главного датасета. Например, так:

qryExpenses.Close;
qryExpenses.Parameters.ParamByName(‘EXPCATEGORY_ID’).Value:= qryCategoriesExpCategoryID.AsInteger;
qryExpenses.Open;

Данный вариант вполне устроил FastReport.

Читать далее

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