Компоненты IBX
Внимание! Перед использованием компонент, для правильного отображения форматов и правильной работы EditFormat, необходимо установить системные переменные:
DefaultFormatSettings.LongDateFormat:='dd.mm.yyyy';
DefaultFormatSettings.ShortDateFormat:=DefaultFormatSettings.LongDateFormat;
DefaultFormatSettings.DateSeparator:='.';
DefaultFormatSettings.TimeSeparator:=':';
DefaultFormatSettings.ThousandSeparator:='';
DefaultFormatSettings.CurrencyString:='р.';
Application.UpdateFormatSettings := false; //Запретить смену форматов
Компоненты IBX версия 2.2.8
Исправлен не работающий TIBCustomDataset.FindParam(ParamName: string): TIBXSQLVAR;
версия 2.2.6
Небольшие исправления в TIBCustomDataSet.InternalRefresh Добавлен экспериментальный метод TIBCustomDataSet.RefreshVisibleRows;
версия
2.2.5
Исправления в модуле TIBCustomDataSet.InternalPostRecord влияют на использование TIBTable.
версия
2.2.4
Исправления в модуле IBUtils, все вхождения
функции AnsiUpperCase заменены на UTF8UpperCase.
версия
2.2.3
TIBDataSet добавлено свойство CancelActon: Boolean (по
умолчанию True), оно
работает совместно с AutoCommit и срабатывает
при вызове TIBDataSet.Cancel, если при отмене
записи UpdateTransaction.inTransaction то к транзакции
будут применены действия в соответствии со
значением свойства UpdateTransaction.DefaultAction для
завершения транзакции. Например может
возникнуть
ситуация: при вызове метода Post, UpdateTransaction
стартует транзакцию, но на стороне сервера
обнаруживается ошибка и возникает
исключение и
TIBDataSet.Post не завершается, набор данных
остается в состоянии редактирования.
Пользователь отменяет запись, которой не
удалось сделать Post,
но UpdateTransaction остается активной (можно
увидеть в мониторе транзакций). Учитывая
параметры, с которыми стартует UpdateTranscation,
видно,
что транзакция влияет на Oldest Active Transaction (OAT),
она просто застряет до тех пор пока жив сам
TIBDataSet, либо в результате следующей
операции с этой-же транзакцией не будет
выполнен Commit или Rolback. Но до тех пор пока
транзакция в активном состоянии, будут
накапливаться
версии записей, причем не связанные
напрямую с данной транзакцией т.к. OAT
застряла и не движется, это приведет к
чрезмерному потреблению ресурсов
сервера и замедлению работы.
версия
2.2.2
Добавлена поддержка параметра транзакции
isc_tpb_lock_timeout. Доступен только для FireBird
версии 2.1 и выше. Применяется совместно с
парметром
isc_tpb_wait. Параметр isc_tpb_lock_timeout указывает
время ожидания в секундах, в случае, если
изменяемая запись заблокирована другой
транзакцией,
по истечении этого времени ожидания будет
выдана ошибка блокировки. Если isc_tpb_lock_timeout
не указан, время ожидания когда
конкурирующая
транзакция отпустит запись с параметром
isc_tpb_wait будет бесконечным. Применение, в
параметрах транзакции указать lock_timeout=10
(здесь 10 - количество секунд ожидания).
Переделан редактор компонента TIBTransaction, в
нем доступен пункт "FB wirte", в котором wait
применяется
совместно с lock_timeout.
версия
2.2.1
TIBCustomDataSet.DefFormats добавлено EditDate, EditDateTime,
EditTime
TIBCustomDataSet.DetailConditions добавлено [dcForseMasterPost],
еслу у TIBCustomDataSet назначен DataSource.DataSet
и DetailConditions содержит dcForseMasterPost, то перед
изменением данных если DataSource.DataSet.state in
[dsInsert, dsEdit],
то это вызовет DataSource.DataSet.Post
версия
2.2
Исправлен редактор компонента TIBDatabase, в
него добавлено поле LibraryName, где можно
указать путь к клиентской библиотеке.
Иправлено тестирование подключения при
нажатии на кнопку Test.
Улучшен механизм Master-Detail в TIBCustomDataSet.
Раньше, любое событие в DataMaster приводило к
переоткрытию набора данных
Detail. Сейчас Detail переоткрывается, только
если в Master сменилась строка.
Добавлено свойство DetailConditions: TDetailConditions
[dcForceOpenClose, dcForceMasterRefresh]. Если у TIBDataSet
установлено
dcForceOpenClose и назначен DataSource.DataSet, то при
открытии и закрытии DataSource.DataSet сам TIBDataSet
вместе с ним открывается и
закрывается, если назначено dcForceMasterRefresh, то
после Post и Delete в TIBDataSet вызвается
DataSource.DataSet.Refresh.
версия
2.1.1
TIBCustomService свойство LibraryName добавлено stored
LibNameStored
версия
2.1
Улучшена работа свойства DefValueFromSrv - если True
то при добавлении новой записи получает
значения по умолчанию
заданные для полей при создании таблицы.
Улучшение связано с тем, что значения по
умолчанию считываются не только из
тех, что определены при создании поля, но и
из доменов.
версия
2.0.9
Исправления в TIBCustomDataSet. Исправлена ошибка,
которая могла приводить к
UpdateTransaction.RollBack в случае закрытия набора
данных, даже если
AutoCommit = False и существуют другие компоненты,
использующие эту транзакцию.
версия
2.0.8
Исправления в компоеннте TIBCustomDataSet. Изенены
форматы для числовых полей.
ВНИМАНИЕ! Чтобы отображение форматов
работало правильно, в вашей программе,
перед
началом работы, вы должны установить
глобальную системную переменную
DefaultFormatSettings.ThousandSeparator := ' '; //Пробел
версия
2.0.6
Исправления в компоеннте TIBCustomDataSet в
InternalRefresh в коде с выбором транзаккции для
обновления данных.
В некоторых случаях нужная транзакция
(читающая или пишущая) выбиралась не
правильно.
версия
2.0.5
Добавлено свойство DefValueFromServer: Boolean, если True
то при добавлении записи будет подставлять
значения
поля заданные по умолчанию на стороне
сервера при создании таблицы.
версия
2.0.2
Исправлен не работающий TIBDatabase.CreateDatabase
Исправлена работа с TIBBlobStream.
+ function TIBCustomDataSet.FN(FieldName): TField; для упрощения
доступа к полю по имени.
версия
2.0.1
TIBCustomDataSet
+property AutoErrorEvent: Boolean. Если True, то в при
открытии набора данных, на события OnPostError и
OnDeleteError
(если обработчики у них отсутствуют)
назначаются обработчики событий, которые в
случае ошибки автоматически для
UpdateTransaction выполняют RollBack.
Исправления в TIBStringField.
Исправлена ошибка в TIBDatabase.SetDefaultTransaction
которая могла приводить к краху на 64 битных
системах.
версия 2.0
Изменения в организации доступа к API FireBird. В
предыдущей версии, независимо от того
какое количество компонентов
TIBDataBase используется в программе,
существовал единый метод загрузки
клиентской библиотеки, а это значит, что
работа из программы была возможна только с
серверами одной и той же версии, нельзя
было загрузить 2 разные
клиентские библиотеки. Работа с
компонентами была возможна, только если
предварительно удалось загрузить
клиентскую
библиотеку. В версии 2.0 каждый компонент
TIBDatabase получил персональный механизм
манипулирования и доступа к
клиентской библиотеке, загрузка
библиотеки происходит при установке
соединения с базой, при разрыве соединения,
библиотека освобождается.
В компонент TIBDatabase добавлено свойство
LibraryName - в котором указывкается имя
библиотеки. Поиск и загрузка
библиотеки происходит исключительно по
указанному имени. Имя может быть указано с
полным путем и без. Если
путь не указан, поиск библиотеки
происходит в папке с выполняемой
программой. В свойстве LibraryName
по умолчанию присутствует строка: Для windows -
'fbclient.dll', для Linux - 'fbclient.so'.
Переделан метод получения значения
генератора в TIBGenerator. Добавлено свойство
GenerateFor_0: Boolean по умолчанию
True. Это позволяет генерить значение не
только когда в поле пусто, но и когда там 0.
Исправлена сортировка в TIBCustomDataSet. Если в запросе
присутствовали русские буквы запрос для
сортировки модифицировался не
правильно.
версия 1.0.13
Изменения в TIBCustomDataSet. изменен метод InternalPost,
в случае, если после выполнения
модифицирующего
запроса требуется Refresh текущей записи, то
он выполняется после Commit пишущей
транзакции. Учитывая то, что
QRefresh сам выбирает себе транзакцию (если
активна UpdateTransaction то используется она,
иначе используется Transaction),
то в случае с Autocommit, все вызовы Refresh пойдут
через читающую транзакцию.
версия 1.0.12
Изменения в TIBCustomDataSet. Изменен метод
FullRefresh.
Изменения TIBXSQLVAR. Изменен метод SetAsVariant
версия
1.0.11
Изменения в TIBCustomDataSet. Методы Prepare всех SQL
запросов проходят через читающую
транзакцию, не
зависимо от UpdateTransaction.
версия
1.0.10
улучшен/исправлен метод TIBDataSet.RefreshAll
Исправлен баг в TIBDataSet с назначением EditFormat
для TNumericField и его производных, если
отсутствует
дробная часть (поле для целого числа).
версия 1.0.9
В TIBCustomDataSet добавлено свойство AutoFetchAll: Boolean;
Если свойство установлено в True, то после
открытия
набора данных автоматически вызывается
FetchAll. Это особенно актуально, если
используется AutoSort,
который вызывает переоткрытие набора
данных, и каждый раз требуется получить все
записи с сервера.
Версия
1.0.8.
Исправлены ошибки.
Добавлено свойство OrderFields, с помощью
которого можно упорядочить данные по
любому полю.
Внимание! Этот метод не производит
локальную сортировку данных в буфере, а
изменяет SQL запрос
в QSelect, добавляя или изменяя инструкцию ORDER
BY.
изменен метод Locate, в нем UpperCase заменены на
UTF8UpperCase, найденная строка центрируется.
версия 1.0.6
Изменения в этой версии:
Компонент TIBCustomDataSet:
Добавлено свойство UpdateTransaction, с помощью
которого работа с базой
происходит в рамках 2х транзакций. SelectSQL
будет использовать
Transaction, у этой транзакции рекомендуется
назначить следующие параметры:
read
версия
1.0.7
Изменения в этой версии
Компонент TIBDatabase:
Добавлено свойство DefaultUpdTransaction: TIBTransaction
Компонент TIBCustomDataSet:
При установке поля Database, свойство UpdateTransaction
устанавливается
автоматически как из
Database.DefaultUpdTransaction
read_committed
rec_version
nowait
С этими параметрами транзакция стартует в
режиме только чтение и фактически в
состоянии Commit,
поэтому может жить сколь угодно долго, не
оказывая ни какого влияния на работу
базы.
Короткие "пишущие" запросы из InsertSQL, ModifySQL,
DeleteSQL будут использовать UpdateTransaction, для
неё
рекомендуется назначить следующие
параметры:
write
wait
no_rec_version
read_committed
Это наиболее оптимальный вариант чтобы
избежать DeadLock.
RefreshSQL использует
транзакции по следующему алгоритму: Если
(UpdateTranscation.InTransacton = True) то
используется UdateTransaction иначе используется
Transaction.
После выполнения запроса из InsertSQL, ModifySQL,
DeleteSQL, до завершения транзакции данные
текущей записи
автоматически перечитываются с помощью
RefreshSQL, поэтому в UpdateTransaction добавлен
параметр read_commited.
Изменен редактор компонента TIBTransaction, в нем
вариант Read Commited вписывает первый набор
параметров для чтения,
добавлен вариант Read-write, который вписывает
второй набор параметров для пишущих
запросов.
Добавлены свойства AutoStartTransaction и AutoCommit
Добавлена эмуляция Boolean полей и
автотримирование строковых полей
(TIBCustomDataSet.AutTrim)
Добавлена поддержка выражений RETURNING FIELD в
Insert и Update запросах, поддержка возвращаемых
значений
из EXECUTE PROCEDURE, поддержка выражения EXECUTE BLOCK.
В TIBCustomDataSet вложен класс DefFormats для
управления форматами TDateTimeField и TNumericField (и от них
производных),
для задания определенного формата
конкретного поля (TBooleanField, TNumericField)
добавлено свойство
FieldsFormats: TStings, в
нем для задания формата для поля MYFIELD нужно
указать:
MYFIELD=# ### ##0.0000
Добавлено свойство EditFormats которое задает
для конкретных полей: EditFormat для TNumericField и
EditMask для остальных.
Пример:
MYDATEFIELD=00.00.0000
Автор изменений Копнин Юрий.
http://www.visual-t.ru