本人用流从数据库中读取了BLOB数据,然后想把数据显示在word中,但不知道如何实现。
苦思冥想中有一个方法,但有一个问题没有弄清楚。
  _variant_t strSQL11;
     strSQL11="select * from 图形表";//
 theApp.OnExecuteADO(theApp.m_pADOset,strSQL11);//执行SQL语句,打开数据库中的表
 int ncount1=theApp.m_pADOset->GetRecordCount();//得到表中信息个数
 theApp.m_pADOset->MoveFirst();//使指针移动到首位
          _StreamPtr pStream;//定义流
 for(int k=0;k<ncount1;k++)//
 {
         _variant_t vtSource;
          vtSource.vt=VT_ERROR;
          vtSource.scode=DISP_E_PARAMNOTFOUND;
         pStream.CreateInstance(_uuidof(Stream));//创建流实例
         pStream->Type=adTypeBinary;//设置为二进制类型
         pStream->Open(vtSource,adModeUnknown,adOpenStreamUnspecified,
 _bstr_t(""),_bstr_t(""));//打开流
        _variant_t varBLOBResult=theApp.m_pADOset->Fields->GetItem("试题图形")->GetValue();//得到数据库中图形的字段,并读取数值。
        pStream->Write(varBLOBResult);//把读取数值读到流中
        到这一步后我就不知道如何把流中数据显示在Word中了
但我偶尔发现如果能把流中数据读到剪切板中,然后再用  sel.Paste();//sel为光标定位指针
这个语句就可以实现。
所以,现在我的问题就是如何能把流文件复制到剪切板中,望大虾们能给与详细解释。
       

解决方案 »

  1.   

    剪切板上文本数据的传送
    把文本放置到剪接板上:
    CString source; 
    //put your text in source
    if(OpenClipboard())
    {
        HGLOBAL clipbuffer;
        char * buffer;
        EmptyClipboard();
        clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);
        buffer = (char*)GlobalLock(clipbuffer);
        strcpy(buffer, LPCSTR(source));
        GlobalUnlock(clipbuffer);
        SetClipboardData(CF_TEXT,clipbuffer);
        CloseClipboard();
    }从剪接板上获取文本:
    char * buffer;
    if(OpenClipboard())
    {
        buffer = (char*)GetClipboardData(CF_TEXT);
        //do something with buffer here 
        //before it goes out of scope
    }
    CloseClipboard();