九月鹰飞 发表于 2008-6-25 12:02

用ODBC中的AddNew()问题

在一个空表中准备写入新数据,有些直接有AddNew()则没问题,有些却是在VC中出现异常,调试到.Update()时就发现违法访问.
问题一是,写第一个数据会出现异常提示,但数据可正常插入,写第二个数据后就完全没问题,再也不提示异常.
问题二是,为什么在一些空表中没有问题,在另一表中却有问题.
Help me!

九月鹰飞 发表于 2008-6-25 12:03

void CAdminDlg::OnButtonAdd()
{
        // TODO: Add your control notification handler code here
        UpdateData();
        if(m_strWorkID.IsEmpty()||m_strUsername.IsEmpty()||m_strPassword.IsEmpty())
        {
                MessageBox("Please input all the imformation!");
                return;
        }
        if(!m_db.IsOpen())
        {
                m_db.OpenEx("DSN=Library;UID=sa;PWD=1",0);
        }
        CAdminSet * m_pset=new CAdminSet(& m_db);
        CString strSQL;
        strSQL.Format("select * from Admin_Info where WorkID='%s'",m_strWorkID);
    m_pset->Open(CRecordset::dynaset,strSQL);
        if(m_pset->GetRecordCount()!=0)
        {
                MessageBox("The user is existed in the database!");
                m_pset->Close();
                return;
        }
        m_pset->Close();

        strSQL.Format("select * from Admin_Info");
    m_pset->Open(CRecordset::dynaset,strSQL);
//insert into database       
        m_pset->AddNew();
        m_pset->SetFieldNull(&(m_pset->m_WorkID),FALSE);
        m_pset->m_WorkID=m_strWorkID;
        m_pset->SetFieldNull(&(m_pset->m_User_Name),FALSE);
        m_pset->m_User_Name=m_strUsername;
        m_pset->SetFieldNull(&(m_pset->m_Password),FALSE);
        m_pset->m_Password=m_strPassword;

        m_pset->Update();
        m_pset->Requery();
        m_pset->Close();
    m_db.Close();
        MessageBox("Add new user successfully!");
        UpdateData(FALSE);
        return;
}
这个可以把第一个数据写入,且没有异常!

九月鹰飞 发表于 2008-6-25 12:05

void CBorrowDlg::OnButtonLend()
{
      // TODO: Add your control notification handler code here
      UpdateData(TRUE);

      if(m_strProofID==""||m_strBookID=="")
      {
                MessageBox("Please input the imformation correctly!");
                m_strProofID="";
                m_strBookID="";
                return;
      }
      if(!m_db.IsOpen())
      {
                m_db.OpenEx("DSN=Library;UID=sa;PWD=1",0);
      }
CBorrowSet * m_pset3=new CBorrowSet(& m_db);
      CString strSQL;
      strSQL.Format("select * from Borrow_Info");
      m_pset3->Open(CRecordset::dynaset,strSQL);
//Add borrow imformation to database      
      m_pset3->AddNew();
                     m_pset3->SetFieldNull(&(m_pset3->m_Borrow_ID),FALSE);      m_pset3->m_Borrow_ID=m_iBorrowID;                  
      m_pset3->SetFieldNull(&(m_pset3->m_Proof_ID),FALSE);
      m_pset3->m_Proof_ID=m_strProofID;
      m_pset3->SetFieldNull(&(m_pset3->m_Book_ID),FALSE);
      m_pset3->m_Book_ID=m_strBookID;
      m_pset3->SetFieldNull(&(m_pset3->m_Borrow_Date),FALSE);

      CTime time = CTime(m_cdtBorrowdate.GetYear(),m_cdtBorrowdate.GetMonth(),m_cdtBorrowdate.GetDay(),
                               m_cdtBorrowdate.GetHour(),m_cdtBorrowdate.GetMinute(),m_cdtBorrowdate.GetSecond());
      m_pset3->m_Borrow_Date=time;

      m_pset3->Update();               //更新出现问题,但找不出来。
      m_pset3->Requery();
      m_pset3->Close();
      m_db.Close();
      MessageBox("Borrow successfully!");
      UpdateData(FALSE);
      return;
}

这个当是第一个数据插入时,会出现异常,但数据还是可插入到数据库中.
第二个插入后完全没异常提示!

[ 本帖最后由 九月鹰飞 于 2008-6-25 12:06 编辑 ]

九月鹰飞 发表于 2008-6-26 13:20

救命呀,各位老大!

心怀天下 发表于 2008-6-26 15:04

不懂 楼下来

我不是马甲 发表于 2008-6-28 13:45

会不会是数据库约束造成的失败?

九月鹰飞 发表于 2008-7-4 16:50

应该不是,如果是约束造成的,那第二次执行时也应该出现异常,但现在是第一次有第二次后就没有了!
页: [1]
查看完整版本: 用ODBC中的AddNew()问题