当前位置:网站首页>odbc excel--2022-07-21
odbc excel--2022-07-21
2022-07-22 22:45:00 【jxb_8888】
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString FilePathName ;
CFileDialog dlg(TRUE,"xls file(*.xls)|*.xls", NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"xls file(*.xls)|*.xls||"); //TRUE为OPEN对话框,FALSE为SAVE AS对话框
if(dlg.DoModal()==IDOK)
{
FilePathName = dlg.GetPathName();
SetWindowText( FilePathName );
}
CDatabase db ;
CString sDriver, sDsn , sSql ; // , sFile将被读取的Excel文件名
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox(_T( "没有安装Excel驱动!" ));
return ;
}
// 创建进行存取的字符串
sDsn.Format(_T( "ODBC;DRIVER={%s};DSN='';DBQ=%s" ), sDriver, FilePathName);
TRY
{
// 打开数据库(既Excel文件) //读入EXCEL
db.Open(NULL, false , false , sDsn);
CRecordset rs(&db);
// 设置读取的查询语句.
sSql .Format( _T("SELECT * FROM %s" ),"[公共数据$]" ); //字段名称要分大小写
// 执行查询语句
rs.Open(CRecordset::forwardOnly, sSql,CRecordset::none);
//测试取得表中字段名称
short sFieldCount = rs.GetODBCFieldCount();
/*
if(sFieldCount <=0)
{
AfxMessageBox("0000");
}
else
{
CString str ;
str.Format("%d",sFieldCount);
AfxMessageBox(str);
}
*/
CODBCFieldInfo fieldinfo;
CStringArray strArrPublicFields;
for( int i=0; i < sFieldCount; i++)
{
rs.GetODBCFieldInfo(i,fieldinfo);
//AfxMessageBox(fieldinfo.m_strName.GetBuffer(fieldinfo.m_strName.GetLength()));
//把读到的表头项写一个字符串数组
strArrPublicFields.Add(_T(fieldinfo.m_strName.GetBuffer(fieldinfo.m_strName.GetLength())));
}
CListCtrl *m_ListCtrl1 = (CListCtrl *)GetDlgItem(IDC_LIST1);
//设置背景颜色
//m_ListCtrl1->SetBkColor(RGB(0,255,0));
// CRect re ;
// m_ListCtrl1->GetClientRect(&re); //取得控制原来大小
// m_ListCtrl1->SetWindowPos( NULL,0,0,205, re.Height() ,SWP_NOZORDER | SWP_NOMOVE ); //编辑控件的大小,位置不变
//为表格控件设置表头
DWORD dwExtStyles1 = m_ListCtrl1->GetExtendedStyle();
m_ListCtrl1->SetExtendedStyle(dwExtStyles1 | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
for(i = 0 ; i < strArrPublicFields.GetSize() ; i++)
{
m_ListCtrl1->InsertColumn(i,strArrPublicFields.GetAt(i),LVCFMT_LEFT,100,i);
}
i =0 ;
// 获取查询结果//读取记录
while (!rs.IsEOF())
{
//把记录中的数据写入到内存链表
CStringArray *pNewItem = new CStringArray ;
for(i = 0 ; i < strArrPublicFields.GetSize() ; i++)
{
CString str ;
rs.GetFieldValue(strArrPublicFields.GetAt(i), str); pNewItem->Add(str);
//把数据写入表格控件
if (i == 0)
m_ListCtrl1->InsertItem(i, pNewItem->GetAt(i) );//插入行
else
m_ListCtrl1->SetItemText(i-1,i,pNewItem->GetAt(i));//设置该行的不同列的显示字符
}
//把记录加入公共数据表
PublicTable.AddTail(pNewItem);
delete pNewItem;
// 移到下一行
rs.MoveNext();
}
rs.Close();
// 关闭数据库
db.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox(_T( "数据库错误: " ) + e->m_strError);
}
END_CATCH;
}
CString CTestDlg::GetExcelDriver()
{
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return "";
// 检索已安装的驱动是否有Excel...
do
{
if (strstr(pszBuf, "Excel") != 0)
{
//发现 !
sDriver = CString(pszBuf);
break;
}
pszBuf = strchr(pszBuf, '\0') + 1;
}
while (pszBuf[1] != '\0');
return sDriver;
}
边栏推荐
猜你喜欢

深入浅出地理解STM32中的中断系统——从原理到简单工程示例——保姆级教程

Web resource sharing

Redis中的数据类型

动作捕捉在自动化控制领域的应用

技术干货 | 基于MindSpore详解Perplexity语言模型评价指标

阿里云国际版注册成功后添加支付方式

Come on, slide to the next little sister

Redis profile

Cloud computing may become a new inflection point in the era? From which point can we see?

【读书笔记->统计学】12-01 置信区间的构建-置信区间概念简介
随机推荐
网站图标的实现
Web resource sharing
H7-TOOL串口脱机烧录操作说明,支持TTL串口,RS232和RS485(2022-06-30)
PIP update a package
RPC-BDY(5)-服务自动注销、负载均衡
C language function (1)
来,滑动到下一个小姐姐
多商户系统的直播功能用过吗?用过的朋友扣个 666!
Easily take you to the gate of turtle drawing
U盘被格式化数据能恢复吗,U盘被格式化了怎样恢复
昇思易点通 | 经典卷积神经网络的深度学习解析
wps数据拆分
将childNodes返回的伪数组转化为真数组
阿里云国际版账户收到账号风险通知,怎么办?
How to use selenium.chrome to realize the extended function of intercepting or forwarding requests
leetcode-382.链表随机节点
Google Earth engine app - a complete map legend app (land use classification of western United States)
动作捕捉在自动化控制领域的应用
传统银行票据打印系统几个关键技术点简要分析
方正中期是什么级别的期货公司?开户安全可靠吗?