简体   繁体   中英

Delphi: Text-blobs in ClientDataSet on Firebird 2.5 with ODBC

We have faced a very strange problem. We are running a firebird 2.5 database with the following table structure.

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);

We are using Firebird 2.5.1 + ODBC 2.0.0.151 on Windows 7.

We use Delphi XE, with TADOConnection + TADODataSet + TDataSetProvider + TClientDataSet to connect to the database.

The problem is when we insert (or update) a new record into the ClientDataSet and updating the field MEMO. (TMemoField) (This has been working perfekt in FB 1.5 and with all versions of MS SQL server).

Now with a firebird 2.5 database we get the error message "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another." when running from the Delphi IDE, but no error if we run outside.

The big problem is that the time part of the field DATO is gone when we update the field MEMO. If we don't include the MEMO field, everything is OK.

One other strange thing is that if we use the TADODataSet directly to update the fields, everything works fine. It's only when updated through the ClientDataSet it is a problem.

I have made a small demo project illustrating the problem.

Test.zip (1090 KB): http://www.consultas.no/u/3037f738

All tips and hints will be highly appreciated!

Best regards, Bjørn Larsen

Have you tried using TBlobField instead of TMemoField for the blob ?

Sorry, I don't have Delphi available right now to play around locally.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM