我还有一个计划 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日

悬赏问题

  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1