本人用流从数据库中读取了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为光标定位指针
这个语句就可以实现。
所以,现在我的问题就是如何能把流文件复制到剪切板中,望大虾们能给与详细解释。
苦思冥想中有一个方法,但有一个问题没有弄清楚。
_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为光标定位指针
这个语句就可以实现。
所以,现在我的问题就是如何能把流文件复制到剪切板中,望大虾们能给与详细解释。
把文本放置到剪接板上:
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();