delphi中操作oleVariant、variant和stream

來源:互聯網
上載者:User

最近在學習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;

歡迎各位親們的互粉,新浪微博:http://weibo.com/3313648752

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.