EXCEL表的MFC导入

                                                                EXCEL表的MFC导入

       非网络环境的数据库应用程序,一般在更改环境时,都需要进行数据源的重置。但相比之下,针对文件数据库的数据源配置在应用程序没有写动态配置数据源的方法时,需要手动配置数据源。程序才能访问数据库文件。相比access数据库的.mdb数据库文件,EXCEL表具有操作便捷,兼容性好等优点。下面介绍在MFC中导入excel数据表的方法。

        导入excel数据表的思路是通过动态注册excel表数据源至odbc,程序通过odbc数据源访问数据表。这个过程可以大致描述3步:

         1:获取odbc数据管理器excel驱动程序

         2:获取当前数据库文件当前目录

         3:注册数据源

        根据模块化思想,下面提供访问examp.xls表的方法:

         example.xls有四列

        第一行分别为:

函数1:获取odbc数据管理器excel驱动程序

CString GetExcelDriver()
{
char sBuf[2048], excel[]="xls",*p = sBuf;
WORD sBufMax = 1000, sBufOut;
CString eDriver(_T(""));
if (!SQLGetInstalledDrivers(sBuf, sBufMax, &sBufOut))
return _T("");
do 
{
if (strstr(p, excel) !=0)
{
eDriver = CString(p);
break;
}
p = strchr(p , '\0') +1;
} while (p[1] != '\0');
return eDriver;
}

函数2:获取当前数据库文件当前目录

CString GetFileName()
{
        CStringcPath,m_csFile;
GetModuleFileName(NULL, cPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
cPath.ReleaseBuffer();
int os;
os = cPath.ReverseFind('\\');
cPath = cPath.Left(os-6);
m_csFile.Format(_T("%s\\examp.xls"),(const wchar_t *)cPath.GetBuffer(cPath.GetLength()));//examp.xls为所需打开的文件名
        //examp.xls为希望导入的数据表
        return m_csFile;
}

函数3:注册数据源   注意此处需要加头文件

#include <odbcinst.h>
#include <afxdb.h>

void InintExcel()
{

CDatabase database;
CString m_csDriver= GetExcelDriver();
        CString m_csFile=GetFileName();
GetModuleFileName(NULL, cPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
cPath.ReleaseBuffer();
m_csSD.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), (const wchar_t        *)m_csDriver.GetBuffer(m_csDriver.GetLength()), (const wchar_t*)m_csFile.GetBuffer(m_csFile.GetLength()));
int n= database.Open(NULL, false, false, m_csSD);
if (0 == n)
{
AfxMessageBox("Open file failed!");
return false;
}
CRecordset recset(&database);
ql.Format("SELECT ITEM1,ITEM2,ITEM3,ITEM4 FROM list");
if(!recset.Open(CRecordset::forwardOnly, ql, CRecordset::readOnly))
{
AfxMessageBox("Open database failed!");
return false;
}
while(!recset.IsEOF())
{
recset.GetFieldValue("ITEM1",item[0]);
recset.GetFieldValue("ITEM2", item[1]);
recset.GetFieldValue("ITEM3", item[2]);
recset.GetFieldValue("ITEM4", item[3]);
//如果读取到的值是空值,则停止读取,表明后续都是空的
if(item[0].CompareNoCase("") == 0)
{
break;
}
}
}

以上是在MFC中导入excel数据表的大致方法。函数1 函数2可以通过在MFC类中通过添加成员函数的方法加入类中,函数3一般直接写进需要处理数据表的消息处理函数中。
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

青玉案砚台

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值