我还有一个计划 2022-09-03 14:40 采纳率: 100%
浏览 37
已结题

数据库导出excel表格

问题遇到的现象和发生背景

目的:点击程序里的“导出”按钮把数据库中的表导出来一张excel表。
问题:程序会闪退,导出来的excel表只有标题,没有下面的数据。
database.ExecuteSQL(sSql)这段话过不去,屏蔽掉后程序正常运行。
数据库表:

img

excel表:

img

问题相关代码,请勿粘贴截图

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内容缺失

  • 写回答

1条回答 默认 最新

  • 来灵 2022-09-03 14:58
    关注

    values[ii] = (char *)(_bstr_t)CDSSProjectDlg::m_pRecordSet->Fields->GetItem((short)(ii))->GetValue();
    这行代码,数组里有值吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月3日

悬赏问题

  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答