Мы столкнулись с очень странной проблемой. Мы работаем с базой данных 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 мы получаем сообщение об ошибке «Аргументы неверного типа, находятся за пределами допустимого диапазона или конфликтуют друг с другом». при запуске из Delphi IDE, но без ошибок, если мы запускаем снаружи.
Большая проблема в том, что временная часть поля DATO исчезла, когда мы обновили поле MEMO. Если мы не включим поле MEMO, все в порядке.
Еще одна странная вещь: если мы используем TADODataSet напрямую для обновления полей, все работает нормально. Только при обновлении через ClientDataSet это проблема.
Я сделал небольшой демонстрационный проект, иллюстрирующий проблему.
Test.zip (1090 КБ):
http://www.consultas.no/u/3037f738
Все советы и подсказки будут высоко оценены!
С наилучшими пожеланиями,
Бьорн Ларсен