运用ADO访问Excel,并对其进行操作

运用ADO访问时:

第一步:

//该导出语句放在stdafx.h文件中,且放在所有#include<>后面
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

第二步:

数据库的初始化,一般放在基于对话框的应用程序.cpp  InitInstance()函数中

if (!AfxOleInit())
{
AfxMessageBox(_T("初始化失败"));
return FALSE;
}

第三步:

一些简单操作的代码:

public:
_ConnectionPtr m_pConnection;

_bstr_t strConnection=_T("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;Data Source=C:\\Documents and Settings\\Administrator\\桌面\\ExelDemo.xls;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"");
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance(_T("ADODB.Connection"));//创建Connection对象
if (SUCCEEDED(hr))
{
hr=m_pConnection->Open(strConnection,_T(""),_T(""),adModeUnknown);//连接数据库
}
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);
}

//读取Excel里面数据

BOOL CADODlg::ReadExcelData()
{
_RecordsetPtr rcdset=NULL;
HRESULT hr;
CStringArray tbNames;
try
{
//获取所有表单
rcdset=m_pConnection->OpenSchema(adSchemaTables);
while(!rcdset->adoEOF)
{
CString strTbName=rcdset->GetFields()->GetItem(_T("TABLE_NAME"))->Value;
if (strTbName.IsEmpty()==FALSE)
{
if (strTbName.Find(‘$‘)>0)//取表名含有$的表,以防重复
{
tbNames.Add(strTbName);
}
}
rcdset->MoveNext();
}
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format(_T("读取数据失败!\r\n错误信息:%s"),e.ErrorMessage());
AfxMessageBox(errormessage);
return FALSE;
}
rcdset->Close();
//获取表单中的数据
hr=rcdset.CreateInstance(__uuidof(Recordset));
int nSheet=tbNames.GetCount();
CString strSql;
CString strData;
for (int ii=0;ii<nSheet;ii++)//循环表单
{
CString strTbName=tbNames.GetAt(ii);
strSql.Format(_T("SELECT Num,Name,Sex,Comp FROM [%s]"),strTbName);
try
{
rcdset->Open(_bstr_t(strSql),m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
rcdset->MoveFirst();
while(!rcdset->adoEOF)
{
m_strNum=rcdset->GetCollect(_T("Num"));
m_strName=rcdset->GetCollect(_T("Name"));
m_strSex=rcdset->GetCollect(_T("Sex"));
m_strComp=rcdset->GetCollect(_T("Comp"));
strData=m_strNum+_T(" ")+m_strName+_T(" ")+m_strSex+_T(" ")+m_strComp;
m_lstData.AddString(strData);
rcdset->MoveNext();
}
}
catch (_com_error e)
{
CString strError;
strError.Format(_T("警告:打开数据表时发生异常。错误信息:%s"),e.ErrorMessage());
AfxMessageBox(strError);
return FALSE;
}
rcdset->Close();
}
return TRUE;
}

时间: 2024-08-30 10:46:07

运用ADO访问Excel,并对其进行操作的相关文章

ADO访问Access数据库错误解决

最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010; Access2000~Access2003连接串建立数据库连接. 关键数据库操作代码 BOOL CAccessDatabase::Query(const CString strSQLString, UINT nFieldNumber, vector<vector<_variant_t> >& vec

ADO访问Access数据库错误解决心得随笔

最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下. 环境 win7 x86系统: VS2012编译器: Office2010: Access2000~Access2003连接串建立数据库连接. 关键数据库操作代码 BOOL CAccessDatabase::Query(const CString strSQLString, UINT nFieldNumber, vector<vector<_variant_t> >& vec

Oracle oledb 打包并集成到程序安装包(VC ADO访问Oracle)

最近有一个项目和oracle交互,我用的是ADO的方式进行试问操作. 首先把数据库连接的东东记录一下,老了记性不好啊! 操作如下: //连接串这么写的话就可以不用配置 tnsnames.ora配置文件了(网上很多教程都让改这个配置文件) strConnect.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;\ Data Source=\"(DESCRIPTION =

ado.net excel 模版

ado.net excel 模版 private static void Excute()        {            while (true)            {                string templatePath = System.Environment.CurrentDirectory + "\\template.xls";                string newPath = System.Environment.CurrentDi

同时使用ADO与Excel类库冲突的问题

客户需要一个Demo程序实现Access数据库表导出到Excel表格,并将表中存储的照片(OLE对象)以其中一个字段(编号)命名存储到本地.程序中引入了ADO操作Access数据库("C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")),当再次引入Excel.h头文件时候发生冲突,出现很多错误.去掉其中一个引用编译无错.

JAVA中用POI组件访问EXCEL文档

对于用JAVA访问EXCEL文件,常用的组件有jxl和POI, jxl因为目前已无版本更新,并且仅能访问EXCEL2007以前的文件格式,对xlsx文件格式目前不支持, 故而推荐使用POI, POI的官方下载地址为: http://poi.apache.org/ 本质上来说, EXCEL2007文档是一个XML文档, 所以POI对EXCEL文件读操作有两种方式,一种是DOM, 一种是SAX, DOM对EXCEL操作简单,易上手, 但是占用较多的内存,尤其是表格超过10000行, 经常会出现内存溢

Ado访问sqlserver 端口号非1433时 连接串的写法

Ado访问sqlserver 端口号非1433时 连接串的写法 Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=hostName,Port //注意用 逗号分隔主机名与端口号

[译] Ruby如何访问Excel文件

Parsing Excel Files with Ruby BY: MATT NEDRICH   翻译:佣工7001 本文中,我将会评判几种Ruby语言访问Excel文件的库.我将要讨论针对不同格式的Excel文件访问的现有的几个Ruby库.本文中更多地聚焦于读取Excel文件,但是也对与更改/写入Excel文件稍作了些讨论. 如果你迫不及待地想要查看代码,请移步我提交与Github上的 一个项目 ,项目中有一些读取Excel文件的代码片段,都是本文所提到的. Excel文件类型 Before

CodeIgniter框架——访问方式 URI 分配变量 数据库操作

1.访问方式: CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表) eg:localhost/index.php/welcome/index/id 第一段表示调用控制器类. 第二段表示调用类中的函数或方法. 第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量. 2.URI参数获取: 控制器端代码 1 public function getUri($id,$name,$year) 2 { 3 echo "id--->"