Количество показов: 3917
Опубликован: 2007-10-02 14:57:35

Изменения и улучшения

1. Добавлен компонент TpFIBScripter.

Он содержит следующие свойства:

property Script:TStrings ; - текст выполняемого скрипта

property Database: TpFIBDatabase; - соединение, в контексте которого будет выполняться скрипт. Cвойство может быть не заданным, если в скрипте присутствует команда CREATE DATABASE.

property Transaction: TpFIBTransaction ; - транзакция, в контексте которой будет выполняться скрипт. Присвоение значения данному свойству также необязательно, поскольку компонент сам может управлять транзакциями.

property AutoDDL: boolean – определяет, будет ли в ходе выполнения скрипта автоматически вызываться Commit после каждой DDL команды.

property Paused: Boolean - позволяет прекратить выполнение скрипта внутри обработчиков событий компонента.

property StopStatementNo возвращает номер команды, на которой пользователь остановил выполнение скрипта.

Методы компонента:

Procedure Parse(Terminator: Char = ';') - выполняет парсинг скрипта, заданный в свойстве Script: TStrings. Аргументом выступает начальный символ-разделитель команд (по умолчанию, точка с запятой).

procedure ExecuteScript (FromStmt: integer = 1); - выполняет скрипт, заданный в свойстве Script: TStrings. Аргументом выступает номер команды, с которой начнется выполнение.

procedure ExecuteFromFile (const FileName: string;Terminator: Char = ';'); - выполняет скрипт, хранящийся во внешнем файле FileName. Загрузка полного текста скрипта в память при этом не производится: файл считывается построчно до формирования очередной команды, команда выполняется, а ее текст удаляется из памяти. Это позволяет выполнять скрипты очень большого объема.

function GetStatement (StmtNo: integer; Text: TStrings): PStatementDesc - позволяет получить информацию о команде по ее номеру (предварительно требуется вызов метода Parse). Функция возвращает ссылку на структуру PStatementDesc, хранящую информацию о команде.

События компонента:

property BeforeStatementExecute: TOnStatementExecute;

property AfterStatementExecute: TOnStatementExecute;

где

TOnStatementExecute = procedure(Sender: TObject; Line: Integer; StatementNo: Integer; Desc: TStatementDesc; Statement: TStrings);

События вызываются, соответственно, до и после выполнения текущей команды.

property OnExecuteError: TOnSQLScriptExecError;

где

TOnSQLScriptExecError = procedure(Sender: TObject; StatementNo: Integer; Line: Integer; Statement: TStrings; SQLCode: Integer; const Msg: string; var doRollBack: boolean; var Stop: Boolean) of object;

Событие происходит в случае, если выполнение текущей команды привело к ошибке.

Пример использования.

var scr: TpFIBScripter;
begin
  scr := TpFIBScripter.Create(nil);
   try
     Scr.Script.Text := MyScriptText;
     Scr.ExecuteScript;
   finally
     scr.Free;
   end;
end;

2. В TpFIBDataSet добавлены новые методы:

procedure DisableMasterSource;
procedure EnableMasterSource;
function MasterSourceDisabled:boolean;

Методы служат для управления временным отключением режима master-detail. Например:

DetailDataSet.DisableMasterSource;
  try
    MasterDataSet.Edit;
    MasterDataSet.FieldByName('ID').asInteger:=NewValue;
    MasterDataSet.Post;
    ChangeDetailDataSetLinkField(NewValue);
  finally
    DetailDataSet.EnableMasterSource;
  end;

при этом детальный датасет не переоткрывается.

3. В TpFIBDataSet добавлено свойство AutoUpdateOptions.UseExecuteBlock: boolean. Свойство работает только при CachedUpdates = True. Если свойство UseExecuteBlock равно True, то вызовы ApplyUpdates и ApplyUpdToBase будут генерировать запросы с использованием конструкции EXECUTE BLOCK. Т.е., изменения в режиме CachedUpdates будут посылаться в базу не для каждой записи отдельно, а «пакетами» по 255 записей.

4. Добавлена поддержка CsMonitor. (автор - Юрий Плотников). Режим поддержки включается директивой "CSMonitor" в FIBPlus.inc (только в полной версии FIBPlus).

5.В TpFIBDatabase добавлен метод procedure ClearQueryCacheList.

6. У полей TFIBDataTimeField и TFIBTimeField добавлено свойство ShowMsec: boolean. Если свойство равно True, в визуальных DB-компонентах будут показываться значения времени с милисекундами.

7. Существенно увеличена скорость работы метода Locate. Новую реализацию можно выключить, убрав директиву {$DEFINE FAST_LOCATE} в файле FIBPlus.inc (только в полной версии FIBPlus).

8. Метод Lookup в TpFIBDateset для поиска нужных значений теперь использует сортировку, если данные отсортированы.

9. Теперь, если вы используете конструкцию Select from procedure в Firebird 2.1, и выходные параметры являются boolean или GUID, то в TpFIBdataSet создаются поля соответствующего типа.

Исправленные ошибки:

1. Поправлена работа с UTF8 полями под InterBase 2007

2. Изменена логика работы метода CancelUpdates в TpFIBDataSet. Раньше, при вызове метода CancelUpdates в режиме CachedUpdates в удаленных записях восстанавливались те значения полей, которые были непосредственно в момент удаления. Т.е., если запись сначала редактировалась, а потом удалялась, то при отмене всех изменений мы получали не оригинальные значения записей, а уже измененные.

3. Поправлены Unicode lookup-поля.

4. Исправлена ошибка в методе TpFIBDataSet.CloneRecord, проявлявшаяся при наличии удаленных записей.

5. Исправлено неправильное позиционирование текущей записи при автоматическом вызове метода Refresh после удаления записи и при включенной опции poRefreshDeleted.

6. Поправлены параметры внутренних транзакций с учетом требований Firebird 2.1.

7. В компоненте TSIBfibEventAlerter поправлена авторегистрация интереса к событиям. Регистрация не срабатывала, когда TSIBfibEventAlerter и TpFIBDatabase находились на разных формах.

8. Поправлен метод procedure TFIBLargeIntField.SetVarValue(const Value: Variant). Метод неправильно работал, если на входе было NULL-значение.

Специальные цены для ex-USSR (кроме стран ЕС):

235 Euro
1500 руб. для физ. лиц
3600 руб. для юр. лиц

Скидки при покупке нескольких копий!

Удивительно, как легко писать програмы на FIBPlus. Все как бы "под руками", не приходится ничего придумывать. Лучшие компоненты для работы с Firebird, если бы для других серверов такое  было... >>

Николай Трифонов, Astariff
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Customer's Center

Сайт по Delphi: ежедневные ИТ-новости, статьи, документация, компоненты, конкурсы, юмор...