procedure TForm2.ToolButton2Click(Sender: TObject);
var
MyFile: TMemoryStream;
begin
  If  OLEContainer1.State<> osEmpty  then
       begin
          MyFile:=TMemoryStream.Create;
          OLEContainer1.SaveToStream(MyFile);
          MyFile.Position :=0;
             // CompressStream(MyFile);
          with ADOQuery5 do   begin
            Open;
            edit;
            TBlobField(FieldByName('wjnr')).LoadFromStream(MyFile);
            MyFile.Free;
              Post;
                 end;
            PageControl1.Show;
            PageControl1.SetFocus;
           end;end;

解决方案 »

  1.   

    ADOQuery5.Close;
               ADOQuery5.Active:=false;
                ADOQuery5.Parameters.ParamByName('bianhao').Value:=trim(bianhao);
                ADOQuery5.Parameters.ParamByName('wjlb').Value:='招标答疑';
              ADOQuery5.Open;
              ADOQuery5.Active:=true;end;
    if  not ADOQuery5.FieldByName('wjnr').IsNull  then begin
            with ADOQuery5 do
              begin
            OleContainer1.DestroyObject;
            MyFile:=TMemoryStream.Create;
            TBlobField(FieldByName('wjnr')).SaveToStream(MyFile);
            MyFile.Position:=0;
            OleContainer1.loadfromstream(MyFile);
             MyFile.Free;
             OleContainer1.DoVerb(ovshow);
              PageControl1.SetFocus;
              end;
      

  2.   

    ****************************Query和adoquery差不多!
    回复人: wwwwwwww(我我) (2002-1-28 9:46:44)  得0分 
    保存word文档:
    procedure Tfrmdyqk1.BitBtn3Click(Sender: TObject);
    var  ms:TMemoryStream;
    begin
      ms:= TMemoryStream.create;
      OleContainer1.SaveToStream (ms);
      ms.Position := 0;  Query1.close;
      Query1.sql.clear;
      Query1.sql.text:='select *  from oadbo.bw_qwb';
      Query1.open;
      Query1.append;
      Query1.fieldbyname('wjid').value:=77777777 ;
      Query1.fieldbyname('wjdid').value:=7;
      Query1.fieldbyname('kzm').value:='txt';
      TBlobField(Query1.fieldbyname('qw')).loadfromstream(ms);
      ms.free;
      Query1.post;
      //Query1.applyupdates;
      Query1.close;
    end;取出word文档:
    procedure Tfrmdyqk1.Button2Click(Sender: TObject);
    var  strstream:Tmemorystream;
          //ls_qw:string;
    begin    OleContainer1.DestroyObject;
        strstream := Tmemorystream.Create;    query1.Close;
        query1.sql.clear;
        query1.SQL.Add('select qw from oadbo.bw_qwb where wjid =' + inttostr(77777777));
        query1.open ;
        query1.First;
        
        
        Tblobfield(query1.fieldbyname('qw')).savetostream(strstream);
        strstream.position:=0;
        OleContainer1.loadfromstream(strstream);    strstream.free;
    end;  
      

  3.   

    谢谢
    如果
    1.给定一个文件名和序号作为参数,保存到数据库中(针对两种情况:插入,更新)
    假设表为
     表名:报表
     字段:序号:INT,模板:IMAGE2.从数据库中读出该表中某序号的模板到文件名参数中
      

  4.   

    How to get binary data in a workable format into or out of an MSSQL Image (Blob) field using ADO components. 
    Answer:
    The main problem I faced when trying to do this was to deal with the fact that TField.Value returns a varOleStr no matter what was written into it, so the data needed to be converted into a more usable format. Note that there is no checking here that the TField is in fact of the correct type, and that the stream must be created and free-ed elsewhere manually. Also, additional memory equal to the size of the stream/blob is required, so be cautious if large amounts of data are involved. For ease of use in my own application, I incorporated this functionality into my descendent of TADOQuery. 
    function LoadFromBlob(const AField: TField; const Stream: TStream): boolean; 
    var 
      ResultStr: string; 
      PResultStr: PChar; 
    begin 
      Result := false; 
      if (Assigned(AField)) and (Assigned(Stream)) then begin 
        try 
          ResultStr := AField.Value; 
          PResultStr := PChar(ResultStr); 
          Stream.Write(PResultStr^, Length(ResultStr)); 
          Stream.Seek(0,0); 
          Result := true; 
        except 
        end; 
      end; 
    end; function SaveToBlob(const Stream: TStream; const AField: TField): boolean; 
    var 
      FieldStr: string; 
      PFieldStr: PChar; 
    begin 
      Result := false; 
      if (Assigned(AField)) and (Assigned(Stream)) then begin 
        try 
          Stream.Seek(0,0); 
          SetLength(FieldStr, Stream.Size); 
          PFieldStr := PChar(FieldStr); 
          Stream.Read(PFieldStr^, Stream.Size); 
          AField.Value := FieldStr; 
          Result := true; 
        except 
        end; 
      end; 
    end; ------------------------------------------------------- Examples: If you have an ADO query "qryBlobTest" with the following fields: nFileIcon: Image; nFileData: Image; // Store an icon in an Image field 
    function StoreFileIcon: boolean; 
    var 
      AFileIcon: TIcon; 
      MS: TMemoryStream; 
    begin 
      Result := false; 
      AFileIcon := TIcon.Create; 
      MS := TMemoryStream.Create; 
      try 
        AFileIcon.handle := ExtractAssociatedIcon('c:\temp\Test.doc'); // Pseudocode !! 
        AFileIcon.SaveToStream(MS); 
        Result := SaveToBlob(MS, qryBlobTest.FieldByName('nFileIcon')); 
      finally 
        AFileIcon.Free; 
        MS.Free; 
      end; 
    end; // Load an icon from an Image field 
    function LoadFileIcon: boolean; 
    var 
      AFileIcon: TIcon; 
      MS: TMemoryStream; 
    begin 
      Result := false; 
      AFileIcon := TIcon.Create; 
      MS := TMemoryStream.Create; 
      try 
        if (LoadFromBlob(qryBlobTest.FieldByName('nFileIcon'), MS)) then begin 
          AFileIcon.LoadFromStream(MS); 
          // Do something with the Icon? 
          Result := true; 
        end; 
      finally 
        AFileIcon.Free; 
        MS.Free; 
      end; 
    end; // Save a binary file in an Image field 
    function StoreFileData: boolean; 
    var 
      FS: TFileStream; 
    begin 
      FS := TFileStream.Create('c:\temp\Test.doc', fmOpenRead); 
      Result := SaveToBlob(FS, qryBlobTest.FieldByName('nFileData')); 
      FS.Free; 
    end; // Load a file from an Image field (save it to a file name) 
    function LoadFileData: boolean; 
    var 
      FS: TFileStream; 
    begin 
      FS := TFileStream.Create('c:\temp\Test2.doc', fmCreate); 
      LoadFromBlob(qryBlobTest.FieldByName('nFileData'), FS); 
      FS.Free; 
    end;