QUERY + TDBRICHEDIT+ UpdateSQL 重复存盘时 出错? General SQL error BLOB not

  • 主题发起人 主题发起人 y_peijun
  • 开始时间 开始时间
Y

y_peijun

Unregistered / Unconfirmed
GUEST, unregistred user!
QUERY + TDBRICHEDIT+ UpdateSQL 重复存盘时 出错? General SQL error BLOB not found. 求解(200分)<br />系统用 二个读写QUERY型 以master/detail 连接,( 数据库 interbase)
其中有二 BLOB 字段 由 Tdbrichedit 控制,
query 的updateobject 采用 UpdateSQL 。

在记录修改后, 由 ApplyUpdates 将缓冲信息 写入库中。
记录的添加、删除 都没有问题,少量修改也没有问题,
但一条记录连续多次修改时,(存盘后再修改)主要是BLOB 字段来回修改, 有时多达7次时,
ApplyUpdates 操作会出错? (造成系统不稳定)
系统提示:General SQL error BLOB not found.
求解 ?

尝试 在存盘前,将BLOB 字段手工强制刷新,但问题依旧未能解决。

Stream1:= TMemoryStream.Create;
dbrichedit1.Lines.SaveToStream(Stream1);
Stream1.Position:=0;
Stream2:=TBlobStream.Create(FieldByName('BLOB')as TBlobField,bmReadWrite);
Stream2.Position:=0;
Stream2.CopyFrom(Stream1, Stream1.Size);
Stream1.FREE;

QUERY.POST;

DATABASE.StartTransaction;
try
QUERY.ApplyUpdates; //同一条记录多次重复后 出错
DATABASE.Commit;
except
DATABASE.Rollback;
Application.MessageBox('....',
'出错信息:', MB_OK);

raise;
end;
QUERY.CommitUpdates;
 
在oracle中,偶没有用流处理,
onnewrecord时用 blobfieldname.asvariant := ' ';赋初值
(不能为空,否则insert时出错)

其他修改直接交db处理,到现在都好好的,不知对你有没有用。
 
我的问题归结为 :

在 一个 QUERY 里 对 BLOB 字段的 修改,保存(ApplyUpdates) ...

再修改,再保存 ...

重复 不能超过 7 次 。 否则必错。 ???
 
是不是STREAM2没有释放的缘故?
 
与STREAM有没有释放没有关系, 为了判断原因才增加“BLOB 字段手工强制刷新”这段的。
 
你的Stream2似乎没有Free?
另外,我发现UpdateSQL本身都不是很稳定,不过看你的错误原因似乎是Blob的原因,你看看
TBlobStream内存方面有没有什么问题?
你也可以试试用TBlobField,而且Stream最好先Clear一下.
 
多人接受答案了。
 
后退
顶部