环境:
Delphi7.0+Access2000+ADO+Windows2000
问题:
一个大的Byte数组(byteArray:Array[0..1023] of Byte),能否作为一个整体
(以整个数组作为数据元素,不能拆开以后再保存)保存到ACCESS数据库的字段中去?
Delphi该如何操作?ACCESS数据库字段应如何定义?请各位赐教,谢谢。

解决方案 »

  1.   

    测试程序:
    建表:table1 ID 自动,DATA OLE数据
    程序如下:
    unit assu1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Button1: TButton;
        ADOQuery1: TADOQuery;
        Button2: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      a:array [0..10] of integer;
      i:integer;
      m:TMemoryStream;
    begin
       for i:=0 to 9 do
        a[i]:=i;                //赋值
       m:=TMemoryStream.Create;
       m.Write(a,10*sizeof(integer)); //写入memstream
       m.Position:=0;
       with  ADOQuery1 do
       begin
          SQL.Text:='insert into table1(data) values(:data)';
          Parameters[0].LoadFromStream(m,ftBlob );
          ExecSQL;  //写入数据库
       end;
       m.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
         m:TMemoryStream;
         a:array [0..10] of integer;
         i:integer;
    begin
       m:=TMemoryStream.Create;
       with  ADOQuery1 do
       begin
          SQL.Text:='select * from table1 where id=1';
          Open;
          if  eof  then exit;
          (FieldByname('data') AS TBlobField).SaveToStream(m); //从数据库读出
       end;
       m.Position:=0;
       m.Read(a,10*sizeof(integer)); //读入memstream
       for i:=0 to 9  do
         Memo1.Lines.Add(InttoStr(a[i])); //显示
    end;end.
      

  2.   

    谢谢keiy的回复。
    明白了,希望以后没有人再问这个问题了。
      

  3.   

    请问10*sizeof(integer)什么意思?
    动态数组又如何处理?谢谢!