这个问题我也不知道怎么表达才算清楚。具体是这样的,我做了个access数据库,里面利用access的查询,做了几个查询表格,查询表格里面有一列是通过公式计算的数据类型,但是我用vc++的ado读取该查询表格的数据,但是这个通过计算得出的数据列,vc++始终读取不出来,显示该数据为空。我现在也找不到相关的错误,该列数据是肯定有的,我用access直接打开是可以看得到的。不知道大家有没有遇到过类似的情况。

解决方案 »

  1.   

    m_pLFDetail.DeleteAllItems();
    GetDlgItemText(IDC_PMS501_CFDFinish,cs_temp);
    if (cs_temp=="是")
    cs_SQL.Format("select * from 515_AccountCount where AC_LMoney between -.001 and .001");
    else if (cs_temp=="否")
    cs_SQL.Format("select * from 515_AccountCount where AC_LMoney not between -.001 and .001");
    else cs_SQL.Format("select * from 515_AccountCount where AC_LMoney is not null");
    GetDlgItemText(IDC_PMS501_CFStaff,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and AMT_Staff = '"+cs_temp.Left(5)+"'";
    GetDlgItemText(IDC_PMS501_EFDSubject,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and AccountD_Subject like '%"+cs_temp+"%'";
    GetDlgItemText(IDC_PMS501_EFDID,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and CBD_ID like '%"+cs_temp+"%'";
    GetDlgItemText(IDC_PMS501_EFDSubjectD,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and AC_SubjectD like '%"+cs_temp+"%'";
    GetDlgItemText(IDC_PMS501_EFDFundTB,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and AMT_ATime >= "+cs_temp;
    GetDlgItemText(IDC_PMS501_EFDFundTE,cs_temp);
    if (!cs_temp.IsEmpty())
    cs_SQL += " and AMT_ATime <= "+cs_temp;
    int Set_I=0;
    JudgeConnection();
    _variant_t v_StaffTemp;
    m_pRecordset.CreateInstance("ADODB.Recordset");
    m_pRecordset->Open(_variant_t(cs_SQL),_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
    while (!m_pRecordset->adoEOF)
    {
    cs_temp.Format("%d",Set_I+1);
    m_pLFDetail.InsertItem(Set_I,cs_temp,0);
    v_StaffTemp = m_pRecordset->GetCollect("AMT_Staff");
    if (v_StaffTemp.vt!=VT_NULL)
    m_pLFDetail.SetItemText(Set_I,1,(LPCTSTR)(_bstr_t)v_StaffTemp);
    v_StaffTemp = m_pRecordset->GetCollect("AccountD_Source");
    if (v_StaffTemp.vt!=VT_NULL)
    m_pLFDetail.SetItemText(Set_I,2,(LPCTSTR)(_bstr_t)v_StaffTemp);
    v_StaffTemp = m_pRecordset->GetCollect("AccountD_Subject");
    if (v_StaffTemp.vt!=VT_NULL)
    m_pLFDetail.SetItemText(Set_I,3,(LPCTSTR)(_bstr_t)v_StaffTemp);
    v_StaffTemp = m_pRecordset->GetCollect("AC_SubjectD");
    if (v_StaffTemp.vt!=VT_NULL)
    m_pLFDetail.SetItemText(Set_I,4,(LPCTSTR)(_bstr_t)v_StaffTemp);
    v_StaffTemp = m_pRecordset->GetCollect("AccountD_Money");
    if (v_StaffTemp.vt!=VT_NULL)
    m_pLFDetail.SetItemText(Set_I,5,(LPCTSTR)(_bstr_t)v_StaffTemp);
    //v_StaffTemp = m_pRecordset->GetCollect("AMT_HavePay");
    //if (v_StaffTemp.vt!=VT_NULL)
    //{
    // cs_temp.Format("%.2f",v_StaffTemp.dblVal);
    // m_pLFDetail.SetItemText(Set_I,6,cs_temp);
    //}
    v_StaffTemp = m_pRecordset->GetCollect("AC_LMoney");
    if (v_StaffTemp.vt!=VT_NULL)
    {
    d_temp = v_StaffTemp.dblVal;
    cs_temp.Format("%.2f",v_StaffTemp.dblVal);
    m_pLFDetail.SetItemText(Set_I,7,cs_temp);
    }
    //v_StaffTemp = m_pRecordset->GetCollect("AMT_ATime");
    //if (v_StaffTemp.vt!=VT_NULL && d_temp==0)
    //{
    // cs_temp.Format("%.2f",v_StaffTemp.dblVal);
    // m_pLFDetail.SetItemText(Set_I,8,cs_temp);
    //}
    m_pRecordset->MoveNext();
    Set_I++;
    }
    m_pRecordset->Close();带有//这两段读取不到数据,第一列里面读取出来的都是空,第二列里面都是0
    第一列里面公式Sum([512_AccountMPay]![AccountD_Money])
    第二列里面公式IIf(IsNull([200_SaleRecord]!SaleR_SNum),[300_BuyRecord]!BuyR_SNum,[200_SaleRecord]!SaleR_SNum)
    ps,我发帖的时候把这个给忘了,真不好意思。
      

  2.   

    代码发过来好了
    [email protected]
      

  3.   

    楼上的,我的程序是几个加起来的,我怎么拆分开来给你呢?我现在测试了一下,大体问题可以确定了,我在表里面有一列是用来判断该行是否需要,该列是文本的,“1、5、8”这三个数值,但是我一旦查询表里面用该列“<"8"”进行率选之后,就再也不能在vc++2008里面找不到数据了,顺便说一句,我的系统是vista,不知道有没有关系。
      

  4.   

    简单说就是你生成了一个视图但是ado找不到这个视图是吧
      

  5.   

    在下句,设置断点,拷贝出cs_SQL的文本值
    m_pRecordset->Open(_variant_t(cs_SQL),_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);将拷贝出的文本值到数据库中新建的一个查询中,运行,得出的数据应该就是空的(另外,adOpenDynamic,adLockOptimistic这两个参数只有服务器端游标才有效,但ADO会自动修改为有效的参数,不会影响结果。顺变说明)
      

  6.   

    AccountD_Money是读Sum([512_AccountMPay]![AccountD_Money])对应的字段吗?
    如果是,则你的查询有问题了
    对应计算字段,必须给出一个字段别名,否则数据库会给一个你可能不清楚的别名,使用AS指定别名:
    Sum([512_AccountMPay]![AccountD_Money]) AS TotalMomey程序中读数据:
    v_StaffTemp = m_pRecordset->GetCollect("TotalMoney");
    Sum([512_AccountMPay]![AccountD_Money])这样的字段返回的记录中AccountD_Money字段不再存在(被改名了)还有:[512_AccountMPay]![AccountD_Money]连接为什么是"!"而不是"."?
      

  7.   

    代码比较长,格式不好看,给个建议:你断点调试,把cs_SQL的实际值拷贝到数据库的查询分析器,看看执行的结果是什么如果看到的结果是你期望的,你在设置断点到有问题的地方,如:
    //v_StaffTemp = m_pRecordset->GetCollect("AMT_HavePay");
    看看v_StaffTemp到底是什么