我用ODBC方法处理EXCEL表,但提示
数据库错误:microsoft Jet 数据库引擎找不到对象
但我的数据库确实存在
请各位帮忙!代码如下:
void CPA_return_dataDlg::OnOk()
{
CStdioFile ReturnFile;
CString m_Return_File_Name; //返传文件名
CString In_Record=_T("");
CString m_Source_File_Name; //Execl格式的文件名 CString m_Flag; //处理标志
CString m_Account; //账号
CString m_Amount; //应发的金额
CString m_Amount_Real_Deal; //实际发的金额
// CDatabase database;
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile;
// TODO: Add your control notification handler code here
//添加具体处理代码
GetDlgItemText(IDC_RETURN_FILENAME,m_Return_File_Name);
GetDlgItemText(IDC_SOURCE_FILENAME,m_Source_File_Name);
if (ReturnFile.Open(m_Return_File_Name,CFile::modeRead) == FALSE )
{
MessageBox("打开文件错误",NULL,NULL);
return;
}
BOOL bEnd=ReturnFile.ReadString(In_Record);
if(!bEnd)
{
MessageBox("源文件为空:请检查文件!",NULL,MB_ICONSTOP);
return ;
}
sFile = m_Source_File_Name; // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
}
// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
//sFile = "bank030109.xls";
AfxMessageBox(sDsn);//end 创建数据库连接 while (bEnd )
{ m_Flag=In_Record.Mid(1,3);
m_Account=In_Record.Mid(16,19);
m_Amount=In_Record.Mid(42,17);
m_Amount_Real_Deal=In_Record.Mid(59,17);
// AfxMessageBox("没有安装Excel驱动!");
GetDlgItem(IDC_DISP)->SetWindowText(m_Flag+m_Account+m_Amount);
UpdateData(TRUE);
CString t_m_Account ; for( int i=sFile.GetLength();i>=0; i--)
if(sFile.GetAt(i)=='.')
{
sFile.SetAt(i,'\0');
break;
}
TRY
{
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT Name, Age "
"FROM "+sFile ;
AfxMessageBox(sSql);
// 执行查询语句
recset.Open(CRecordset::snapshot , sSql, CRecordset::none);
// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
bEnd=ReturnFile.ReadString(In_Record);
}
CDialog::OnOK();
}
数据库错误:microsoft Jet 数据库引擎找不到对象
但我的数据库确实存在
请各位帮忙!代码如下:
void CPA_return_dataDlg::OnOk()
{
CStdioFile ReturnFile;
CString m_Return_File_Name; //返传文件名
CString In_Record=_T("");
CString m_Source_File_Name; //Execl格式的文件名 CString m_Flag; //处理标志
CString m_Account; //账号
CString m_Amount; //应发的金额
CString m_Amount_Real_Deal; //实际发的金额
// CDatabase database;
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile;
// TODO: Add your control notification handler code here
//添加具体处理代码
GetDlgItemText(IDC_RETURN_FILENAME,m_Return_File_Name);
GetDlgItemText(IDC_SOURCE_FILENAME,m_Source_File_Name);
if (ReturnFile.Open(m_Return_File_Name,CFile::modeRead) == FALSE )
{
MessageBox("打开文件错误",NULL,NULL);
return;
}
BOOL bEnd=ReturnFile.ReadString(In_Record);
if(!bEnd)
{
MessageBox("源文件为空:请检查文件!",NULL,MB_ICONSTOP);
return ;
}
sFile = m_Source_File_Name; // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
}
// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
//sFile = "bank030109.xls";
AfxMessageBox(sDsn);//end 创建数据库连接 while (bEnd )
{ m_Flag=In_Record.Mid(1,3);
m_Account=In_Record.Mid(16,19);
m_Amount=In_Record.Mid(42,17);
m_Amount_Real_Deal=In_Record.Mid(59,17);
// AfxMessageBox("没有安装Excel驱动!");
GetDlgItem(IDC_DISP)->SetWindowText(m_Flag+m_Account+m_Amount);
UpdateData(TRUE);
CString t_m_Account ; for( int i=sFile.GetLength();i>=0; i--)
if(sFile.GetAt(i)=='.')
{
sFile.SetAt(i,'\0');
break;
}
TRY
{
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT Name, Age "
"FROM "+sFile ;
AfxMessageBox(sSql);
// 执行查询语句
recset.Open(CRecordset::snapshot , sSql, CRecordset::none);
// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
bEnd=ReturnFile.ReadString(In_Record);
}
CDialog::OnOK();
}
sFile是文件名(数据库名)
这里应该是表名,比如Sheet1等等...
我把文件名称改为数据表名(sheet)还是提示同样的信息。
通常如果你没有改过表名的话应该是Sheet1,Sheet2,Sheet3等等
"sheet"对吗?
或者DEBUG一下看看到哪行出错?
如果database.Open(NULL, false, false, sDsn);能过,连接就没有问题,
如果表名有问题recset.Open(CRecordset::snapshot , sSql, CRecordset::none);就出错.
另外recset.GetFieldValue("Name ", sItem1);
中的"Name "好象有空格,是否可以我没有试过...
其他地方好象没有什么问题...GOOD LUCK...
表名我改为aaaa,但确提示同样的错误
另外我的文件名和表名(Sheet)不同没有关系吧?
"FROM Sheet1" ;
应该改为 select * from [$sheet1]
sSql = "Select * from [Sheet1$]";
另外recset.GetFieldValue("Name ", sItem1);
中的"Name "好象不能有空格...
数据库错误:microsoft Jet 数据库引擎找不到对象$Sheet1(这个名称我核实
应该没有问题),请确定对象是否存在,并正确地写出它的名称和路径
急!!!