请问如何把OleContainer1的word文档存入access的ole类型的字段中,并且又如何显示回来??高手帮忙啊!!!!!

解决方案 »

  1.   

    我刚刚用VC完成了,呵呵
    DWORD CALLBACK COleRichEditCtrl::_StreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
    {
       CFile* pFile = (CFile*) dwCookie;   pFile->Write(pbBuff, cb);
       *pcb = cb;   return 0;
    }long COleRichEditCtrl::StreamOutData(CMemFile *pfileMem)
    {
    EDITSTREAM es;

    es.dwCookie = (DWORD) pfileMem;
    es.pfnCallback = _StreamOutCallback; 
    StreamOut(SF_RTF, es); return pfileMem->GetLength();
    }BOOL CsRecordSet::PutChunk(LPCTSTR strField, LPBYTE pBuffer, UINT uLength)
    {
    BOOL bResult = TRUE;
    BYTE *pBuf = pBuffer; 
    VARIANT varBLOB;
    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1]; if (! m_bValid)
    return FALSE;

    if(pBuf)
    {    
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = uLength;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound); for (long i = 0; i < (long)uLength; i++)
    SafeArrayPutElement (psa, &i, pBuf++);

    varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = psa;

    try
    {
    m_pRecordset->GetFields()->GetItem(strField)->AppendChunk(varBLOB);
    }
    catch (_com_error) 
    {
    bResult = FALSE;
    }
    } return bResult;
    }
      

  2.   

    我要用的是delphi啊,有没有啊?
      

  3.   


    loadfromStream()是写到库里面,好像是两个参数,一个是流,另一个是它的size,用tblob字段调用就行了savetostream()是从库里读出,里面是流的名字,最后从流里恢复成文件就行了.
      

  4.   

    xuxiaozhao_3411(小小) 谢谢你的回答,有没有详细的代码啊?等待...
      

  5.   

    恰好我做过这个东东,不光能存doc,还可以存pdf,xls等等,自己加,它都作为数据流存入,代码如下
    procedure TF_add_doc.BitBtn2Click(Sender: TObject);
    beginwith MainForm.docadoquery do   
     begin
     Append;
     //存入文档标题 
     Fieldbyname('Title').AsString:=Edit1.Text;
     //在数据库中存入文档类型
     if slx='.doc' then 
        Fieldbyname('lx').AsString:='word格式'
        else if slx='.pdf' then
            Fieldbyname('lx').AsString:='pdf格式'
            else if slx='.ppt' then
                 Fieldbyname('lx').AsString:='powerpoint格式'
                 else if slx='.xls' then
                       Fieldbyname('lx').AsString:='excel格式';
      //存入文档类型
     Fieldbyname('Abstract').AsString:=memo1.Text;
     //这句是关键,按路径以流存文件到数据库memo字段
     TBlobField(FieldByName('Memo')).LoadFromFile(Edit2.Text);
     try
     Post;
     except
     showmessage('提交失败');
     Cancel;
     Exit;
     end;
    //用一函数进行日志记录
     Mainform.InsertLog('添加文档:'+fn3);
         end;
     end; Close;
    end;给分吧:)
      

  6.   

    先从数据库里读到本地,再读出来
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Text := 'SELECT BL FROM TABLE1';
        Open;
        TBlobField(FieldByName('BL')).SaveToFile('d:\abc.doc');
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      OleContainerFY1.CreateObjectFromFile('d:\1.doc',false);
      OleContainerFY1.DoVerb(1);
    end;
    保存:
    procedure TForm1.Button2Click(Sender: TObject);
    var
      MS: TMemoryStream;
    begin
      MS := TMemoryStream.Create;
      OleContainerFY1.SaveToStream(MS);
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Text := 'SELECT * FROM TABLE1';
        Open;
        Append;
        TBlobField(FieldByName('BL')).LoadFromStream(MS);
        Post;
        Application.MessageBox('succussful','fgyr',mb_ok);
      end;
    end;