Количество показов: 2453
Опубликован: 2007-05-10 01:01:02

Все особенности, улучшения и исправления FIBPlus в версиях 5.0-6.7

Особенности и улучшения версии 5.0:

  1. Переписан редактор FIBPlus DataSet Repository.
  2. В TpFIBDatabase добавлено свойство FIBDatabase.UseRepositaries. Если установить его равным False, вы можете насильно отключить любую поддержку репозитариев во всем приложении.
  3. Свойство useRepositaries переименовано в useRepositories
  4. Добавлены поля в FIBPlus DataSet Repository:
    UPDATE_TABLE_NAME,
    UPDATE_ONLY_MODIFIED_FIELDS,
    CONDITIONS
  5. Добавлен метод TFIBXSQLDA.AssignValues.
  6. Таймеры для датасетов теперь создаются не безусловно, а только при необходимости.
  7. FIBDatabase.CacheSchemaOptions Добавлено свойство ValidateAfterLoad : boolean;
    Если его отключить, FIBPlus не будет пытаться проверить сохраненную схему метаданных после загрузки.
  8. У TpFIBQuery появилась public read-write свойство: PlanClause.
  9. В SQLEditor кнопка SaveSQL перестала проверять синтаксис SQL, если соответствующая проверка выключена
  10. Модуль SqlTxtRtns полностью переписан.
  11. Изменено поведение UpdateTransaction. Теперь оно запускается только при выполнении модифицирующего запроса. Подготовка запроса выполняется в открытых транзакциях.
  12. Теперь TpFIBDatabase.Gen_Id вызывается в первой доступной открытой транзакции, а не создает свою собственную транзакцию.
  13. Улучшена работа с новыми ключевыми словами InterBase.
  14. Свойство AsIn64 добавлено в TFIBBCDField (для всех версий Delphi начиная с Delphi 4).
  15. Свойство, отвечающее за шаг генератора было добавлено в AutoUpdateOptions у TpFIBDataSet.
  16. Некоторые события были переименованы:
    * TpFIBDatabase.Onlogin изменено на BeforeConnect,
    * TpFIBDatabase.OnConnect изменено на AfterConnect.
  17. Поддержка исключений сервера при работе с Foreign Keys, Check Constraints и Unique Constraints добавлена в TpFibErrorHandler. Чтобы активизировать данную особенность, нужно активизировать соответствующую опцию в свойстве Options property у TpFIBErrorHandler и создать следующую таблицу в базе данных:
    CREATE TABLE FIB$ERROR_MESSAGES (CONSTRAINT_NAME VARCHAR(67) NOT NULL, MESSAGE_STRING VARCHAR(100), FIB$VERSION INTEGER, CONSTR_TYPE VARCHAR(11) DEFAULT 'UNIQUE' NOT NULL);
    Создание данной таблицы и работа с ней теперь реализована в редакторе компонента TpFIBDataBase.
  18. В AutoUpdateOptions добавлено два новых свойства:
    1. ParamsToFieldsLinks: TStrings. Позволяет задать соответствие между полями датасета и параметрами в форме FieldName=ParamName. затем это соответствие используется во внутреннем обработчике перед вызовом OnNewRecord. Значение параметра автоматически задается указанному полю.
    2. AutoParamsToFields: boolean. Если вы зададите этому свойству значение True, TpFIBDataSet постарается задать свойство ParamsToFieldsLinks самостоятельно, проанализировав текст SelectSQL (только в run-time).
  19. В TpFIBDatabase добавлено свойство DefaultUpdateTransaction. Все TpFIBDataSet, добавленные на форму после задания DefaultUpdateTransaction, будут использовать это значение свойства для того, чтобы задать свойство UpdateTransaction.
  20. У TpFIBTransaction появились методы:
    * SetSavePoint(const Name: string) и
    * RollBackToSavePoint(const Name: string)
    (только для FB 1.5)
  21. У TpFIBDatabase появилось свойство ServerActiveTransactions: TStringList, которое возвращает список идентификаторов активной транзакции текущей базы данных на сервере. Этот список возвращает ID список активных на данных момент транзакций. (только для FB 1.5)
  22. Минорные изменения в TFIBSQLMonitor, которые позволяют отслеживать новые операции с SavePoint.
  23. Исправленные ошибки:

  24. При открытии SQL Generator был виден список таблиц из базы, а в ListBoxе написано "Closed". Исправлено.
  25. В редакторе SQL не выделялись цветом названия изменённых запросов. Исправлено.
  26. У датасета в AutoUpdateOptions ни в какую не добавлялись варианты выбора ключевого поля (KeyFields) BIGINT. Исправлено.
  27. Исправлено множество ошибок в работе репозитариев.
  28. Design-Time редактор Options у TpFibDataSet не работал, если было выбрано несколько компонент. Исправлено.
  29. Переполнение стека при попытке изменить OrderClause, если до этого был использовано свойство Conditions. Исправлено.
  30. Неправильная работа BatchOutputRawFile, если в запросах существовали VARCHAR поля. Исправлено.
  31. Некоторые исправления в методе FullRefresh. (иногда слетала текущая позиция)
  32. Исправлен слет UpdateTransaction, если у датабэйса был назначен дефолтный UpdateTransaction. Исправлено.
  33. Улучшена работа с макросами, в частности, исправлена ошибка при обработке некоторых SQL с макросами
  34. Исправлено:

    See pFIBDataSet.InternalPostRecord
    UpdateBlobInfo(Buff,True,False,CachedUpdates);
    ^^^^^^^^^^^^^
    CachedUpdates =>> ForceWrite in DoFinalize

    Если CachedUpdates равно true, Blob поля всегда отсылались. Исправлено.
  35. Слетали default поля при FullRefresh. Исправлено.
  36. Полностью переписан unit SqlTxtRtns;
  37. Вставка в пустой датасет при использовании отдельной модифицирующей транзакции. Изменения в блоб поле в этом случае не записывались. Исправлено.
  38. Bool поля в некоторых случаях эмулировались только после переоткрытия Delphi. Исправлено.
  39. Field дизайнер не поднимался в том случае, если в датасете был записан неправильный SelectSQL. Исправлено.
  40. Исправлены ошибки при работе с RDB$DB_KEY.
  41. Неправильная проверка транзакции при ApplyUpdates. Исправлено.
  42. Ошибка в FIBDatabase.QueryValue, если возвращаемое поле является блобом. Исправлено.
  43. Проблема с нетекстовыми BLOB полями устранена.
  44. Ошибки в функциях макросов. Исправлены.
  45. Ошибки с DDL запросами. Исправлены.
  46. AV в SQL Editor исправлено.
  47. Исправлены ошибки в редакторе свойства Options в TpFIBDataSet.
  48. Ошибки использования RDB$DB_KEY в TpFIBDataSet. Исправлены.
  49. Ошибки, которые появлялись при проверке активных транзакций в ApplyUpdates. Исправлены.
  50. Ошибки в FIBDatabase.QueryValue, если возвращаемое поле BLOB. Исправлены.
  51. Изменения BLOB-полей не сохранялись после вставки записи в пустой датасет в контексте отдельной модифицирующий транзакции. Исправлено.
  52. Ошибка в методе LocateNext. Исправлена.
  53. Ошибка эмуляции Boolean-полей в design-time. Исправлена.
  54. Ошибка, при которой не запускался Field Editor, если в TpFIBDataSet был задан некорректный SelectSQL. Исправлена.
  55. Ошибка работы с запросами вида "Select for update". Исправлена.
  56. Ошибка обработки Cancel после exception во время выполнения запроса INSERT. Исправлена.
  57. Ошибка, вызывающая удаление полей по умолчанию после вызова метода FullRefresh.

    Особенности и улучшения версии 5.0.8:

  58. Добавлена возможность обращения к калк полям из обработчика OnFilterRecord.

    Исправления:

  59. Искажение дефолтных значений, при включенной опции pfImportDefaultValues в PrepareOptions. Исправлено.
  60. При попытке открыть редактор 'Edit field information table' появлялось сообщение "List index out of bounds (1074778116)". Исправлено.
  61. TFIBFloatField неправильно отображал значение Float полей. Исправлено.
  62. UpdateOnlyModified не работал с CachedUpdates. Исправлено.
  63. Не обновлялся статус записи после CommitUpdToCach. Исправлено.
  64. Неправильное получение и обработка некоторых дефолтных значений полей (pfImportDefaultValues). Исправлено.
  65. Убраны некоторые дефайны из FIBPlus.inc. (В связи с прекращением поддержки Delphi 3-4).
  66. Мелкое исправление в редакторе запросов. Кнопка "Clear SQL" не очищала содержимое текущего запроса.
  67. Правки в юнитах FIBDataSet и pFIBDataSet.
  68. Ошибка в процедуре OpenAsClone. Исправлена.
  69. Подправлен TIBSuperAlerter.
  70. Ликвидирована утечка памяти, которая проявлялась при работе с запросами, возвращающими пустой набор данных.

    Особенности и улучшения версии 5.1:

  71. Добавилась возможность указания пути на клиентскую библиотеку для отдельно взятой TpFIBDatabase! (разные gds32.dll, fbclient.dll).
  72. Введено свойство у датасета RefreshTransactionKind:TTransactionKind, где TTransactionKind=(tkReadTransaction,tkUpdateTransaction); Оно определяет, в контексте какой транзакции будет выполняться Refresh. Если датасет не имеет отдельной UpdateTransaction, то значение свойства игнорируется.
  73. Изменена функция CompareBookmarks.
  74. Тип TTransactionAction в юните unit IB_Services; переименован в TServiceTransactionAction во избежание конфликта с типом TTransactionAction в юните FIBDatabase.

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

  75. Исправлена работа TpFIBDataSet.Locate Description: и TpFIBDataSet.Locate по датасету, имеющему удаленные или отфильтрованные записи.
  76. Устранен разрыв соединения при работе с версиями ИБ<6.
  77. Ошибка при работе с блобами (иногда неверно реагировали на DataSet.Cancel)
  78. Ошибка в обработке String полей. Проявлялась при попытке присвоить пустую строку.
  79. Ошибка при обработке некоторых ключевых слов.
  80. Ошибка при отмене вставки записи в пустой датасет. Проявлялась, если перед отменой была попытка неудачного Post.
  81. Изменения в работе LockRecord (неправильно работал при некоторых особенностях текста в UpdateSQL)

    Особенности и улучшения версии 5.2:

  82. Добавились обработчики FIBDataSet:

    • property BeforeStartTransaction: TNotifyEvent;
    • property AfterStartTransaction: TNotifyEvent;
    • property BeforeEndTransaction: TEndTrEvent;
    • property AfterEndTransaction: TEndTrEvent;
    • property BeforeStartUpdateTransaction: TNotifyEvent;
    • property AfterStartUpdateTransaction: TNotifyEvent;
    • property BeforeEndUpdateTransaction: TEndTrEvent;
    • property AfterEndUpdateTransaction: TEndTrEvent;

  83. В SQL Generator добавлена возможность генерировать не все модифицирующие запросы сразу, а только один выбранный.
  84. Добавлен редактор компонента для pFIBQuery.
  85. Переписаны такие редакторы компонентов как SQL Generator и диалог для редактирования Dataset Repository.
  86. Добавлена опция poFetchAll в свойство TpFIBDataSet.Options. При включенной опции, после открытия TpFIBDataSet, все записи автоматически закачиваются с сервера.
  87. У TpFIBDataSet добавлено новое событие OnApplyDefaultValue: TOnApplyDefaultValue, где TOnApplyDefaultValue = procedure (DataSet: TDataSet; Field: TField; var Applied: boolean) of object;
    Обработчик события вызывается во время вставки новой записи, для каждого поля имеющего непустой DefaultExpression. В обработчике вы можете самостоятельно обработать DefaultExpression для ваших полей, если стандартная процедура обработки с ними не справляется. Задайте значение Applied равным True, если вы самостоятельно обработали выражение. В этом случае стандартная обработка производиться не будет.
  88. Изменено поведение при проверке сохраненного кэша метаданных. Сейчас проверка производится не сразу после подключения, а частями по мере необходимости. Таким образом, если какая-то часть кэша в текущем сеансе не потребуется, то и проверяться она не будет.
  89. Введено сохранение кэша DataSet Repository. В связи с этим в таблицу DataSet Repository добавлено еще одно поле, содержащее номер версии записи репозитария. Для автоматического изменения структуры таблицы репозитария вызовите редактор репозитария при помощи выпадающего меню на TpFIBDatabase.
  90. Введена глобальная переменная FIBHideGrantError: boolean = False. Когда значение переменной равно True, то при отсутствии прав на модификацию данных, TpFIBDataSet отключает возможность редактирования или удаления без вывода сообщений об ошибке.
  91. В TpFIBDataSet добавлено событие OnCompareFieldValues: TCompareFieldValues, где TCompareFieldValues = function (Field: TField; const S1,S2: variant): integer of object. Обработчик события вызывается в процессе локальной сортировки. При помощи этого обработчика вы можете самостоятельно управлять порядком сортировки, сравнивая попарно переданные значения.
  92. Включена поддержка комментариев с маркером '--'.
  93. В FIBPlusTools добавлена возможность задавать умолчания для свойства TpFIBDataSet.DefaultFormats.

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

  94. Ликвидирована мелкая ошибка при работе в режиме poProtectedEdit.
  95. Исправлены мелкие погрешности в процедурах сохранения свойства Conditions в dfm-файл.
  96. Теперь при активном режиме poImportDefaultValue, DefaultExpression для строковых полей безусловно обрамляется одинарными кавычками. Старая реализация порождала проблемы с ClientDataSet, если строковое поле имело значение по умолчанию вида '1xxxxx'.
  97. Переписан способ хранения свойства Options в dfm-файле.
  98. Подправлена замена NULL параметров на "Is Null". Ранее замена работала неправильно в случаях конструкций вида ttt = :ttt <арифметическая операция> <выражение>.
  99. Ликвидирован Stack Overflow при попытке локальной сортировки по вычислимому полю.
  100. Исправлена неправильная работа TpFIBDataSet в режиме poProtectedEdit. (Текущая позиция в TFIBDataSet иногда терялась).
  101. Исправлена ошибка «XSQLDA index out of range» при работе с макросами в датасетах с опцией poNoForceIsNull.
  102. Подправлена процедура локальной сортировки.
  103. Исправлена работа с блоб-полями для датасетов, работающих с двумя транзакциями.
  104. В Delphi 5 после ReopenLocate в data-aware controls не возникало событие изменения данных, т.е. показывались старые данные. Исправлено.
  105. После выполнения Append свойство RecNo возвращало неправильное значение. Оно всегда было равно 1 вне зависимости от реального количества записей. Исправлено.
  106. Устранена несовместимость режимов poProtectedEdit и UpdateOnlyModifiedFields.

    Особенности и улучшения версии 5.3:

  107. Теперь метод TpFIBTableInfo.GetPrimaryKeyFields закрывает транзакцию, если сам ее предварительно открывал.
  108. В FIBDataSet добавлены методы.

    procedure BatchRecordToQuery(ToQuery: TFIBQuery);
    procedure BatchAllRecordsToQuery(ToQuery: TFIBQuery);

    BatchRecordToQuery - заносит в указанный запрос (ToQuery) значения параметров, взятые из полей текущей записи и выполняет запрос.

    BatchAllRecordsToQuery - выполняет BatchRecordToQuery для всех записей датасета.
  109. Добавлен новый тип поля: TFIBGuidField.
  110. Новая опция psUseGuidField в FIBDataSet.PrepareOptions. Работает по аналогии с psUseBooleanField. То есть, если поле имеет домен, в названии которого есть строка 'GUID', то на клиенте он представляется в виде экзмепляра TFIBGuidField.
  111. Значения полей TFIBGuidField генерируются в обработчике события OnNewRecord автоматически, если свойство AutoGenerateValue поля равно arAutoInc.
  112. В TpFIBDatabase добавлен метод CreateGUIDDomain. Создает в базе данных специальный домен для полей типа GUID.
  113. В TFIBXSQLVAR добавлены методы поддержки GUID-полей:
    function GetAsGUID: TGUID;
    procedure SetAsGuid (aValue: TGUID);
  114. В TpFIBDataSet добавлены методы DisableCalcFields и EnableCalcFields. Выключают-включают автоматический вызов обработчика OnCalcFields.
  115. Семейство методов Locate выключают пересчет calc-полей на время своей работы, если в искомых полях нет ни calc, ни lookup поле
  116. В SQL Editor добавлено отображение текущей позиции курсора в тексте SQL.
  117. Теперь такие методы TpFIBDatabase как

    function QueryValues(const aSQL: string): Variant; overload;
    function QueryValues(const aSQL: string; ParamValues: array of variant):Variant; overload;

    возвращают в виде вариантного массива значения всех полей указанного запроса.
  118. Теперь вызовы Before/AfterScroll при Locate
    1. при неуспешном Locate вообще не вызываются.
    2. при успешном на старой записи вызывается BeforeScroll, а на новой – AfterScroll

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

  119. Подправлена работа свойства AsBoolean в TFIBXSQLVAR. (Поддержка для типов SmallInt и Integer).
  120. Исправления в процедуре FormatExtended из юнита StdFuncs (некорректно работало при некоторых форматах).
  121. Изменен порядок вызова обработчика AfterConnect.
  122. Добавлены условные директивы для packages из D7. (Убраны замечания по поводу unsafe code).
  123. RefreshClientFields изменял флаг Eof. Исправлено.
  124. Исправления в работе с полями-массивами.
  125. Если свойство UpdateTransaction у TpFIBDataSet уже назначено, то при смене значения свойства Database, оно не переназначается на Database.DefaultTransaction.
  126. Редактор свойства DBName не работал нормально, если в DBName был указан невалидный путь.
  127. Исправлена ошибка в FullRefresh (reported by Janex).
  128. Исправлена ошибка при парсинге некоторых запросов.
  129. Иногда терялось значение свойства Transaction у FIBQuery (сообщил С. Ломакин).
  130. Исправлена ошибка при вызове GenerateSQLs после Open и наличии в запросе поля типа TIMESTAMP (сообщил П. Шибанов).
  131. Исправлена ошибка в методе function TSQLParser.IsDDL (сообщил П. Шибанов).
  132. Исправлена ошибка при использовании poKeepSorting на отфильтрованном TpFIBDataSet.
  133. Исправлена ошибка в SQL editor, которая не позволяла использовать режим "use selected field only".
  134. Исправлен AV при AppendRecord на пустом TpFIBDataSet.
  135. В design-time во время операций copy-paste TpFIBDataSet и TpFIBQuery сбивались настройки в скопированном компоненте.
  136. Устранено зависание в ReplaceMacroStr.
  137. Исправлена некорректная обработка исключений при автозакрытии подчинённой таблицы в связке мастер-деталь.
  138. Присваивание значения полю закрытого TpFIBDataSet вызывало выполнение недопустимой операции.
  139. Прямой вызов FIBStringField.SetData отрабатывал неправильно.
  140. Подправлена функция ExecSQL из юнита CommonIB.
  141. Подправлен метод TFIBInputDelimitedFile.ReadParameters.

    Особенности и улучшения версии 6.0:

  142. В TpFIBQuery введен метод function FindField(const FieldName: string): TFIBXSQLVAR. Если искомое поле не найдено, функция не генерирует исключение, а возвращает nil.
  143. В TpFIBQuery добавлено свойство GroupByClause:string. Возвращает текст выражения GROUP BY из текущего SQL текста.
  144. В TpFIBQuery и TpFIBDataSet добавлена возможность работать с макросами в DDL запросах.
  145. Добавлена директива {$DEFINE NO_GUI} в файл FIBPlus.inc. В случае включения этой директивы, файлы библиотеки компилируются без использования VCL-модулей с визуальными компонентами.
  146. В новой версии метод TpFIBDataSet.GenerateSQLs работает даже если коллекция полей еще пустая. Это может пригодиться, если необходимо сделать вызов до открытия датасета, и поля не созданы в дизайне.
  147. В TpFIBDataSet добавлен новый метод function LocatePrior (const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean. Метод позволяет осуществлять поиск записи в локальном буфере в обратном направлении (от текущей записи, к началу буфера).
  148. В свойство TpFIBDataSet.Options добавлена опция psSetEmptyStrToNull. При включении опции, у вновь создаваемых строковых полей этого датасета включается свойство EmptyStrToNull.
  149. В свойство TpFIBDataSet.Options добавлена опция poFreeHandlesAfterClose. При включенной опции после достижения состояния Eof (то есть, при получении всех записей результата запроса), Handle у TpFIBDataSet освобождается. Это, в частности, поможет избегать сообщения сервера «Object in use» при изменении объектов базы данных. Следует обратить внимание, что освобождение Handle означает также и закрытие запроса.
  150. Добавлена аналогичная опция (poFreeHandlesAfterClose) в TpFIBQuery. При ее использовании, Handle освобождается сразу же после вызова метода Execute.
  151. В TpFIBTransaction добавлена возможность указать параметр транзакции isc_tpb_no_auto_undo.
  152. Добавлено свойство TAutoUpdateOptions.SeparateBlobUpdate: boolean. При включенном свойстве BLOB-поля сохраняются следующим образом:

    1. Генерируются тексты модифицирующих запросов без BLOB-полей.
    2. Отдельно генерируется модифицирующие запросы с BLOB-полями.
    3. При выполнении Post запускается запрос без BLOB-полей, потом создается «пустой» BLOB, который сохраняется в базе, и только после этого запускается UPDATE для сохранения реального значения BLOB-поля. При стандартном подходе BLOB-поля сохраняются обычным модифицирующим запросом. В случае, если этот запрос был отвергнут сервером, и мы получили исключение, то при следующей попытке BLOB-поля приходится передавать на сервер заново. При новом подходе мы этого избегаем, поскольку BLOB-поле просто не передается на сервер до тех пор, пока не пройдет основной запрос INSERT/UPDATE, и пока мы не будем уверены, что операция в целом не будет отвергнута сервером.
  153. Введен новый режим организации внутреннего буфера TpFIBDataSet. Подробнее это режим описан в пункте «Режим работы TpFIBDataSet "Ограниченный локальный буфер"».
  154. Введена возможность автоматического кэширования BLOB-полей на клиенте. Подробнее читайте пункт «Кэширование BLOB-полей на клиенте».
  155. В свойстве AutoUpdateOptions.UpdateTableName теперь можно записывать имя таблицы с псевдонимом (alias). Например, «TABLE1 AAA». Такая возможность полезна для правильной генерации модифицирующих запросов по тексту SelectSQL, в котором модифицируемая таблица упоминается 2 или более раз.
    Например:

    SELECT
    AAA.*, BBB.*
    FROM
    TABLE1 AAA, TABLE1 BBB
    WHERE …….

    Предыдущие версии FIBPlus не могли сформировать правильные модифицирующие запросы для таких запросов. В FIBPlus 6.0 достаточно указать AutoUpdateOptions.UpdateTableName := 'TABLE1 AAA'.

  156. В SQLEditor добавилась кнопка 'To Code Editor'. При нажатии, текст запроса открывается в стандартном редактор кода IDE, а редактор закрывается. Существует побочный эффект для редактора TpFIBDataSet - при переходе в стандартный редактор кода, все запросы сохраняются в соответствующих свойствах, то есть, происходит неявное сохранение.
  157. Теперь, если пакет с редакторами использует SynEdit, то в SQLEditor доступен CodeProposal. В pFIBPropEd.inc введены новые директивы для разных версий SynEdit.
  158. Изменения в SQLNavigator:

    1. окно SQLNavigator не модальное, а StayOnTop.
    2. Добавлена функция доступа к компоненту на форме из редактора кода. То есть, теперь, можно подвести текстовый курсор к названию компонента (например, pFIBQuery1), нажать Ctrl-W и SQLNavigator передаст фокус на форму с этим компонентом. Причем, компонент на этой форме будет выделен и выбран в Object Inspector. В случае если мы находимся в редакторе кода SQL, то будет открыта форма и компонент носитель соответствующего свойства.
    3. Добавлена комбинация Ctrl-Shift-W аналогичная пункту b), только поиск ведется по всем формам проекта. В случае обнаружения более одного компонента - выдается список форм, где встретились компоненты с искомым именем. Из списка двойным кликом можно открыть форму и сразу перейти на искомый компонент.
  159. У компонентов TpFIBDatabase и TpFIBTransaction ряд методов и свойств объявляются устаревшими и в дальнейших версиях реализованы не будут. Речь, в частности, идет о:

    procedure RemoveDataSet(Idx: Integer);
    procedure RemoveDataSets;
    function AddDataSet(ds: TFIBBase): Integer; deprecated;
    property DataSetCount: Integer read GetFIBBasesCount;
    property DataSets[Index: Integer]: TFIBBase read GetFIBBase;

    Они заменены на:

    procedure RemoveFIBBase(Idx: Integer);
    procedure RemoveFIBBases;
    function AddFIBBase(ds: TFIBBase): Integer;
    property FIBBaseCount: Integer read GetFIBBasesCount;
    property FIBBases[Index: Integer]: TFIBBase read GetFIBBase;

    Реорганизация вызвана тем, что предыдущие названия не соответствовали сути этих методов и свойств, что вносило путаницу. Несмотря на то, что данные методы, как правило, не используются в прикладных приложениях, и изменение вряд ли затронет существующие программы, для поддержки совместимости с предыдущими версиями в файле FIBPlus.inc можно включить директиву $DEFINE USE_DEPRECATE_METHODS1}.
  160. В TpFIBDataSet и TpFIBQuery добавлены методы RestoreMacroDefaultValues, восстанавливающие значения макросов по умолчанию.
  161. Поведение TpFIBDataSet при включенной опции poPersistentSorting и использовании макросов стало более устойчивым. Сортировка результата меняется только в том случае, если поля, по которым осуществлялась сортировка до изменения макросов, перестали существовать.
  162. Добавлена новая декларация для метода OpenWP в TpFIBDataSet.
    procedure OpenWP(const ParamNames:array of string;const ParamValues: array of Variant); overload;
    Новый вариант позволяет указывать названия параметров в переменной ParamNames. В переменной ParamValues необходимо передавать значения параметров.
  163. В TpFIBQuery добавлен аналогичный метод:

    procedure ExecWP(const ParamNames: array of string;ParamValues: array of Variant);
    overload;

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

    procedure ReOpenWP(const ParamValues: array of Variant); overload;
    procedure ReOpenWP(const ParamNames: array of string; const ParamValues: array of Variant); overload;
    procedure ReOpenWPS(const ParamSources: array of ISQLObject);

    Методы аналогичны OpenWP, OpenWPS, но предварительно закрывают TpFIBDataSet, если он был открыт.

  165. В классе TFIBBlobField добавлено read-only свойство Blob_id.
  166. Реализована поддержка строковых полей и подключений с charset UNICODE_FSS. Для реализации полной поддержки многоязыковых текстовых данных добавлены новые классы полей TpFIBDataSet:
  167. TFIBWideStringField = class(TWideStringField) - для полей типа VARCHAR,CHAR; TFIBMemoField = class(TMemoField, IWideStringField) - для BLOB-полей, где IWideStringField - интерфейс обрабатываемый визуальными компонентами TNT (http://tnt.ccci.org/delphi_unicode_controls)
  168. Новая опция psSupportUnicodeBlobs в DataSet.PrepareOptions, которая позволяет работать с BLOB-полями UNICODE_FSS. По умолчанию опция отключена, потому что для выяснения charet конкретного BLOB-поля необходим дополнительный запрос. Если вы не работаете с UNICODE, то запрос окажется лишним.
  169. Новый метод TFIBDatabase - function IsUnicodeCharSet: Boolean.Возвращает True, если подключение использует UNICODE_FSS.
  170. Новое свойство FIBXSQLVAR.AsWideString: WideString;

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

  171. Игнорировались некоторых события при работе TSIBfibEventAlerter1.
  172. Неверно работал метод CancelUpdates при повторном вызове ApplyUpdates после Commit: показывались записи, удаленные до вызова Commit.
  173. Изменены некоторые внутренние запросы для совместимости с Borland InterBase 4.
  174. Ошибка в реализации AutoUpdateOptions.AutoParamsToFields.
  175. Ошибка «Invalid Blob_id» при попытке выполнить повторный запрос UPDATE после неудачной первой.
  176. Метод FIBDataSet.LockRecord генерировал неправильный запрос, если было указано более одного ключевого поля.
  177. Если выражение ORDER BY формировалось через макрос, то свойство SortFields не заполнялось. Что приводило к неработоспособности опции poKeepSorting.
  178. Неправильно возвращались координаты ошибки в тексте SQL при неудачной попытке выполнить Prepare.
  179. Ошибка сохранения в dfm-файле свойства DefaultFormats.DateTimeDisplayFormat.
  180. Неоправданное изменение позиции текущей записи после редактирования в TpFIBDataSet с опцией poKeepSorting. Позиция иногда менялась, даже если значения сортируемых полей реально не изменились.
  181. Свойство Field.OldValue в состоянии dsInsert возвращало случайные значения. Сейчас свойство в этой ситуации строго равно null.
  182. Ошибка в методе TFIBInputRawFile.ReadParameters, которая приводила к неправильной работе класса, если в читаемом файле были сохраненные BLOB-поля.
  183. BlobField.OldValue теперь показывает реальное значение. Ранее свойство возвращало текущее значение BLOB-поля.
  184. Неправильная работа TpFIBDataSet при одновременно включенных опциях poKeepSorting и poProtectedEdit в запросах отсортированных по вычислимым-полям.
  185. Ошибка режима poKeepSorting при добавлении новой записи в пустой датасет.
  186. Исправлен метод Resync. Ранее, если TpFIBDataSet закрыт, то вызов Resync приводил к ошибкам, так как метод пытался обработать потерю коннекта к базе данных.
  187. Ошибки при UpdateOnlyModifiedFields.
  188. Ошибка генерации запроса RefreshSQL при использовании макросов.
  189. Не работали Array -поля в TpFIBDataSet с разделенными транзакциями.
  190. Не обрабатывались Array-поля типа NUMERIC(18,xxx) под третьим диалектом.
  191. В SQLNavigator не работала кнопка CheckSQLS.
  192. Приложение, в котором рассказано о режиме работы TpFIBDataSet "Ограниченный локальный буфер" и кэширование BLOB-полей на клиенте.

    Особенности и улучшения версии 6.1:

  193. Сообщение "Can''t read Buffer.Incorrect RecordNo" появлялось при попытке добавить новую запись в базу данных. Исключение возникало при обновлении пустого датасета. Исправлено.
  194. Некорректный FullRefresh при CacheModelKind=cmkLimitedBufferSize. Исправлено.
  195. Не работали локальная сортировка и метод CloneCurRecord. Исправлено.
  196. При сохранении датасета в репозитарий диалог запроса всегда открывался с пустой строкой. Исправлено.
  197. FIBPlus 6 вызывала ошибку в Refreh SQL Query при создании SQL выражений в design time. Исправлено.
  198. Если Select использовал макросы, не работал refresh. Исправлено.
  199. При попытке соединиться с базой данных в design-time FIBPlus использовала клиентскую библиотеку gds32.dll, хотя в свойстве LibraryName property была указана fbclient.dll. Исправлено.
  200. AV при попытке отменить изменения в Blob. Исправлено.
  201. Ошибка с poKeepSorting при работе с огромным датасетом, сортированным по ORDER BY. Исправлено.
  202. Ошибка вызова Append. Проявлялась не всегда. Исправлено.
  203. Не работал DoSortEx. Исправлено.
  204. FullRefresh некорректно работал в режиме ограниченного локального буфера. Исправлено.
  205. Поправлена генерация SQL для запросов, использующих "закавыченные" имена объектов.
  206. В FIBPlus Tools не присваивался RefreshSQL через SQLNavigator. Исправлено.

    Особенности и улучшения версии 6.2:

  207. Значения TFIBGUIDField автоматически генерируются при вставке новой записи.
  208. Теперь есть возможность использовать в явном виде строковые значения в условии WHERE при работе с Unicode-подключением к базе данных (SELECT * FROM T1 WHERE MyField = 'строка'). До версии 6.2, в Unicode-подключениях можно было использовать только параметрические запросы.
  209. FIBPlusTools адаптированы для Delphi 2005.
  210. Изменен метод BatchOutputRawFile компонента TpFIBQuery:

    procedure BatchOutputRawFile (const FileName: string; Version: integer = 1);

    Второй аргумент задает принцип записи в файл.

    Если Version = 1, то используется старый принцип, при котором во внешний файл выводятся только данные в порядке, который определяется полями SQL-запроса. Предполагается, что при чтении записанных данных методом BatchInputRawFile в читающем SQL параметры будут расположены в том же порядке. Количество полей TpFIBQuery, данные которого записывались, и количество параметров в TpFIBQuery, который потом будет считывать данные, должны совпадать. Для строковых полей необходимо, чтобы длина записываемого поля и читающего параметра также совпадали, однако совпадения имен не требуется.

    Если Version = 2, то используется новый принцип записи. Помимо данных в файл записывается служебная информация о полях (имя, тип и длина). При последующем чтении, данные будут читаться по принципу совпадения имен. Порядок и количество полей в записывающем TpFIBQuery может не совпадать с порядком и количеством параметров в читающем TpFIBQuery. Типы и длина тоже могут не совпадать. Требуется лишь совпадение имен.
  211. В компоненте TpFIBDatabase добавлены новые свойства:

    property ServerMajorVersion: integer;
    property ServerMinorVersion: integer;
    property ServerRelease: integer;
    property ServerBuild: integer;

    Их смысл очевиден из их названий.

  212. Добавлены новые методы в TpFIBQuery:

    function TableAliasForField(FieldIndex:integer):string; overload;
    function TableAliasForField(const aFieldName:string):string; overload;

    Функции возвращают алиас таблицы поля в запросе по номеру или названию поля.
  213. В интерфейс ISQLObject добавлен метод

    function FieldName (FieldIndex: integer): string;
  214. Увеличена максимальная длина события (event) в TSIBfibEventAlerter с 64 до 128 символов.
  215. Добавлена возможность использовать вычислимые Blob-поля в приложениях. Для этого в классе TFIBBlobField добавлено свойство IsClientField: Boolean, а в TpFIBDataSet добавлено событие OnFillClientBlob:TOnFillClientBlob, где

    TOnFillClientBlob = procedure (DataSet: TFIBCustomDataSet; Field: TFIBBlobField; Stream: TFIBBlobStream) of object;

    Теперь, если у блоб-поля IsClientField равно True, то значение поля не берется из базы данных и не записывается в базу данных (однако в SELECT-запросе блоб-поле, все-таки, должно присутствовать). Для заполнения значения поля необходимо определить обработчик события OnFillClientBlob у соответствующего экземпляра TpFIBDataSet. Например:

    procedure TForm1.NoLookupFIBDataSetFillClientBlob (DataSet: TFIBCustomDataSet; Field: TFIBBlobField; Stream: TFIBBlobStream);
    begin
    Stream.LoadFromFile('c:\temp.txt');
    end;
  216. Добавлена опция poCacheCalcFields в компоненте TpFIBDataSet. При включенной опции, результаты вычисления calculated- и lookup-полей сохраняются в кэше, что позволяет их пересчитывать только после модификации записи. Этот режим рекомендуется использовать, если calculated-поля используются для "тяжелых" расчетов, а также, если используется локальная сортировка, фильтрация и поиски по calculated-полям.
  217. В компонент TpFIBDataSet добавлены методы:

    function CreateCalcField (FieldClass: TFieldClass; const aName, aFieldName: string; aSize: integer): TField;

    function CreateLookUpField (FieldClass: TFieldClass; const aName, aFieldName: string; aSize: integer; aLookupDataSet: TDataSet; const aKeyFields, aLookupKeyFields, aLookupResultField: string): TField;

    для создания calculated- и lookup-полей в run-time.
  218. Ускорена работа методов Locate и DoSort.
  219. Теперь если Required-поля являются пустыми, методы CacheInsert, CacheEdit не вызывают исключения.
  220. Поле класса TFIBWideStringField теперь может быть calculated (стандартный класс TWideStringField использовать практически нельзя из-за ошибки в VCL)
  221. В TpFIBDataSet добавлено свойство FieldOriginRule: TFieldOriginRule, где

    TFieldOriginRule = (forNoRule, forTableAndFieldName, forClientFieldName, forTableAliasAndFieldName);

    Свойство руководит правилом заполнения свойства TField.Origin.

    forNoRule: Origin не заполняется вообще. Предполагается, что разработчик самостоятельно заполнит данное свойство.
    forTableAndFieldName: Origin заполняется в виде строки - "физическое имя таблицы"+"."+"физическое имя поля".
    forClientFieldName: Origin совпадает с именем Field.FieldName.
    forTableAliasAndFieldName: Origin заполняется в виде строки - "алиас таблицы в запросе"+"."+"физическое имя поля".

    Правила forNoRule и forClientFieldName актуальны для программистов, которые используют FIBPlus совместно с DevExpress. Правило forTableAliasAndFieldName актуально для работы с Firebird 2.
  222. В свойстве AutoUpdateOptions.UpdateTableName теперь можно указывать не просто имя таблицы, но также имя таблицы + пробел + алиас таблицы. При этом, если имя таблицы не прописное (3 диалект), то его необходимо обрамлять двойными кавычками. Это дает возможность корректно генерировать модифицирующие запросы для Firebird 2, поскольку позволяет FIBPlus разбираться с конструкциями типа

    Select a.*, b.Description DescripB
    from Tasks a
    left join Tasks b on (b.id = a.id)

    Т.е., в частности, с конструкциями, в которых одна таблица используется более одного раза. Поле Description в данном примере не должно редактироваться. Предыдущие версии FIBPlus и IB/FB не позволяли корректно работать с такими запросами. Теперь достаточно указать AutoUpdateOptions.UpdateTableName := 'Tasks a' вместо AutoUpdateOptions.UpdateTableName := 'Tasks'.

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

  223. Исправлена ошибка с TFIBGUIDField (класс не был зарегистрирован).
  224. Исправление в методе Locate, который не совсем правильно работал с unicode-полями.
  225. Исправлена ошибка в редакторе SQL, проявлявшаяся в Delphi 2005. Переход в Code Editor работал некорректно
  226. Исправлена ошибка в SQL-парсере, проявлявшаяся на достаточно редких запросах.
  227. Исправлена ошибка в работе с GUID-полями в режиме мастер-деталь.
  228. Методы SetAsBCD и GetAsBCD класса FIBBCDField работали неправильно с calculated-полями.
  229. Исправлена ошибка в свойстве AsString компонента в TpFIBQuery при работе с Unicode.
  230. Исправлено отображение полей типа NUMERIC(xxx, yyy) при использовании свойства DisplayFormat для значений, для которых тип Double не дает необходимую точность.
  231. Исправлена ошибка вставки в пустой TpFIBDataSet при включенной опции poKeepSorting.
  232. Исправлена ошибка в ApplyUpdates при удалении всех записей.
  233. ExtLocate по сортированному запросу в TpFIBDataSet работал неправильно, если порядок KeyFields не совпадал с реальным порядком полей в сортировке. Исправлено.
  234. Если вызывался ExtLocate с опцией eloInSortedDS по несортированному запросу в TpFIBDataSet, то поиск ведется методом простого перебора. В предыдущих версиях в этом случае поиск приводил к некорректным результатам. Исправлено.

    Особенности и улучшения версии 6.2.5:

  235. В компонент TpFIBDatabase добавлены два метода для поддержки новых команд RDB$GET_CONTEXT и RDB$SET_CONTEXT введенных в Firebird 2:

    function GetContextVariable (ContextSpace: TFBContextSpace; const VarName: string): Variant;
    procedure SetContextVariable (ContextSpace: TFBContextSpace; const VarName, VarValue: string);

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

  236. Исправлена ошибка в методе TpFIBQuery.SetAsExtended.
  237. Исправлена небольшая утечка памяти в модуле RegUtils.
  238. Исправлена ошибка при записи в BLOB-поле через TDataSetProvider.
  239. При определенных обстоятельствах возникала ошибка «Can’t read buffer. Invalid RecordNo». Исправлено.
  240. При определенных обстоятельствах вызов метода Refresh в TpFIBDataSet приводил к неверному результату. Исправлено.
  241. Исправлена ошибка при попытке прочитать BLOB-поля в обработчике OnCalcFields.
  242. Исправлена ошибка в метода Locate компонента TpFIBDataSet, в ситуации, когда не все записи были получены с сервера.
  243. Возвращались неправильные значения свойства Origin при опции FieldOriginRule = forNoRule. Исправлено.
  244. Возникала ошибка генерации запросов при включенной опции UpdateOnlyModifiedFields в компоненте TpFIBDataSet. Ошибка проявлялась на полях NUMERIC (18, x) при попытке изменить NULL значение на 0 или наоборот. FIBPlus ошибочно считал значения таких полей неизменными. Исправлено.
  245. Исправлена неверная работа DisplayFormat для полей NUMERIC (18, x). В частности, проявлялось при использовании символов, которые не являются символами маски. Например, «#,000 р.00 коп».
  246. Исправлена ошибка в работе клиентских calculated-полей. Не очищался буфер перед вычислением поля. Ошибка проявлялась в случае, если в обработчике события OnCalcFields поле текущей записи не вычислялось, а для предыдущей вычислялось. В этой ситуации вместо пустого значения показывалось значение из предыдущей записи.
  247. Поиск булевого значения True в поле TpFIBBooleanField выполнялся неверно. Исправлено.
  248. Исправлен AV в FIBStringField, возникавший в определенных ситуациях с использованием свойства psSetEmptyStrToNull.
  249. Убраны ненужные кавычки в автоматическом получении свойства GeneratorName.
  250. Исправлена ошибка определения ключевых полей в SQLEditor.
  251. При использовании макросов не подставлялись вложенные параметры в RefreshSQL. Исправлено.

    Особенности и улучшения версии 6.3.0:

  252. Метод function FIBDataSet.IsComputedField(Field:Variant): boolean;
  253. Возвращает true если поле является server-calculated. В качестве аргумента подается либо имя поля в датасете, либо его номер в коллекции полей.
  254. Метод procedure FIBDataSet.AssignProperties(Source: TFIBCustomDataSet);
    Присваивает всем свойствам значения из свойств от Source датасета. Аналогичный метод FIBQuery.AssignProperties
  255. Добавлены свойства датасета - дают доступ к выражениям в SELECTSQL
    property GroupByClause:string;
    property MainWhereClause:string;
    property PlanClause:string;
  256. в pFIBPropEd.inc добавлена новая директива {$DEFINE synedit-201b.zip} Включает Директивы (define) актуальные для определенной сборки SynEdit. На сайте производителя эта сборка доступна под именем synedit-201b.zip
  257. FIBDataBase добавлено свойство SQLLogger. Убран компонент FIBAppStatistics. Его функциональность перенесена в новый компонент FIBSQLLogger.
    FIBSQLLogger - компонент, отвечающий за логгирование SQL запросов, и сбор статистики по ним.
    Свойства:
    property ActiveStatistics:boolean - включен ли сбор статистики.
    property ActiveLogging:boolean - включено ли логгирование
    property LogFileName:string - имя файла, куда пишется лог
    property StatisticsParams :TFIBStatisticsParams - какие именно параметры включены в сбор статистики

    property LogFlags: TLogFlags - какие операции логгируются
    property ForceSaveLog:boolean - вести запись лога сразу же. Т.е после каждого запроса немедленно идет запись в файл.

    Методы
    function ExistStatisticsTable:boolean; - существует ли таблица для хранения статистики
    procedure CreateStatisticsTable; - создает таблицу для хранения статистики в базе
    procedure SaveStatisticsToDB(ForMaxExecTime:integer=0); - сохранить накопленную статистику в таблицу. Параметр указывает, по каким запросам нам статистика вообще интересна. Для этого надо задать значение ForMaxExecTime равным нижнему пределу времени выполнения запроса. Т.е. записывается статистика по тем запросам которые выполнялись дольше или столько же времени как, указанное в ForMaxExecTime.
    procedure SaveLog; - запись лога в файл. (имеет смысл, если выключен ForceSaveLog)
  258. Добавлена возможность отключить показ имени компонента, вызвавшего ошибку. Для этого можно воспользоваться кодом:
    use FIB; Exclude(IBErrorMessages, ShowRaiserName)
  259. Добавлена обработка параметра транзакции isc_tpb_no_savepoint. (Для InterBase 7.5)
  260. Новый вариант метода FIBQuery.

    ExecWPS;
    procedure ExecWPS (ParamSource:ISQLObject; AllRecords:boolean=True);
    overload;

    Действие почти аналогично действию старого вызова ExecWPS. Т.е. запускает ExecQuery, используя в качестве источника параметров переданный параметр ParamSource. Второй аргумент сообщает методу, нужно ли выполнять ExecQuery для каждой записи из ParamSource или только для текущей.
  261. pFIBClientDataSet теперь поддерживает интерфейс ISQLObject. Это в сочетании с пунктом 2 позволяет делать легкую перекачку данных в базы InterBase из данных клиент-датасета.

    Пример:
    FIBQuery1.ExecWPS(FibClienDataSet1,True)
  262. Небольшие улучшения в обработке параметров компонентом FIBQuery (Спасибо Andry Ogorodnik).
  263. Добавлена поддержка новой возможности FB2. Новая функциональность заключается в синтаксисе:
    Insert Into Table1 ...
    RETURNING FIELD1,FIELD2...
    Поддержка выражается в том, что если в датасете написан такой InsertSQL, то сразу же после срабатывания метода Post, те поля, значения которых запрос вернул через выражение RETURNING, будут обновлены в датасете. Это позволяет получать значения полей, которые сформировались триггерами без дополнительного вызова метода Refresh. Т.о. можно получить и значение первичного ключа, без предварительного обращения к генератору с клиента.
  264. Внесены небольшие правки для лучшей поддержки C++ Builder и Kylix.
  265. В SQLEditor при использовании SynEdit в Code Proposal добавилась обработка gen_id(). Т.е., при нажатии Ctrl+space в этом случае открывается список генераторов. (спасибо Джонатану Ниву)
  266. SQLEditor теперь показывает типы полей. (спасибо Джонатану Ниву)
  267. Исправленные ошибки:

  268. Неправильно генерировались запросы в режиме ограниченного кэша, если в клаузе order by присутствовали комментарии. Исправлено
  269. Неправильно работала опция poKeepSorting при добавлении ПЕРВОЙ записи в датасет. Исправлено
  270. Не срабатывала генерация первичного ключа в МИДАС приложениях, если в провайдере свойство ResolveToDataset = False. Исправлено
  271. Неправильно работало отображение Numeric полей при использовании несколько секционных форматов. Т.е. форматы типа '#,##0.00;#,##0.000;Zero'. Исправлено
  272. Исправлены ошибки в СloneCurrRecord, макросах и ошибки препарировании запросов; DoSortEx в OpenAsClone
  273. Ошибка парсера SQL. Проявлялась, когда за знаком "-" сразу же шел параметр, Например, SET IS_DELETE = -?OLD_RING_IDENT. Исправлено
  274. Ошибка в методе OpenAsClone. Проявлялся при попытке сортировки в отклонированном датасете и попытке модификации данных в отклонированном датасете. Исправлено
  275. Исправлена ошибка обработки опции poTrimCharFields, когда пользователь вводил много лишних пробелов в конце строки при работе с Varchar. После Post эти пробелы запоминались, а не отсекались. При этом данных отображались нормально, без хвостовых пробелов.
  276. Неправильно работал ExtLocateNext с опцией eloInSortedDS. Исправлено
  277. Ошибка при Refresh со включенной опцией poVisibleRecno при связке Мастер-деталь. При добавлении записи в Detail датасет и последующем выполнении Refresh, у Master датасета происходила смена текущей позиции на произвольную запись. Исправлено
  278. Неправильно генерировались модифицирующие запросы при смене текста SelectSQL, если при этом менялся также алиас модифицируемой таблицы. Исправлено
  279. Неправильная работа TpFIBTableInfoCollect.ClearForTable для таблиц с Именами взятыми в двойные кавычки. Исправлено
  280. При удачном перемещении указателя на последнюю запись в наборе после выполнения Locate, не сбрасывался флаг Eof. Исправлено
  281. В некоторых случаях возникало исключение в RefreshSQL. EFIBInterbaseError с кодом SQL -804 "Incorrect values within SQLDA
    structure". Исправлено
  282. Ошибка при работе датасета с одноименными макросами + изменением текста запроса после присвоения значения макросам. Исправлено
  283. Подправлено поведение метода LocateNext. Метод возвращал неправильный результат, если последняя запись датасета удовлетворяла условию поиска, и при этом уже была текущей при вызове метода.
  284. Устранена плавающая ошибка при компиляции пакетов под C++ Builder.
  285. Ошибка при использовании poProtectedEdit, возникавшая при завершении транзакции по CommitRetaining. Исправлено
  286. Исправлена ошибка "Invalid Blob_id". Проявлялась при вставке BLOB-поля из датасета через хранимую процедуру, если при этом не вызывался RefreshSQL после Post.
  287. Исправлена ошибка в методе TFIBXSQLVAR.SetAsXSQLVAR. Иногда приводила к проблемам при использовании методов BatchXXX.
  288. Исправлена ошибка в реализации poKeepSorting, из-за которой при Insert иногда не заполнялись значения упорядоченных полей.
  289. Внесены исправления в IB_Services в части директив для Kylix.

    Особенности и улучшения версии 6.4:

  290. Добавлен обработчик TpFIBDataSet.
    property AfterUpdateRecord: TFIBAfterUpdateRecordEvent
    read FAfterUpdateRecord
    write FAfterUpdateRecord
    где
    TFIBAfterUpdateRecordEvent = procedure(DataSet: TDataSet;
    UpdateKind: TUpdateKind;
    var Resume:boolean) of object;

    Событие происходит при работе методов ApplyUpdates и ApplyUpdToBase для каждой записи, модификации которой отправляются на сервер. Обработчик вызывается непосредственно ПОСЛЕ того, как успешно выполняется запрос на изменения.

  291. В TpFIBDataSet добавлена опция poRefreshAfterDelete. Если опция включена, то после Вызова метода Delete производится попытка Refresh только что удаленной записи. Если попытка успешная (т.е. запись физически не была удалена), то запись не будет помечаться в кэше как удаленная, и останется видимой.

  292. В FIBPlusTools закладка Preferences пополнена опциями poUseLargeIntField в PrepareOptions и настройкой DateTimeDisplay в DefaultFormats

  293. Добавлена совместимость компонентов FIBPlus и экспертов FIBPlusTools с Delphi 2006.

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

  295. Небольшие исправления в SQLNavigator из FIBPlusTools: при открытии окна SQL Navigator в только что созданном проекте приложения (File->New->Application; FIBPlus -> SQL Navigator) происходило исчезновение из проекта модуля, созданного по умолчанию (Unit1.pas).
  296. Небольшие исправления в механизме поиска текста SQL в SQLEditor.
  297. Исправлена ошибка в методе Locate, связанная с нахождением уже удаленных записей.
  298. Исправлена ошибка в обработке Field.DisplayFormat вида "#,##0.00;-#,##0.00; ;"
  299. Исправлена неправильная работа SQL Editor при установленном флажке "Use Selected Fiedls Only".
  300. Исправлена ошибка SQL Editor при генерации RefreshSQL, возникавшая из-за присутствия в начале SelectSQL закомментированного текста.
  301. Исправлена неправильная работа опции dcForceMasterRefresh.
  302. Исправлена ошибка в обработке опции poKeepSorting при попытке изменения первой записи TpFIBDataSet.
  303. Исправлена ошибка при применении poProtectedEdit. Позиция текущей записи сбивалась.
  304. Введен workaround для внутренней ошибку компилятора E5912, которая проявлялась при попытке скомпилировать строки FIBBCDField.Value := 1.
  305. Исправлена ошибка при работе с памятью в TFIBStringField. Ошибка проявлялась при создании полей в design-time, и последующем изменении в run-time текст SQL таким образом, что длина полей изменялась в большую сторону.

    Особенности и улучшения версии 6.4.1:

  306. При сборке под BDS 2006 TFIBDataSet является потомком класса TWideDataSet, а не TDataSet.

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

  307. Потеря значений параметров TpFIBClientDataSet, присвоенных в обработчике OnBeforeOpen. Исправлено.
  308. Утечка памяти при использовании DataSet.UniDirectional. Исправлено.
  309. Ошибка при использовании макросов с квотированием. Исправлено.
  310. Неправильная работа Locate в некоторых редких случаях. Исправлено.
  311. Исправление ошибки в коде Borland. Подробности смотреть в Bug Tracker.
  312. Исправление ошибки в коде Borland. Подробности смотреть в Bug Tracker.
  313. Для полей LargeInt не работало свойство Filter. Исправлено.
  314. Плавающее AV при обращении к DoTrim когда в качестве аргумента используется пустая строка. Исправлено.
  315. Неправильная работа LocateNext, если не все записи выбраны в кэш. Исправлено.
  316. При успешном поиске по сортированному датасету, при наличии нескольких записей, одинаковых по искомым полям, ExtLocate иногда показывал не первую найденную запись, а последнюю. Исправлено.

    Особенности и улучшения версии 6.4.5:

  317. Добавлена поддержка C++ Builder 2006
  318. Добавлена обработка полей charset UTF8 для Firebird 2
  319. В TpFIBDatabase добавлено свойство property UseBlrToTextFilter :boolean. Это свойство включает/выключает обработку BLOB полей с подтипами Blr (2), Acl(3)
  320. Метод FIBDatabase.QueryValueAsStr теперь возвращает пустую строку, если запрос, передаваемый в функцию, либо ничего не возвращает, либо содержит возвращаемое поле Null.
  321. В TpFIBDatabase добавлен обработчик: TOnApplyFieldRepository=procedure
    (DataSet:TDataSet;Field:TField;FieldInfo:TpFIBFieldInfo) of object;
  322. В DSContainer добавлен обработчик: TOnApplyFieldRepository=procedure(DataSet:TDataSet;Field:TField;FieldInfo:TpFIBFieldInfo) of object;
  323. В DSContainer добавлено свойство IsGlobal:boolean. Если это свойство установлено в True, DSContainer начинает действовать на ВСЕ датасеты приложения.
  324. Изменена обработка SQL запросов "COMMIT" и "ROLLBACK". Теперь такие запросы не отдаются серверу на исполнение, а вызываются соответствующие транзакции. Такое поведение позволяет корректно закрыть запросы, выполнявшиеся в рамках закрываемой транзакции.
  325. Совокупность изменений в пунктах 4-6 позволяет разработчику легко использовать свои собственные настройки в репозитарии полей.

    Пример
    :

    Если нужно настроить свойство EditMask, добавьте в таблицу репозитария поле EDIT_MASK, создайте контейнер в приложении, сделайте его глобальным, присвоив значение True в свойстве IsGlobal, затем в обработчике OnApplyFieldRepository напишите:

    procedure TForm1.DataSetsContainer1ApplyFieldRepository(DataSet: 
    TDataSet;Field: TField; FieldInfo: TpFIBFieldInfo);
    begin
    Field.EditMask:=FieldInfo.OtherInfo.Values['EDIT_MASK'];
    end;
  326. Редактор репозитария ошибок неправильно работал при выборе "Unique Indices". Исправлено.
  327. Ошибка в методе FIBDataSet . RecordFieldValue ( Field : TField ; aBookmark : TBookmark ): Variant ; Исправлена.
  328. Если текущий текст клаузы PLAN в запросе TpFIBDataSet . SelectSQL использовал неявный JOIN (т.е. начинался со скобки, а не со слова JOIN), то присваивание нового значения свойству TpFIBDataSet.PlanClause результировало запросом с неверной клаузой PLAN (с ненужной скобкой после слова PLAN). Исправлено.
  329. В TpFibErrorHandler была некорректная обработка сообщений о пользовательских exception под Firebird 2 (с учетом введенного в этой версии PSQL Stack Trace). Исправлено.
  330. Подправлена обработка потери соединения для случая, когда производится попытка его восстановления.
  331. В TFIBCustomDataSet.RecordFieldValue отсутствовала обработка BOOLEAN полей для InterBase 7. Исправлено.
  332. Ошибка CloneCurRecord: error with boolean field in record (IB7). Исправлена .
  333. Ошибка в LocateNext: Если последняя запись датасета удовлетворяла условию поиска, и поиск начинался с этой записи, то LocateNext возвращал True. Исправлена.
  334. Неправильная работа методов LocateXXX в сочетании с фильтрацией по вычисляемым полям. Проявлялась в том случае, если Locate происходил по невычисляемым полям, а фильтрация ( Filtered ) - по вычисляемым. Исправлено.
  335. Возникновение EAccessViolation после отработки OnUpdateError при CachedUpdates=True и OnUpdateError "UpdateAction:=uaAbort;". Исправлено.
  336. Ошибка в SQLEditor при попытке работы с хранимыми процедурами. Исправлена.
  337. Ошибка при генерации RefreshSQL, если alias таблицы начинался с буквосочетания "AS". Исправлена.
  338. Ошибка при выполнении некоторых execute block. Исправлена.
  339. Ошибка при обработке потери соединения в случае, если существовало несколько соединений к разным базам данных. Исправлена.
  340. Незначительная ошибка в методе FIBQuery.PrepareArraySqlVar. Исправлена.
  341. Ошибка при присвоении в BCD поле строкового значения '000...'. Как пример FIBBCDField1.asString:='0000';

    Особенности и улучшения версии 6.5:

  342. Теперь SQLMonitor показывает текст SQL уже после применения макросов и кондишенов
  343. Событие OnFillClientBlob теперь вызывается не только при первом считывании записи, но и после ее модификации
  344. В TpFIBDataSet.Options добавлена опция poUseSelectForLock. Она действует при включенном режиме poProtectedEdit. Если poProtectedEdit = True, то блокирование записи будет производиться не "холостым апдейтом", а следующей конструкцией:
    Select * from TABLE1 WHERE ... for update with lock
    Примечание: Эта особенность работает ТОЛЬКО для Firebird)
  345. Добавлен метод FIBQuery.ExecuteImmediate, который немедленно выполняет запрос без предварительного Prepare (cм. документацию по IB API функции isc_dsql_execute_immediate)
  346. Выполнение DDL запросов теперь производится через ExecuteImmediate.
  347. В процедуру CopyFieldsProperties добавлено копирование свойств AutoGenerateValue, ConstraintErrorMessage, CustomConstraint, Tag и Index.
  348. Свойство pFIBDataSet.ReceiveEvents и событие pFIBDataSet.OnUserEvent объявляются устаревшими и убираются из основного кода. Пользователям, которые все же используют их, нужно компилироваться с дефайном USE_DEPRECATE_METHODS2 в файле FIBPlus.inc.
  349. Исправленные ошибки:

  350. В некоторых случаях добавление записи в сортированный набор данных происходило неверно. Исправлено.
  351. Ошибка в TpFIBCustomService.GenerateSPB проявлялась при пустом значении свойства Params. Исправлена.
  352. При смене свойства Filter не происходило обнуления результатов предыдущего фильтра. Исправлено.
  353. Ошибка в методе Locate при попытке поиска числовых значений в стринговых полях. Исправлена.
  354. Поправлена работа SQLMonitor при мониторинге exception (иногда приводило к зависанию).
  355. Подправлен SQL редактор датасета для правильной работы с запросами, в которых одна и та же таблица встречается по нескольку раз (работа гарантирована только под Firebird 2)
  356. Для кэшированных вычисляемых полей в TFIBCustomDataSet.RecordFieldValue не был предусмотрен тип ftSmallInt. Исправлено.
  357. Неправильная обработка полей с чарсетом UTF8 и collate, отличным от значения по умолчанию (default). Исправлена.
  358. Соединение автоматически закрывалось, обнаружив, что база находится в shutdown. Далее производилась обработка потери коннекта (при использовании pFibErrorHandler). Исправлено.
  359. Ошибка в генераторе запросов: не показывался тип поля для полей DOUBLE PRECISION. Исправлена.
  360. В некоторых случаях была небольшая утечка памяти при работе с BLOB-параметрами. Исправлена.
  361. Ошибка при поиске (Locate) Unicode-строки в поле varchar(unicode_fss) при включенной опции poTrimCharFields. Исправлена.
  362. Поправлена функция function InvertOrderClause(const OrderText:string):string; (не обрабатывала Order By с употреблением NULLS FIRST, как следствие, это приводило к некорректной работе режима ограниченного cache для таких запросов).
  363. Поправлены методы TpFIBDataSet.PSInTransaction, PSStartTransaction,PSEndTransaction.
  364. Ошибка при выполнении DDL запросов в Unicode коннекте (портились комментарии, сделанные на всех языках, кроме английского). Исправлена.

    Особенности и улучшения версии 6.7:

  365. Добавлена поддержка Delphi 2007
  366. Добавлена поддержка InterBase 2007
    • введен специальный define в FIBPlus.inc {$DEFINE SUPPORT_IB2007}. Если этот define включен, в FIBPlus добавляется поддержка некоторых особенностей InterBase 2007
    • добавлен метод TpFIBDatabase.IsIB2007Connect:boolean;
    • добавлено свойство InstanceName в ConnectParams
  367. Добавлена поддержка charset SUPPORT_KOI8_CHARSET и define в FIBPlus.inc {$DEFINE SUPPORT_KOI8_CHARSET}
  368. Изменен метод procedure TFIBXSQLVAR.SetAsVariant(Value: Variant);
    Теперь он может также работать с типом данных OleVariant (спасибо Danny Van den Wouwer)
  369. В редакторе репозитария датасетов появилась возможность выбирать генератор из списка существующих.
  370. У TpFIBDatabase в свойстве TConnectParams появилось подствойство IB2007: TIBConnectParams, где TIBConnectParams содержит поле InstanceName: string. (Только при включенном {$DEFINE SUPPORT_IB2007})
  371. В редакторе TpFIBDatabase появилась возможность отдельно указывать порт подключения (только для Firebird).
  372. Исправленные ошибки:

  373. Некоторые значения, например, {00000000-0000-0000-0000-000000000000}, неверно отображались в TFIBGuidField. Исправлено.
  374. Ошибка при вызове метода IsEmpty при установленном свойстве DataSet.CacheModelOptions.CacheModelKind= cmkLimitedBufferSize. Исправлена.
  375. Ошибка в процедуре Sort (unit fibDataset) c DisableScrollEvents. Проявлялась, если в dataset содержалось не более одной записи. Исправлена.
  376. Исправлена ошибка в методе function TpFIBDataSet.PSGetParams: TParams; (спасибо Danny Van den Wouwer).
  377. Внесены исправления в pFIBClientDataSet для корректной работы с Unicode полями под BDS2006.
  378. Ошибка в методе TFIBQuery.DoAfterExecute приводила к неправильной последовательности вывода действий на SQLMonitor. Исправлена (спасибо Danny Van den Wouwer).
  379. Ошибка при смене клиентской библиотеки в runtime. Исправлена.
  380. В методе TFIBXSQLVAR.GetAsDateTime проявлялась ошибка при значениях даты, меньших даты, принятой за начальную в InterBase. Исправлена.
  381. В методе WhereClause неправильно обрабатывались комментарии в стиле Firebird (--). Исправлено.
  382. Ошибка при обработке запросов c командой "with" для Firebird 2.1. Исправлена.
  383. Не работали TGUID поля для TClientDataSet. Исправлено (спасибо Антону Трилю).
  384. Не работали TGUID поля в связке с QuantumGrid. Исправлено (спасибо Антону Трилю).
  385. В случае потери связи с сервером обработка потери коннекта делалась неверно, когда TFIBSQLLogger был подключен к TpFIBDatabase. Программа попадала в цикл, при этом OnLostConnect вызывался многократно. При отключении TFIBSQLLogger от TpFIBDatabase все работало нормально. Исправлено.
  386. Изменено объявление обработчиков событий TBeforeLoadBlobFromSwap, TBeforeLoadBlobFromSwap. Старое объявление обработчиков неправильно работало для Delphi 5.

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

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

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

Хочу сказать огромное спасибо за вашу работу! Вы молодцы! Честно говоря очень приятно иметь с вами дело! >>

Сергей Каптарь
Раздел для покупателей
Получение полных версий и обновлений. Перейти в Customer's Center

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