Delphi: текстовые блобы в ClientDataSet на Firebird 2.5 с ODBC

Мы столкнулись с очень странной проблемой. Мы запускаем базу данных 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

Мы будем благодарны за все советы и подсказки!

С уважением, Бьёрн Ларсен


person Bjørn    schedule 20.10.2011    source источник


Ответы (1)


Вы пробовали использовать TBlobField вместо TMemoField для большого двоичного объекта?

Извините, у меня сейчас нет Delphi, чтобы поиграть на месте.

person Eduardo    schedule 20.10.2011
comment
Извините, но это не помогло. Та же проблема. - person Bjørn; 21.10.2011