工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3198|回复: 6

用ODBC中的AddNew()问题

[复制链接]
发表于 2008-6-25 12:02 | 显示全部楼层 |阅读模式
在一个空表中准备写入新数据,有些直接有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 | 显示全部楼层
应该不是,如果是约束造成的,那第二次执行时也应该出现异常,但现在是第一次有第二次后就没有了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-16 19:38

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表