MICROSOFT EXCEL DRIVER未发现数据源名称并且未指定默认驱动程序

电脑是VS2015,office2013,在MFC中建立一个listcontrol,导入导出Excel文件,源代码:

void CCtrllistMFCApplication3Dlg::OnBnClickedButton1()

{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(TRUE,//TRUE或FALSE。TRUE为打开文件;FALSE为保存文件
_T("xls"), //为缺省的扩展名
_T("FileList"), //为显示在文件名组合框的编辑框的文件名,一般可选NULL 
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,//为对话框风格,一般为OFN_HIDEREADONLY   |   OFN_OVERWRITEPROMPT,即隐藏只读选项和覆盖已有文件前提示。 
_T("Excel 文件(*.xls)|*.xls||")//为下拉列表枢中显示文件类型
);
dlg.m_ofn.lpstrTitle = _T("导入数据");


if (dlg.DoModal() != IDOK)
return;
CString strFilePath;
//获得文件路径名
strFilePath = dlg.GetPathName();
//判断文件是否已经存在,存在则打开文件
DWORD dwRe = GetFileAttributes(strFilePath);
if (dwRe != (DWORD)-1)
{
//ShellExecute(NULL, NULL, strFilePath, NULL, NULL, SW_RESTORE); 
}
else return;
CDatabase db;//数据库库需要包含头文件 #include
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); // Excel驱动
CString sSql, arr[3];


sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"), sDriver, strFilePath, strFilePath);
if (!db.OpenEx(sSql, CDatabase::noOdbcDialog))//连接数据源DJB.xls
{
MessageBox(_T("打开EXCEL文件失败!", "错误"));
return;
}
//打开EXCEL表
CRecordset pset(&db);
m_list.DeleteAllItems();
AfxMessageBox(_T("OK"));
/* sSql = "SELECT 学号,姓名,成绩 "
"FROM EXCELDEMO";      */
// "ORDER BY 姓名";
sSql.Format(_T("SELECT * FROM [Sheet1$]"));
pset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);//CRecordset::forwardOnly是只能向前滚动的只读记录集
while (!pset.IsEOF())
{
pset.GetFieldValue(_T("X"), arr[0]);//前面字段必须与表中的相同,否则出错。
pset.GetFieldValue(_T("Y"), arr[1]);
pset.GetFieldValue(_T("xn"), arr[2]);


int count = m_list.GetItemCount();//插入到ListCtrl中
m_list.InsertItem(count, arr[0]);
m_list.SetItemText(count, 1, arr[1]);
m_list.SetItemText(count, 2, arr[2]);
pset.MoveNext();
}
db.Close();


MessageBox(_T("Excel数据成功导入系统!", "导入成功"));


}
发现运行之后显示MICROSOFT EXCEL DRIVER未发现数据源名称并且未指定默认驱动程序,可是在控制面板-管理工具-ODBC数据源中有显示MICROSOFT EXCEL DRIVER,所以一定是我没有设置具体的数据源名称,于是新建一个DJB.xls的数据源,如图,再运行程序时就找到了

你可能感兴趣的:(MICROSOFT EXCEL DRIVER未发现数据源名称并且未指定默认驱动程序)