关于以ODBC和ADO方式访问excel数据库总结
2011-11-07 09:34
246 查看
2011-11-07 09:34
1635人阅读 评论(4)
收藏
举报
excel数据库listmicrosoftpropertiesoutput
温馨提醒,看帖子前请复习下连接数据方式有哪几种,以及各有什么优缺点,然后再来看本贴。
首先阐述一个小问题,如何用excel建立一张表呢?
1.excel 2003的情况,假如excel中第一行是字段名,第二行以后是数据行,则选择多行(包括第一行),然后菜单中选择“插入”->名称->自定义名称。其中这个名称就是表名,用在select * from 表名语句中。
2.excel 2007的情况,假如excel中第一行是字段名,第二行以后是数据行,则选择多行(包括第一行),然后菜单中选择“公式”->自定义名称。其中这个名称就是表名,用在select * from 表名语句中。
然后来写ODBC和ADO方式来访问excel
ODBC:代码如下
[cpp]
view plaincopy
void CDirCheckDemoDlg::OnReadExcel(CString csFile)
{
CDatabase database;
CString sSql;
CString sItem[11];
CString sDriver;
CString sDsn;
CString sFile,sPath;
sFile = csFile ; // 将被读取的Excel文件名
//动态注册数据源
if(!SQLConfigDataSource(0,ODBC_ADD_DSN,"Microsoft Excel Driver (*.xls)\0","DSN=mydb\0Description=MouseDataBase\0DBQ=sFile\0\0"))
{
AfxMessageBox("添加DSN失败...");
return;
}
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
}
// 创建进行存取的连接字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
TRY
{
// 建立与ODBC数据源的连接
database.Open(NULL, false, false, sDsn);
// 设置读取的查询语句
sSql = "SELECT *"//sSql = "SELECT Name, Age "
"FROM ExcelDemo " ;
"ORDER BY Name ";
CRecordset recset(&database);
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("FileNr 1", sItem[0]);
recset.GetFieldValue("ReportFlag", sItem[1]);
recset.GetFieldValue("Date",sItem[2]);
recset.GetFieldValue("Time",sItem[3]);
recset.GetFieldValue("Output volt",sItem[4]);
recset.GetFieldValue("Output cur",sItem[5]);
recset.GetFieldValue("Reg volt",sItem[6]);
recset.GetFieldValue("Reg cur",sItem[7]);
recset.GetFieldValue("ExcVolt",sItem[8]);
recset.GetFieldValue(" Meas 1",sItem[9]);
recset.GetFieldValue(" Meas 2",sItem[10]);
//显示记取的内容
for (int i = 10;i >= 0;i--)
{
m_List.AddString( sItem[i]);//m_List为CListBox控件名
[cpp]
view plaincopy
}
/*
CString string;
string.Format("%s %s",sItem1,sItem2);
AfxMessageBox(string);*/
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
以上是ODBC访问excel 2003代码,注意点:连接字符串,还有要运行程序才知道查询得到的数据顺序是随机的,不是第一句程序访问的数据显示一定是在第一句数据的。
ODBC连接excel 2007代码,请修改相应连接字符串,字符串网上好像没找到,自己找吧。
ADO访问excel 代码:
[cpp]
view plaincopy
void CAdoDlg::OnBtnQuery()
{
CoInitialize(NULL);
_ConnectionPtr pConn(_uuidof(Connection));
_RecordsetPtr pRst(_uuidof(Recordset));
// pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f://study/win32_app/Ado/Demo.xls;Extended Properties=Excel 8.0;Persist Security Info=False";//访问excel 2003字符串
pConn->ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=f://study/win32_app/Ado/1.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'";//访问excel 2007字符串
pConn->Open("","","",adModeUnknown);
// pRst=pConn->Execute("select * from ExcelDemo",NULL,adCmdText);
pRst=pConn->Execute("select * from File",NULL,adCmdText);
while (!pRst->rsEOF)
{
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("FileNr 1"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("ReportFlag"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Date"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Time"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Output volt"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Output cur"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Reg volt"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("Reg cur"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("ExcVolt"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect(" Meas 1"));
((CListBox *)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect(" Meas 2"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
}
相关文章推荐
- 关于以ODBC和ADO方式访问excel数据库总结
- 关于数据库连接的几种方式 ODBC / DAO / RDO / OLEDB / ADO
- ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系
- ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系
- MySql基于ADO.NET方式访问数据库ADOHelper封装MySqlHelper
- MFC VC++下ADO方式访问连接MySQL数据库 添加 删除 修改数据库
- ado方式访问带密码数据库的方法
- ado方式访问带密码数据库的方法
- asp.net下ADO.NET操作数据库的几种方式总结
- 通过OleDB连接方式,访问Access,Excel数据库.
- VC++中ADO方式访问数据库datetime字段(不带毫秒时间与带毫秒时间)
- 《关于在MFC中使用ODBC方式连接数据库可能出现的问题》第一篇
- 常用数据库连接方式 ODBC,ADO 等 | from web
- 学习ADO和ODBC访问数据库的一些思路整理
- VC++ ADO方式访问数据库简要笔记
- VC编程中利用ADO方式访问SQL Server 2012数据库(1)- 连接数据库
- ADO.NET实用经验总结(5大对象访问数据库)
- ODBC DAO ADO OLEDB 数据库连接方式区别
- ADO访问数据库时的关于 "未发现数据源并且未指定默认驱动程序" 的错误的解决方案
- ADO数据库访问技术总结