MFC通过sql访问excel的方法
2018-06-17 23:23:35来源:未知 阅读 ()
1.首先检查安装的驱动中是否有excel,代码如下:
CString CAbcd1Dlg::GetExcelDriver()
{
TCHAR sBuf[1000], *p=sBuf;
WORD sBufMax=1000, sBufOut;
if (!SQLGetInstalledDrivers(sBuf, sBufMax, &sBufOut))
return "";
CString strDriver;
do{
if(_tcsstr(p,_T("Excel"))!=0)
{
strDriver=CString(p);
break;
}
p=_tcschr(p,_T('\0') )+1;
}while(p[1]!=_T('\0'));
return strDriver;
}
此函数的返回值即为excel驱动设备名称
2.读取访问excel表数据,先定义一个表,操作如下:
运行Microsoft Excel , 打开要操作的工作簿, 左键拖拽,选取要定义成为表的区域,
从菜单中选择'插入 '->'名称'->'定义','定义名称'对话框出现后,键入表的名字,
例如:test,保存退出。
这样,你就可以在VC中,使用象SELECT * FROM test这样的SQL语句了
CString sD;
//m_strDriver为 1 中获取的excel设备驱动名称,
//strExcelFullFileName是excel表的全名
sD.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), m_strDriver, strExcelFullFileName);
CDatabase database;
//打开数据库(即Excel文件)
if (0 == database.Open(NULL, false, false, sD))
{
CString strFailInfo;
strFailInfo.Format(_T("%s database 打开失败"),strExcelName);
AfxMessageBox(strFailInfo);
return;
}
CRecordset recset(&database);
//设置读取的查询语句
CString ql(_T("SELECT 字段1,字段2 FROM test"));
//执行查询语句
recset.Open(CRecordset::forwardOnly,ql,CRecordset::readOnly);
遍历每一条,获取每一个字段
while(!recset.IsEOF())
{
CString str1, str2;
recset.GetFieldValue(_T("字段1"), str1);
recset.GetFieldValue(_T("字段2"), str2);
recset.MoveNext();//移到下一条记录
}
3.写excel
CString sSql;
//m_strDriver为 1 中获取的excel设备驱动名称
//strExcelFileName 为 写入的excel名称
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_strDriver, strExcelFileName, strExcelFileName);
//打开数据文件
if (0 == m_dbWriteToExcel.OpenEx(sSql,CDatabase::noOdbcDialog)){
return false;
}
写入表头
sSql = "CREATE TABLE Exceldemo (字段1 TEXT, 字段2 TEXT)";
m_dbWriteToExcel.ExecuteSQL(sSql);
//写入数据
str1.Replace(_T("'"),_T("''"));
str2.Replace(_T("'"),_T("''"));
CString strSql;
strSql.Format(_T("INSERT INTO Exceldemo (字段1, 字段2) VALUES ('%s', '%s ')"),str1, str2);
m_dbWriteToExcel.ExecuteSQL(strSql);
备注:
1.由于sql中插入的字段值要用''包起来,如果字段值中有'则会出现冲突,在sql中俩个'代表一个'
2.'%s ' 后面的'号前有个空格,经过测试,'紧挨着%s会出现一些奇怪的情况。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++和C#的对比 2020-05-17
- 算法笔记刷题6 ( PAT 1003我要通过 ) 2020-05-08
- 无法正确通过算法题目都是哪些原因造成的? 2020-04-05
- qt连接mysql报错:QSqlDatabase: QMYSQL driver not loaded 2020-02-29
- 二叉树(二)线索二叉树 2020-02-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash