利用 Office 里的 MSWORD.OLB 来操纵word 再枚举出DSN选择一个DSN做为ODBC连接   如果是本地ACCESS可以直接利用OpenFile 打开本地数据库文件我做过通过ADO把数据库导出到word里  

解决方案 »

  1.   


    我以前用vb+dao做过,access的字段类型先要定义为ole类型的,其实也就是长二进制文件
    Option Explicit
    '********************************************************
    '名称:clsBinaryFile(二进制文件类)
    '参数:无
    '返回:无
    '功能:用于处理二进制文件存储到数据库
    '说明:需要有DAO引用
    '日期:2003-3-12
    '程序员:
    '********************************************************
    Private mstrFileName As String             '文件名称(含路径)
    ''文件名称属性(含路径)
    Public Property Get FileName() As String
        FileName = mstrFileName
    End Property
    Public Property Let FileName(ByVal strNewFileName As String)
        mstrFileName = strNewFileName
    End Property
    '********************************************************
    '名称:SaveToField
    '参数:fldTarget:要存储的字段名称
    '返回:
    '功能:把二进制文件写到字段中
    '说明:
    '日期:2003-2-13
    '程序员:
    '********************************************************
    Public Sub SaveToField(fldTarget As Field)
        Dim intFileNumber As Integer    '文件号
        Dim lngFileLength As Long        '文件的长度
        Dim bytBuffer() As Byte         '文件的内容
        
        '得到一个可用的文件号
        intFileNumber = FreeFile()
        '打开文件读出内容
        Open mstrFileName For Binary Access Read As #intFileNumber
            lngFileLength = LOF(intFileNumber)
            ReDim bytBuffer(lngFileLength - 1)
            Get #intFileNumber, 1, bytBuffer()
        Close #intFileNumber
        '写到目标字段
        fldTarget.AppendChunk bytBuffer()
        
    End Sub
        
    '********************************************************
    '名称:SaveFromField
    '参数:fldSource:要读出的字段名称
    '返回:
    '功能:把二进制文件写到字段中
    '说明:
    '日期:2003-2-13
    '程序员:
    '********************************************************
    Public Sub SaveFromField(fldSource As Field)
        Dim intFileNumber As Integer    '文件号
        Dim lngFileLength As Long        '文件的长度
        Dim bytBuffer() As Byte         '文件的内容
        
        '读出字段中的数据
        '也可用此语句替换下两行bytbuffer=fldSource
        lngFileLength = fldSource.FieldSize
        bytBuffer() = fldSource.GetChunk(0, lngFileLength)
        '得到一个可用的文件号
        intFileNumber = FreeFile()
        '写到文件中
        Open mstrFileName For Binary Access Write As #intFileNumber
            Put #intFileNumber, 1, bytBuffer()
        Close #intFileNumber
    End Sub另外帮你找了个例子,不知道你是否可以用上1. VC把一个文件存入数据库  CFile imagefile;
      if(0 == imagefile.Open("d:\\user\\bmp.bmp",CFile::modeRead))
         return;
      _RecordsetPtr pRs = NULL;             
      _ConnectionPtr pConnection = NULL;
      _variant_t varChunk;
      HRESULT hr;
      BYTE* pbuf;
      long nLength = imagefile.GetLength();
      pbuf = new BYTE[nLength+2];
      if(pbuf == NULL)
         return;                             //allocate memory error;
      imagefile.Read(pbuf,nLength);          //read the file into memory  BYTE *pBufEx;
      pBufEx = pbuf;
      //build a SAFFERRAY
      SAFEARRAY* psa;
      SAFEARRAYBOUND rgsabound[1];
      rgsabound[0].lLbound = 0;
      rgsabound[0].cElements = nLength;
      psa = SafeArrayCreate(VT_UI1, 1, rgsabound);  for (long i = 0; i < nLength; i++)
           SafeArrayPutElement (psa, &i, pBufEx++);
      VARIANT varBLOB;
      varBLOB.vt = VT_ARRAY | VT_UI1;
      varBLOB.parray = psa;  _bstr_t strCnn("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
        try
        {
            //Open a connection
            pConnection.CreateInstance(__uuidof(Connection));
            hr = pConnection->Open(strCnn,"","",NULL);   //Connect a DataBase
            pRs.CreateInstance(__uuidof(Recordset));
            pRs->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);  //Open a Table
     
    //      pRs->AddNew();        
            pRs->Fields->GetItem("Image")->AppendChunk(varBLOB);        
            pRs->Update();
            pRs->Close();
            pConnection->Close();
     }
        catch(_com_error &e)
        {
            // Notify the user of errors if any.
            _bstr_t bstrSource(e.Source());
            _bstr_t bstrDescription(e.Description());
            CString sError;
            sError.Format("Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
            AfxMessageBox(sError);     
     }2. VC把数据库中IMAGE字段取出存为文件    _RecordsetPtr pRs = NULL;
        _ConnectionPtr pConnection = NULL;
        _variant_t varChunk;
        HRESULT hr;
        VARIANT varBLOB;
        _bstr_t strCnn("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
        try
        {
            //Open a connection
            pConnection.CreateInstance(__uuidof(Connection));
            hr = pConnection->Open(strCnn,"","",NULL);        
            pRs.CreateInstance(__uuidof(Recordset));
            pRs->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);
           //read  data  
           long lDataLength = pRs->Fields->GetItem("Image")->ActualSize;
           varBLOB = pRs->GetFields()->GetItem("Image")->GetChunk(lDataLength);
          if(varBLOB.vt == (VT_ARRAY | VT_UI1))        
         {
                BYTE *pBuf = NULL;   
                pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);
                SafeArrayAccessData(varBLOB.parray,(void **)pBuf); 
                //Build a File in Windows Temp Directory
                char tmpPath[_MAX_PATH+1];
                GetTempPath(_MAX_PATH,tmpPath);
                CString strFileName = "temp.bmp";
                strFileName = tmpPath+strFileName;
                                          
                CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
                LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)pBuf);
                outFile.WriteHuge(buffer,lDataLength);
                GlobalUnlock((HGLOBAL)pBuf);
                outFile.Close();           
                SafeArrayUnaccessData (varBLOB.parray);
           }        pRs->Close();
            pConnection->Close();
         }
        catch(_com_error &e)
        {
            // Notify the user of errors if any.
            _bstr_t bstrSource(e.Source());
            _bstr_t bstrDescription(e.Description());
            CString sError;
            sError.Format("Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
            AfxMessageBox(sError);     
     }