我要把一个OleVariant变量的数据写到Oracle数据库中的Blob字段,是通过Tblobstream流来实现的,可是提交的时候总是提示:Ora-22990:Lob定位器无法扩展事务处理,请问这是什么原因?该怎么解决?
解决方案 »
- DBGrid 如何本地排序
- 怎样把查询所得的字段值修饰后再添加到dbgrideh列中,30分
- [Warning] Unit3.pas(7): Unit 'FileCtrl' is specific to a platform 这是什么错误啊?
- 如何将数据集内容导出为Excel文件?
- 如何解决项目移到其它地方后不能正常运行?
- 还是老问题,可是没人可以圆满解决(今天就要答案)
- 一个数据库的效率问题的疑问,请各位进来看看!
- reportbuilder 10 中的memo在换的时候第二行出现乱码,求助!!
- 如何接管局域网中计算机的键盘和鼠标?
- 老问题重提。。。
- 有关鼠标定点的问题?
- 高分请教,用程序实现Excel和Access之间数据导入,导出的问题?
try
DataBase.StartTransiction;
Query.Insert;
Query.FieldByname('id').asstring := edit1.text;TBlobField(Query.FieldByname('Blob')).LoadFromStream(varBlobstream);
//上面不行就用
//TBlobField(Query.FieldByname('Blob')).Assign(varBlobstream);Query.applyupdates;
Query.commitupdates;
DataBase.Commit;
except
database.rollback;
end;
var
vTreeStream : TBlobStream;
TmpMemStream : TMemoryStream;
begin
if not TbZwxx.Active then
TbZwxx.Active := True;
TbZwxx.Edit;
TmpMemStream := TMemoryStream.Create;
try
try
vTreeStream := TBlobStream.Create(TbZwxxZWTZM,bmWrite);
//把OleVariant变量读取到流中
OleVariantToStream(FvntSourFeature,TmpMemStream);
TmpMemStream.SaveToStream(vTreeStream);
TbZwxx.Post;
except
end;
finally
TmpMemStream.free;
end;
end;
OleVariantToStream 是一个转换函数如下:procedure OleVariantToStream(AVariant: OleVariant; var AStream: TMemoryStream);
var
MyBuffer: Pointer;
size: Integer;
begin
AStream.Clear;
AStream.Seek(0, soFromBeginning);
if VarIsArray(AVariant) then
size := VarArrayHighBound(AVariant, 1) + VarArrayLowBound(AVariant, 1) + 1;
MyBuffer := VarArrayLock(AVariant);
AStream.WriteBuffer(MyBuffer^, size);
VarArrayUnlock(AVariant);
end;