我在一个对话框类CBindDlgDlg中设置一个成员变量m_pRs是_RecordsetPtr类型的,在插入操作如下:
void CBindDlgDlg::OnAdd() 
{
    // TODO: Add your control notification handler code here
    long arr[1];
    VARIANT rgf;
    VARIANT rgv;
    COleVariant fld[3],val[9];
    SAFEARRAYBOUND bound;    try
    {
        UpdateData(TRUE);
        fld[0] = "EmployeeID";
        val[0] = m_lDlgID;
        fld[1] = "LastName";
        val[1] = m_strDlgName;
        fld[2] = "Address";
        val[2] = m_strDlgAddress;
        fld[3] = "FirstName";
                
        rgf.vt = VT_ARRAY|VT_VARIANT;
        rgv.vt = VT_ARRAY|VT_VARIANT;        bound.cElements = 3;
        bound.lLbound = 0;        rgv.parray = ::SafeArrayCreate(VT_VARIANT,1,&bound);
        if(rgv.parray == NULL)
            AfxThrowMemoryException();        rgf.parray = ::SafeArrayCreate(VT_VARIANT,1,&bound);
        if(rgf.parray == NULL)
            AfxThrowMemoryException();        for( int i = 0 ;i < 3;i++)
        {
            arr[0] = i;
            ::SafeArrayPutElement(rgf.parray,arr,&fld[i]);
            ::SafeArrayPutElement(rgv.parray,arr,&val[i]);
        }        m_pRs->AddNew(rgf,rgv);  ////////////////////////////这里问题???
    }
    catch(_com_error &e)
    {
        GenerateError(e.Error(),e.Description());
    }
}如果输入正确的值(各个编辑框都输入的相应的值),则可以插入数据;但如果输入错误的话(有一个或几个编辑框中没有添数据):如姓名编辑框中什么都不输入,就会出现异常说姓名字段值不能为空。问题是在出现一次插入异常后,即使以后的输入正确(使各个编辑框中的内容都不为空)仍然产生与上次的相同的异常,即还是告诉姓名字段值为空不能插入,可是我已经在编辑框中输入值了,为什么???说明一下:表中的各个字段均不能为空请各位高手指点到底是哪里的问题?

解决方案 »

  1.   

    我不是直接利用sql语句插入的,打开数据库中表的代码如下:
    m_pRs->Open((LPCTSTR)m_strCmdText,(LPCTSTR)m_strConnection,adOpenDynamic,adLockOptimistic,adCmdTableDirect);其中m_strCmdText为表名 Employees
      

  2.   

    我跟踪过了,假设Name错误输入时,val[1]为VT_EMPTY,出现异常是理所当然,可是之后我正确输入时val[1]已经存入了我输入的值,可是还是出现异常。
    我真不知到怎么回事,请楼上在帮忙解释一下好吗?