Мы столкнулись с очень странной проблемой. Мы запускаем базу данных firebird 2.5 со следующей структурой таблиц.
CREATE TABLE TEST (
ID INTEGER NOT NULL,
MEMO BLOB SUB_TYPE 1 SEGMENT SIZE 80,
DATO TIMESTAMP
);
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (ID);
Мы используем Firebird 2.5.1 + ODBC 2.0.0.151 в Windows 7.
Мы используем Delphi XE с TADOConnection + TADODataSet + TDataSetProvider + TClientDataSet для подключения к базе данных.
Проблема в том, что мы вставляем (или обновляем) новую запись в ClientDataSet и обновляем поле MEMO. (TMemoField) (Это отлично работает в FB 1.5 и со всеми версиями сервера MS SQL).
Теперь с базой данных firebird 2.5 мы получаем сообщение об ошибке «Аргументы неправильного типа, находятся за пределами допустимого диапазона или конфликтуют друг с другом». при запуске из среды IDE Delphi, но без ошибок, если мы запускаемся снаружи.
Большая проблема в том, что временная часть поля DATO исчезает, когда мы обновляем поле MEMO. Если не включить поле MEMO, все в порядке.
Еще одна странность заключается в том, что если мы используем TADODataSet напрямую для обновления полей, все работает нормально. Это проблема только при обновлении через ClientDataSet.
Я сделал небольшой демонстрационный проект, иллюстрирующий проблему.
Test.zip (1090 КБ): http://www.consultas.no/u/3037f738
Мы будем благодарны за все советы и подсказки!
С уважением, Бьёрн Ларсен