Delphi: текстовые объекты в ClientDataSet на Firebird 2.5 с ODBC - PullRequest
1 голос
/ 20 октября 2011

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

Все советы и подсказки будут высоко оценены!

С наилучшими пожеланиями, Бьорн Ларсен

1 Ответ

0 голосов
/ 21 октября 2011

Вы пытались использовать TBlobField вместо TMemoField для блоба?

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

...