Delphi:TMemoryStream类--二进制大对象与数据库的交互

转载 2008年09月28日 20:14:00

Q:如何将一个大的二进制数组保存到数据库,并从数据库再次取回到数组?
A:使用TMemoryStream类对象,使用内存流对象的 WriteBuffer/ReadBuffer方法和数据库BLOB字段对象的SaveToStream/WriteFromStream方法。以下是我 做的一个例子,Form1只有一个按钮,但是要uses DataModule2;DataModule2里包含一个ADOTable1,指向一个只有两个字段的表,一个字段是序号索引(可以让Access自动 生成),另一个字段是BLOB类型,记得要对这个表生成字段域变量(右键点击ADOTable1-->Fiels Editor...)。

procedure TForm1.Button1Click(Sender: TObject);
var
  SourceString: Array[0..1023] of byte;//byte数组
  DesString: Array[0..1023] of byte;//byte数组
  MemoryStream,MemoryStream2 : TMemoryStream;
  i:integer;
begin
  for i:=Low(SourceString) to High(SourceString) do
  begin
     SourceString[i]:=i;
  end;
   MemoryStream := TMemoryStream.Create;
  MemoryStream2:= TMemoryStream.Create;
  try
    // Write the string to the stream. We want to write from SourceString's
    // data, starting at a pointer to SourceString (this returns a pointer to
    // the first character), dereferenced (this gives the actual character).

    //MemoryStream.WriteBuffer(Pointer(SourceString)^, Length(SourceString));//String写到内存流
    MemoryStream.WriteBuffer(SourceString, Length(SourceString));//String写到内存流
    MemoryStream.Position := 0; // Go back to the start of the stream
    //SetLength(SourceString, MemoryStream.Size); // Set the length, so we have space to read into
    MemoryStream.ReadBuffer(DesString, MemoryStream.Size);//读内存流到字符串 Read it back in to make sure it worked.
    for i:=0 to Length(DesString)-1 do
    Caption :=Caption+','+ inttostr(DesString[i]);

    //ok,from here we can use MemoryStream to save into DB using LoadFromStream Method.
    //使用
    DataModule2.ADOTable1.Open;
    DataModule2.ADOTable1.Edit;
    DataModule2.ADOTable1.Append;
    //从内存流到数据库ADOTable1BinaryData represent a Table's Blob field.
    DataModule2.ADOTable1BinaryData.LoadFromStream(MemoryStream);

    DataModule2.ADOTable1.First;
    DataModule2.ADOTable1BinaryData.SaveToStream(MemoryStream2);//从数据库到内存流2
    MemoryStream2.Position :=0;
    MemoryStream2.ReadBuffer(DesString, MemoryStream2.Size); //从内存流2到 Byte数组DesString
    Label1.Caption :='';
    for i:=0 to Length(DesString)-1 do
    //inttostr:Byte不是 integer,但是我不知道有没有Bytetostr这样的函数,先就凑合着inttostr用吧。
    Label1.Caption :=Label1.caption+','+ inttostr(DesString[i]);

  finally
    MemoryStream.Free;
    MemoryStream2.Free;
  end;

end;


FROM: http://blog.csdn.net/yueyahe/archive/2006/04/19/669418.aspx

浅谈混合开发与Android,JS数据交互

本文是作者原创,如转载请注明出处!一.概论 现在时代已经走过了移动互联网的超级火爆阶段,市场上移动开发人员已经趋于饱和,显然,只会原生APP的开发已不能满足市场的需求,随着H5的兴起与火爆,H5在原...
  • liuxu841911548
  • liuxu841911548
  • 2017年05月05日 17:39
  • 4614

《React-Native系列》2、RN与native交互与数据传递

RN怎么与native交互的呢? 下面我们通过一个简单的Demo来实现:RN页面调起Native页面,Native页面选择电话本数据,将数据回传给RN展示。 首先是 Native侧  1、MainAc...
  • hsbirenjie
  • hsbirenjie
  • 2016年07月16日 23:11
  • 4723

java不同对象之间的数据交互(通用)

java中万物皆对象,不会你是线程,还是异步任务,还是。。。都可以用以下的三种通用方法来进行对象间数据的交互。当然android相比java有自己独特的数据交互方式,这些会在后面的文章中讲到,本篇文章...
  • a910626
  • a910626
  • 2015年05月23日 15:56
  • 2690

delphi TMemoryStream对象用法

TMemoryStream对象 TMemoryStream对象是一个管理动态内存中的数据的Stream对象,它是从TCustomMemoryStream中继承下来的,除了从 TCustomMem...
  • xiaojian365
  • xiaojian365
  • 2012年02月27日 11:02
  • 1083

关于TMemoryStream类

今天一个兄弟,提到了TMemoryStream类,由于我也用的比较少,做总结一下吧。如果不对,请朋友指正。 TMemoryStream的继承关系如下 TObject | TStream ...
  • hssok33
  • hssok33
  • 2014年12月05日 23:08
  • 245

c# 对象与byte[]二进制流的转换帮助类

  • 2018年01月14日 17:50
  • 1KB
  • 下载

SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。

本为转载,出处为:有空再把图文并茂写出来。 https://technet.microsoft.com/zh-cn/library/ff943565.aspx SharePoint 2013 使用 ...
  • jason_dct
  • jason_dct
  • 2016年04月19日 13:42
  • 835

多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术

之前说到中间层通过向客户端暴露方法的方式提供服务,实现数据库数据的读取和更新。方法调用的方式,其潜在的意义,就是说中间层不保存客户端状态信息,就像WEB服务一样,客户端需要自己保存自己的状态信息。进一...
  • ddqqyy
  • ddqqyy
  • 2011年02月12日 15:13
  • 6033

[转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术

[转]多层数据库应用基于Delphi DataSnap方法调用的实现(三)对象池技术 之前说到中间层通过向客户端暴露方法的方式提供服务,实现数据库数据的读取和更新。方法调用的方式...
  • hhhfff2010
  • hhhfff2010
  • 2014年02月23日 23:50
  • 1225

JavaScript文件操作(5)-Blob类型(二进制大对象)

Posted by unbug on Jun 6, 2012 in HTML5 | 2 comments 到目前,本系列文章集中讲了File对象能在用户参与下对操作文件的产生的积极效果。事实...
  • cui_shuang_xi
  • cui_shuang_xi
  • 2014年04月17日 17:46
  • 1928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi:TMemoryStream类--二进制大对象与数据库的交互
举报原因:
原因补充:

(最多只允许输入30个字)