Oracle8中Blob字段的读写 我要把一个OleVariant变量的数据写到Oracle数据库中的Blob字段,是通过Tblobstream流来实现的,可是提交的时候总是提示:Ora-22990:Lob定位器无法扩展事务处理,请问这是什么原因?该怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 整段代码是什么,贴出来tryDataBase.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;exceptdatabase.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; 补充:FvntSourFeature 是一个OleVariant变量(Byte数组)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; delphi跟php的Unix的时间算法竞然不相同 QReport 控件 求助 如何用delphi在SQL的image字段里存储问题(非常急)希望高手指点 怎样在Delphi中使用quick report 打印报表呢? 50分求教,怎实现按下Enter,控件的焦点下移啊?! 我现在遇到一个有关在图像上画的问题,请有关这方面的高手赐教!!很急需 dbgrideh中复选框怎么保留状态? 原问题已结贴, 再来个问题--100分 “TEXT EXCEEDS MEMO CAPACITY”错误 怎么实现透明窗体 有关鼠标定点的问题? 高分请教,用程序实现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;