莫名其妙的问题
本人问题如下:
由一个Table控件(tab_tmp),其中有一个字段 'TEXT' 为ftBlob类型
保存数据的代码如下:
procedure Tmain.bt_saveClick(Sender);//保存按扭(bt_save)的OnClick事件
var
l_Stream:TBlobStream;
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
begin
if FileExists('tmp.doc') then DeleteFile('tmp.doc');
l_Ole.SaveToFile('tmp.doc');
MyFile:=TFileStream.Create('tmp.doc',fmOpenRead);
Stream := TBlobStream.Create(tab_ht_mb.fieldbyname('TEXT') as TBlobField, bmWrite);
//tab_ht_mb.fieldbyname('TEXT') 类型为fbBlob(DB2数据库)
MemSize := MyFile.Size;
Inc(MemSize);
Buffer := AllocMem(MemSize);
try
tab_ht_mb.Edit; //tab_ht_mb为TTable控件
Stream.Seek(0, soFromBeginning);
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
finally
MyFile.Free;
Stream.Free;
end;
with tab_ht_mb do
begin
ApplyUpdates;
CommitUpdates;
end;
end;
以上代码都能正常保存数据,但是在新增(或删除)一条记录保存后,再通过
TTable.Prior的方法后不能刷新ToleContailer中的内容(发生'Stream read error' 错误,
后跟踪l_Stream的长度发现为4,非正常长度),(而TTable.Next,TTable.Last,TTable.First)
方法可以刷新ToleContainer中的内容我是在TTable的AfterScroll的事件中刷新ToleContainer的内容,
代码如下:
procedure TForm_ht_sz02.tab_ht_mbAfterScroll(DataSet: TDataSet);
var
l_Stream:TStream;
begin
try
l_Stream:=tab_ht_mb.CreateBlobStream(tab_ht_mb.fieldbyname('TEXT') asTBlobField,bmRead);
//tab_ht_mb为TTable控件
l_ole.LoadFromStream(l_Stream) (此句产生'Stream read error'错误)
//l_ole为ToleContainer控件
except
end;
l_Stream.Free;
end;
以上'Stream read error'的错误只要是通过保存(删除)记录后,再通过TTable.Prior方法,移到当前保存(或删除)的记录的
前面任意一条记录都会出现,本人反复调试都由该错误发生,忘各位大虾不吝指教!!!!!!!!