从EXCEL文件中读取数据的问题
BOOL CIcupsDlg::CheckExcel(CString strFile,BOOL bShow)
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = strFile;
sDriver = GetExcelDriver();
if( sDriver.IsEmpty() )
{
AfxMessageBox("No Excel ODBC driver found,请确保您的机器上安装有 Excel!");
return FALSE;
}
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
BOOL bSucc = FALSE;
TRY
{
database.Open(NULL,false,false,sDsn);
// Allocate the recordset
CRecordset recset( &database );
if(bShow == 0)
sSql = "select partno, brand, datecode, note, package, quantity, price from [sheet1$]";
else
sSql = "select top 100 partno, brand, datecode, note, package, quantity, price from [sheet1$]";
// Execute that query (implicitly by opening the recordset)
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);
//Checking the quantity
while( !recset.IsEOF() )
{
recset.GetFieldValue("quantity",sItem1);
//AfxMessageBox(sItem1);
int iLen = strlen(sItem1);
for(int i = 0 ; i <iLen; i++ )
{
char c= sItem1.GetAt(i);
//AfxMessageBox(c);
if ( !isdigit(c) && c != '.')
{
AfxMessageBox("数量字段中包括其他字符,请去除!");
return false;
}
}
recset.MoveNext();
}
recset.Close();
// Browse the result
recset.Open(CRecordset::forwardOnly,sSql,CRecordset::readOnly);
int nRow = 0;
int nIndex = 0,nCol = 0;;
while( !recset.IsEOF() )
{
//recset.MoveFirst();
if(bShow == TRUE)
{
nCol = 1;
recset.GetFieldValue("partno",sItem1);
nIndex = m_lstIc.InsertItem(m_lstIc.GetItemCount(),sItem1);
recset.GetFieldValue("brand",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
recset.GetFieldValue("datecode",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
recset.GetFieldValue("note",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
recset.GetFieldValue("package",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
recset.GetFieldValue("quantity",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
recset.GetFieldValue("price",sItem1);
m_lstIc.SetItemText(nIndex,nCol++,sItem1);
}
recset.MoveNext();
}
int nCount = recset.GetRecordCount();
if(bShow == FALSE)
{
m_nRecordCount = nCount;
}
if(nCount > 0)
//CString strcount;
//strcount.Format("无法创建套接字,建议您重新启动计算机");
// MessageBox(strcount,"报告!",MB_ICONERROR);
bSucc = TRUE;
// Close the database
database.Close();
}
CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;
return bSucc;
}
以上过程是从excel文件中提取数据,存储在临时数据库中,“//Checking the quantity"和”// Browse the result“之间的部分,数据校验的过程,我想检查excel文件quantity字段是不是都是数字,如果不是数字及时提醒,测试数据一个包含4条记录的excel文件, 我的问题是:如果excel文件中有3条记录的quantity字段包含字符,比如5000S ,则程序能正确执行,校验过程可以提醒,但是如果不是3条,而是2条,既前两条记录的quantity是数字,后两条带字符,则校验过程没执行,临时数据库中取不到相应的值,请高手指点,这是怎么回事?