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());
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于visual studio 2005的工程文件*.vcproj的问题
请问:Visual Studio 2005 新建一个工程之后,会自动生产一个*.vcproj的一个文件,这...
-
用MFC画图的问题
我现在要用随机数产生300个固定的点保存在数组中,并在ondraw里画出这300个点,而且通过定时器使这300个点做运动。...
-
VS2010中的C++怎么连接数据库?
之前一直用VC++6.0的、现在想学学用最新的VS、但是感觉连接数据库和之前不一样了、具体应该怎么弄...
-
CLI编程 高手帮忙
我现在用C++/CLI 混编,
我有一个方法, 是调用一个C 的类库 得到一个 char * 的值
现在我...
-
新手求教::VC.NET2003里面的"添加变量"菜单变灰了,怎么弄?
最近学着用.net写程序,以前用的是6.0,不知道为什么我设计的EDIT Con...
-
刚学习vc.net 请教一个String做参数的问题,请高手指教一下
下面的代码为什么不能编译呢,出现这个错误呢
.\clr.cpp(12) : error C3...
-
VS2003中通过ADO取SQL2003中bigint 负值变正值的问题,求助!
在SQL2003中 数据库中假设 一个bigint类型的数据位-1234这样的值,通过如...
-
新手学习VC用那个版本的编译器好!
新手学习VC用那个版本的编译器好!?
------解决方案--------------------
VC++6.0
------解决...
-
正则表达式
有这样的字符串
"1,',2"",3"
希望将单个的"替换成单引号,将连续两个的""替换成一个双引号。
正则表达式该如何写。
...
-
为什么<<精通MFC>>附带的源程序不能编译成功
vc2010编译后有两个错误提示,分别如下,
错误一:
1>c:\program files\microsoft vi...