问题遇到的现象和发生背景
目的:点击程序里的“导出”按钮把数据库中的表导出来一张excel表。
问题:程序会闪退,导出来的excel表只有标题,没有下面的数据。
database.ExecuteSQL(sSql)这段话过不去,屏蔽掉后程序正常运行。
数据库表:
excel表:
问题相关代码,请勿粘贴截图
void CParInfoDlg::OnSetPar()
{
CDatabase database;
TCHAR tchBuffer[MAX_PATH+1];
LPTSTR lpszCurDir;
DWORD cchCurDir = 100;
lpszCurDir = tchBuffer;
GetCurrentDirectory(cchCurDir,lpszCurDir);
CFileDialog dlg(false,"*.xls","Reocrd.xls", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Microsoft Office Excel(*.xls)|*.xls|", NULL);
if (dlg.DoModal() != IDOK) return;
CString sExcelFile = dlg.GetPathName();
CFile file;
file.Open(sExcelFile,CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate);
file.Abort();
file.Remove(sExcelFile);
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)";
CString sSql;
CString strSql;
TRY
{
sSql.Format("DRIVER={%s};DSN="";FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
if ( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
sSql = "CREATE TABLE sheet1(ID TEXT, OpenIdcAvg TEXT)";
database.ExecuteSQL(sSql);
Sleep(100);
strSql = "select * from CurrentInfo";
CDSSProjectDlg::m_pRecordSet->Open((_bstr_t)strSql,CDSSProjectDlg::m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if (CDSSProjectDlg::m_pRecordSet->adoEOF)
{
AfxMessageBox("数据库中没有数据记录!",MB_OK,0);
return;
}
else
{
CDSSProjectDlg::m_pRecordSet->MoveFirst();
while (!CDSSProjectDlg::m_pRecordSet->adoEOF)
{
CString values[2];
for (int ii=0;ii<2;ii++)
{
values[ii] = (char *)(_bstr_t)CDSSProjectDlg::m_pRecordSet->Fields->GetItem((short)(ii))->GetValue();
}
sSql.Format("INSERT INTO sheet1(ID,OpenIdcAvg),VALUES('%s','%s')",values[0],values[1]);
database.ExecuteSQL(sSql);
CDSSProjectDlg::m_pRecordSet->MoveNext();
}
CDSSProjectDlg::m_pRecordSet->Close();
AfxMessageBox("数据导出成功!");
}
}
// 关闭数据库
database.Close();
}
CATCH_ALL(e)
{
TRACE1("No Excel driver installation: %s",sDriver);
}
END_CATCH_ALL;
}
运行结果及报错内容
程序闪退,excel内容缺失