基本思路是从ACCESS数据库中提取每个人的资料.经整理后生成WORD文档.主要用到三个函数(1)LianJie()用于连接数据库;(2)TuiChu()用于断开数据库;(3)Shengcheng()用于生成WORD文件;问题出现在:只能生成1次WORD文件,如果第2次打开数据库时,提示:未连接数据库\n未指定错误。问题到底在哪?
void CMYDlg::LianJie()
{
// 初始化 COM 对象
::CoInitialize(NULL);
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
//连接数据库
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS文件名.mdb","","",adModeUnknown);
}
}
catch(_com_error e)//捕捉异常
{
CString errormessage;
errormessage.Format("打开数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
this->EndDialog(0);
}
}
void CMYDlg::TuiChu()
{
if(m_pConnection->GetState()==adStateOpen)
{
m_pConnection->Close();///关闭连接
}
m_pConnection.Release();
::CoUninitialize();
}
void CMyDlg::ShengCheng()
{
//先连接数据库
LianJie();
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM 数据表名 order by 序号 ASC",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
//建立通用的另存对话框。
char* szFilter="Microsoft Word 文档 (*.doc)|*.doc|所有格式 (*.*)|*.*||";
CFileDialog dlg(FALSE,"doc",TEXT("WORD文件.doc"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
//判断按下的是保存还是取消键
INT_PTR nRet=-1;
nRet=dlg.DoModal();
if(nRet==IDCANCEL)
return;
if(nRet==IDOK)
{
//使鼠标指针处于等待状态
this->BeginWaitCursor();
//设置变量 file_pathname 用来保存文件的 路径+文件名。
CString file_pathname;
file_pathname=dlg.GetPathName();
//开始操作word文档
//----------------------------
COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//开始一个新的Microsoft Word 2000实例
_Application oWordApp;
if(!oWordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建 Word 服务失败!请确认您的系操中已安装了 Microsoft Office 组件。", MB_OK|MB_SETFOREGROUND);
return;
}
//创建一个新的word文档
Documents oDocs;
_Document oDoc;
oDocs=oWordApp.GetDocuments();
oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);
//把文本添加到word文档
Selection oSel;
oSel=oWordApp.GetSelection();
//保存word文档
_Document oActiveDoc;
oActiveDoc=oWordApp.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant(file_pathname),COleVariant((short)0),vFalse, COleVariant(""), vTrue, COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse);
//退出word应用程序
oWordApp.Quit(vOpt, vOpt, vOpt);
while((!m_pRecordset->adoEOF))
{
//-----------这段省略,用while((!m_pRecordset->adoEOF))循环,从数据表中提取资料整理后放入CString Stream中
//把文本添加到word文档
COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_Application m_App;//定义Word提供的应用程序对象
oSel.ReleaseDispatch();
oDocs.ReleaseDispatch();//断开关联
m_App.m_bAutoRelease=true;
if(!m_App.CreateDispatch("Word.Application"))
{
AfxMessageBox("创建Word2000服务失败!请确认您的系操中已安装了 Microsoft Office 组件。");
exit(1);
}
//下面是定义VARIANT变量
COleVariant varFilePath(file_pathname);
COleVariant varstrNull("");
COleVariant varZero((short)0);
COleVariant varTrue(short(1),VT_BOOL);
COleVariant varFalse(short(0),VT_BOOL);
oDocs.AttachDispatch(m_App.GetDocuments());//将Documents类对象oDocs和Idispatch接口关联起来
oDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);
//打开Word文档;
oSel.AttachDispatch(m_App.GetSelection());//将Selection类对象oSel和Idispatch接口关联起来
//定位到文件的最后
oSel=m_App.GetSelection();
//将光标移动到最后一行
oSel.EndKey(COleVariant((short)6),COleVariant((short)0));
oSel.InsertAfter(stream);
//保存word文件
oDoc=m_App.GetActiveDocument();
oDoc.SaveAs(COleVariant(file_pathname),COleVariant((short)0),vFalse,COleVariant(""),vTrue,COleVariant(""),vFalse,vFalse,vFalse,vFalse,vFalse); oSel.ReleaseDispatch();
oDocs.ReleaseDispatch();//断开关联
//退出WORD
m_App.Quit(vOpt,vOpt,vOpt);
m_App.ReleaseDispatch();
m_pRecordset->MoveNext();
}
return;
}
TuiChu();
}
void CMYDlg::LianJie()
{
// 初始化 COM 对象
::CoInitialize(NULL);
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
//连接数据库
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ACCESS文件名.mdb","","",adModeUnknown);
}
}
catch(_com_error e)//捕捉异常
{
CString errormessage;
errormessage.Format("打开数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);//显示错误信息
this->EndDialog(0);
}
}
void CMYDlg::TuiChu()
{
if(m_pConnection->GetState()==adStateOpen)
{
m_pConnection->Close();///关闭连接
}
m_pConnection.Release();
::CoUninitialize();
}
void CMyDlg::ShengCheng()
{
//先连接数据库
LianJie();
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM 数据表名 order by 序号 ASC",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
//建立通用的另存对话框。
char* szFilter="Microsoft Word 文档 (*.doc)|*.doc|所有格式 (*.*)|*.*||";
CFileDialog dlg(FALSE,"doc",TEXT("WORD文件.doc"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
//判断按下的是保存还是取消键
INT_PTR nRet=-1;
nRet=dlg.DoModal();
if(nRet==IDCANCEL)
return;
if(nRet==IDOK)
{
//使鼠标指针处于等待状态
this->BeginWaitCursor();
//设置变量 file_pathname 用来保存文件的 路径+文件名。
CString file_pathname;
file_pathname=dlg.GetPathName();
//开始操作word文档
//----------------------------
COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//开始一个新的Microsoft Word 2000实例
_Application oWordApp;
if(!oWordApp.CreateDispatch("Word.Application",NULL))
{
AfxMessageBox("创建 Word 服务失败!请确认您的系操中已安装了 Microsoft Office 组件。", MB_OK|MB_SETFOREGROUND);
return;
}
//创建一个新的word文档
Documents oDocs;
_Document oDoc;
oDocs=oWordApp.GetDocuments();
oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);
//把文本添加到word文档
Selection oSel;
oSel=oWordApp.GetSelection();
//保存word文档
_Document oActiveDoc;
oActiveDoc=oWordApp.GetActiveDocument();
oActiveDoc.SaveAs(COleVariant(file_pathname),COleVariant((short)0),vFalse, COleVariant(""), vTrue, COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse);
//退出word应用程序
oWordApp.Quit(vOpt, vOpt, vOpt);
while((!m_pRecordset->adoEOF))
{
//-----------这段省略,用while((!m_pRecordset->adoEOF))循环,从数据表中提取资料整理后放入CString Stream中
//把文本添加到word文档
COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_Application m_App;//定义Word提供的应用程序对象
oSel.ReleaseDispatch();
oDocs.ReleaseDispatch();//断开关联
m_App.m_bAutoRelease=true;
if(!m_App.CreateDispatch("Word.Application"))
{
AfxMessageBox("创建Word2000服务失败!请确认您的系操中已安装了 Microsoft Office 组件。");
exit(1);
}
//下面是定义VARIANT变量
COleVariant varFilePath(file_pathname);
COleVariant varstrNull("");
COleVariant varZero((short)0);
COleVariant varTrue(short(1),VT_BOOL);
COleVariant varFalse(short(0),VT_BOOL);
oDocs.AttachDispatch(m_App.GetDocuments());//将Documents类对象oDocs和Idispatch接口关联起来
oDocs.Open(varFilePath,varFalse,varFalse,varFalse,varstrNull,varstrNull,varFalse,varstrNull,varstrNull,varTrue,varTrue,varTrue);
//打开Word文档;
oSel.AttachDispatch(m_App.GetSelection());//将Selection类对象oSel和Idispatch接口关联起来
//定位到文件的最后
oSel=m_App.GetSelection();
//将光标移动到最后一行
oSel.EndKey(COleVariant((short)6),COleVariant((short)0));
oSel.InsertAfter(stream);
//保存word文件
oDoc=m_App.GetActiveDocument();
oDoc.SaveAs(COleVariant(file_pathname),COleVariant((short)0),vFalse,COleVariant(""),vTrue,COleVariant(""),vFalse,vFalse,vFalse,vFalse,vFalse); oSel.ReleaseDispatch();
oDocs.ReleaseDispatch();//断开关联
//退出WORD
m_App.Quit(vOpt,vOpt,vOpt);
m_App.ReleaseDispatch();
m_pRecordset->MoveNext();
}
return;
}
TuiChu();
}
解决方案 »
- error PRJ0019: 工具从"正在执行预生成事件..."
- 对单网卡多IP进行路由。
- 用ADO时能不能建立长连接?
- 为什么线程不能执行
- 在线求解,有关tftp 的问题!
- 求救,我只有一天时间了!多线程用odbc的执行存储过程出错,告急!
- 深圳易思博网络软件公司,有谁了解这里?
- 在VC里获取所有的section后、怎样得到所有的section、在线等待?
- InstallShield制作的安装程序在win98第一版的平台下出现安装错误,该如何解决
- 谁有BMP文件的显示源程序。(当然是汇编写的喔!DOS下用的。谢啦!)
- VC++操作ADO和WORD文件的问题
- 给个CInternetSession 发送http get请求 长连接 的例子
{AfxMessageBox(e.Description());//显示错误信息