Hi all,
Help! I always avoid cross-posting, but I'm making a small exception in
this case in the hopes that someone from TeamB will recognize this
issue. It isn't a direct cross-post however, but I am re-posting some
information I posted in the Multi-Tier Databases section. I've added
additional configuration information and other useful stuff. Here is the
problem:
I'm fighting with D4 C/S, Oracle 8 and the Oracle 8 SQL Links driver at
the moment, and I'm encountering this with blob fields. Here is a code
fragment (many things resolved for clarity):
Note: userData.Perms is a TStringList.
--- Begin Code Fragment ---
with theQuery do
begin
DatabaseName := FDatabaseName;
RequestLive := True;
SQL.Add( 'SELECT WIREDNAME, WIREDID, LONGNAME, ACCESS_LVL, ISGROUP,
PERMS' );
SQL.Add( 'FROM USRPERM WHERE WIREDID = 100' );
try
Open;
Edit;
Fields[0].AsString := userData.WiredName;
Fields[1].AsInteger := userData.WiredID;
Fields[2].AsString := userData.LongName;
Fields[3].AsInteger := userData.Access;
{ Handle differences between Paradox and RDBMS Field Definition }
if Fields[4] is TBooleanField then
Fields[4].AsBoolean := userData.IsGroup
else if Fields[4] is TIntegerField then
Fields[4].AsInteger := ord(userData.IsGroup);
(Fields[5] as TBlobField).Assign( userData.Perms ); // Exception
here
Post;
Close;
except
on e:Exception do
begin
AppMessage(e.Message, mtError, [mbOK], 0);
end;
end;
end;
--- End Code Fragment ---
Now, the above code works fine for:
Oracle 7.2/7.3
MSSQL 6.5
DB2 5.0
Paradox
But, under Oracle 8, I keep getting "Non-blob column in table required
to perform operation". When I trace into the D4 source code, the
exception is being thrown by the call to DbiOpenBlob in
TBlobStream.Create. I can't seem to work around this. It's killing my
ability to deliver the product on time.
Can someone help? TeamB? Inprise? Anyone?
--- IDAPI Information ---
In my IDAPI Configuration for this database has SQLPASSTHRU MODE set to
SHARED NOAUTOCOMMIT as the SQL Links documentation requires. BLOBSIZE is
set to 2048.
--- SQL Table Definition (Oracle 8) ---
CREATE TABLE USRPERM (
WIREDNAME VARCHAR2(40) not null,
WIREDID NUMBER(38) not null,
LONGNAME VARCHAR2(60) null,
ACCESS_LVL NUMBER(5) null,
ISGROUP NUMBER(1) null,
PERMS BLOB null,
CONSTRAINT PK_USRPERM Primary Key (WIREDNAME,WIREDID)
)
--- SQL Table Definition (Oracle 7) ---
CREATE TABLE USRPERM (
WIREDNAME VARCHAR2(40) not null,
WIREDID NUMBER(38) not null,
LONGNAME VARCHAR2(60) null,
ACCESS_LVL NUMBER(5) null,
ISGROUP NUMBER(1) null,
PERMS LONG RAW null,
CONSTRAINT PK_USRPERM Primary Key (WIREDNAME,WIREDID)
)
--- Other Information ---
I first tried to use the Oracle 7 table definition (with LONG RAW
instead of BLOB) in Oracle 8. Updates to the blob field resulted in
ORA-32255 (unknown Message). Of course, looking in the Oracle 8
documentation, ORA-32255 isn't defined/documented anywhere, and I
couldn't resolve the problem. So, I went to BLOB, and now run into this
problem.
Thanks to anyone who can help.
--
Marc Batchelor