专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VC

Ado 连接Excel 数据库链接有关问题

发布时间:2011-06-23 14:26:30 文章来源:www.iduyao.cn 采编人员:星星草
Ado 连接Excel 数据库链接问题
CString sql=_T(""); 
  sql="select count(*) as geshu from [道路$] where 城市 like '%"+str_city+"%'";  
  Rs1=(((CDataManaApp*)AfxGetApp())->pCon_ex)->Execute((_bstr_t)sql,NULL,adCmdText);
  _variant_t vCount=Rs1->GetCollect("geshu");
这段代码中的CDataManaApp*是什么意思,怎么来的?????如何定义??????


完整代码如下:

VC 利用ADO操作Excel(原创) 
把Excel当做数据库来操作,步骤如下:

1、在stdafx.h中加入#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")

2、在工程的App类的构造函数中打开要操作的Excel表格

 _ConnectionPtr pCon_ex;
 CString ConnectionString;

CToolsApp::CToolsApp()
{
 CString m_strAppPath=_T("");
 CString excel_path=_T("");
 CString con_str=_T("");
 
 //程序所在目录路径
 TCHAR exeFullPath[MAX_PATH];
 GetModuleFileName(NULL,exeFullPath,MAX_PATH);
 
 CString str;
 str.Format("%s",exeFullPath);
 
 m_strAppPath = str.Left( str.ReverseFind( '\\' ) );
 excel_path = m_strAppPath+"\\Database"+"\\新全国图数据统计模版--.xls";
 
 CoInitialize(NULL);

 //打开excel
 /*"HDR=Yes;" 表示工作表的第一行是表头,没有数据。 "HDR=No;"与之相反。 
"IMEX=1;"告诉驱动程序始终将"intermixed"数据类型(numbers, dates, strings等等)作为文本型读取。 
注意:该选项可能引起Excel工作表写权限的修改。如果想写入数据,创建新表等必须使其为0*/
 ConnectionString = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");  
 ConnectionString += excel_path; //excel file name  
 ConnectionString += _T(";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\""); 
 
 BSTR resultsString = ConnectionString.AllocSysString();
 pCon_ex.CreateInstance(__uuidof(Connection));
 
 resultsString = ConnectionString.AllocSysString();
 pCon_ex->Open(resultsString,"","",adModeUnknown);


}

3、从Excel中读数据

  读数据比较简单,可以使用SQL查询语句来找到自己感兴趣的记录。

  CString strSQL=_T("");
  _RecordsetPtr pRst(__uuidof(Recordset)); //数据集
  _RecordsetPtr Rs1(__uuidof(Recordset)); //数目集
  
  strSQL="select * from [道路$] where 城市 like '%"+str_city+"%'"; //[道路$]为sheet的名称
  pRst=(((CDataManaApp*)AfxGetApp())->pCon_ex)->Execute((_bstr_t)strSQL,NULL,adCmdText); //指定的城市  
  
  CString sql=_T(""); 
  sql="select count(*) as geshu from [道路$] where 城市 like '%"+str_city+"%'";  
  Rs1=(((CDataManaApp*)AfxGetApp())->pCon_ex)->Execute((_bstr_t)sql,NULL,adCmdText);
  _variant_t vCount=Rs1->GetCollect("geshu");
  int num1=vCount.lVal; //符合条件的记录个数

  pRst->MoveFirst(); //只读取第一行

  _variant_t t = _variant_t(long(6));
  result = (LPCSTR)_bstr_t(pRecordset->GetCollect(t));//以列序号的方式来读取字段内容 0based

  result = (LPCSTR)_bstr_t(pRecordset->GetCollect("人口"));//以字段名的方式来读字段内容

4 增加新行以及填写某个cell

  _RecordsetPtr m_pRecordset;
  m_pRecordset.CreateInstance(__uuidof(Recordset));

  try
  {
  m_pRecordset->Open("SELECT * FROM [道路$]",// 查询道路表中所有字段
  ((CToolsApp*)AfxGetApp())->pCon_ex.GetInterfacePtr(), // 获取库接库的IDispatch指针
  adOpenDynamic,
  adLockOptimistic,
  adCmdText);
  }
  catch(_com_error *e)
  {
  AfxMessageBox(e->ErrorMessage());
  }
  
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: