delphi中操作oleVariant、variant和stream


本文整理自网络,侵删。

 
最近在学习delphi,好多东西都不懂。这几天需要用到用二进制的方式保存和读取oracle中的数据。找了好多帖子才找到我需要的,不过都不全,害我本来就不怎么懂得人弄了好几天。整理一下,供自己和大家以后使用相关操作时借鉴。

首先是oleVariant转成stream,并保存到数据库。我调用的控件函数得到的是一个oleVariant类型,保存只能保存stream,所以只能转换

procedure TForm1.variantToStream();

var

  o: Olevariant;

  p: Pointer;

  s: Stream;

begin

  myControl.saveToStream(o);//这个是我使用的控件的一个函数,是把我需要的二进制数据写入o变量里。类型是OleVariant;

  if o = null then  //不知道这样对不对,网上还说isNull和empry函数,但是我使用都报错。

  begin

    Application.MessageBox('没有得到数据,请核对!', '提示!');

  end;

  saveQuery.SQL.Clear;

  saveQuery.SQL.Text := 'select id,name,content from myTab where 0 = 1';

  saveQuery.open;

  saveQuery.Append;

  saveQuery.FieldByName('id').asString := '01';

  saveQuery.FieldByName('name').asString := '演示';

  p := VarArrayLock(o);

  try

    s:= TMemoryStream.Create;

    s.Position := 0;

    s.WriteBuffer(p^, VarArrayHighBound(o, 1) + 1);

    TBlobField(saveQuery.FieldByName('content')).LoadFromStream(s);

  finally

    VarArrayUnLock(o);

  end;

  saveQuery.Post;

end;

 

下面是stream转换成variant

procedure TFrom1.streamToVariant();

var

  s : TMemoryStream;

  v : Variant;

  p : Pointer;

begin

  s:= TMemoryStream.Create;

  saveQuery.SQL.Clear;

  saveQuery.SQL.Text := 'select content from myTab where i = ''01''';

  saveQuery.open;

  if saveQuery.RecordCount > 0 then

  begin

    (saveQuery.FieldByName('content') as TBlobField).SaveToStream(s);

    v := VarArrayCreate([0, s.Size - 1], varByte);

    p := VarArrayLock(v);

    s.Position := 0;

    s.Read(p^, s.Size);

    VarArrayUnLock(v);

    myControl.OpenStream(v, 2);//这个函数是我控件读取stream的函数,这里只是演示可以直接使用了而已。

  end;

end;
――――――――――――――――

原文链接:https://blog.csdn.net/leandzgc/article/details/7568623

相关阅读 >>

Delphixe8中获取apk的签名信息

Delphi urunpe

Delphi 实现程序 动态 类名

Delphi windows 编程[23] - 快捷键资源

Delphi json字符串转义

Delphi 将listview保存为txt

Delphi整理四(程序控制结构)

delph控制台(console)程序添加图标和版权信息

Delphi 使用资源文件

删除Delphi组件tstringlist中的重复项目

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...