自己写的函数如下,OnModify()为按钮Modify的消息响应函数,数据库为sql,odbc连接
void CStuDocView::OnModify() 
{
m_pSet->Edit();
UpdateData(TRUE) ;
if (m_pSet->CanUpdate())
{
m_pSet->Update();
}}
运行时出错,跳出对话框:
拒绝了对对象 '学生'(数据库 '学生管理系统',所有者 'dbo')的 UPDATE 权限
///
如果把在企业管理业中授权'学生'表 UPDATE权限 ,则没有出错
问题是在'学生'表 没有UPDATE 权限时 m_pSet->CanUpdate()返回值为真 
跟踪函数m_pSet->CanUpdate() 内容为
_AFXDBCORE_INLINE BOOL CRecordset::CanUpdate() const
{ ASSERT(IsOpen()); return m_bUpdatable; }
不知m_bUpdatable何时被置值 , 
我主要是想利用m_pSet->CanUpdate() 来决定 按钮Modify能否被按的状态
但m_pSet->CanUpdate()好象跟 是否授权没关
那么如何 根据 '学生' 表 能否 更新来 决定 按钮Modify的状态

解决方案 »

  1.   

    UpdateData(TRUE) ;
    m_pSet->Edit();
    .....//改变记录里字段的值
    //你既然在前面用了EDIT,这里的CANUPDATE判断就没有必要
    m_pSet->Update();
      

  2.   

    在前面解决了和你差不多的问题,看下面:
    http://community.csdn.net/Expert/topic/3533/3533710.xml?temp=.912945
      

  3.   

    谢谢 陌生人v2.0 
    void CStuDocView::OnInitialUpdate()
    {
    CView::OnInitialUpdate();
    COnlineTestApp* pApp = (COnlineTestApp*)AfxGetApp() ;
    m_pSet = new CStuSet(&pApp->m_dbCur) ;
    m_pSet->m_strFilter.Format("学号=%d", pApp->m_lID) ;
    m_pSet->Open() ;
    UpdateData(FALSE) ;
    if (m_pSet->CanUpdate())
    {
    TRACE("Can Update \n");
    }
    }
    在OnInitialUpdate()如上代码,输出窗口 仍有 Can Update , 不受'学生'表是否授权UPDATE的影响
    m_bUpdatable 不知是在m_pSet->Open()中置值 ,我想在OnInitialUpdate()决定按钮Modify的状态
      

  4.   

    这和你的记录集有关,根据 '学生' 表 能否 更新来 决定 按钮Modify的状态,那你可以试试
    if(!m_pSet->CanUpdate())
    {
    ...->EnableWindow(FLASE);
    }
      

  5.   

    to 陌生人v2.0:
    CButton* pButton = (CButton *)GetDlgItem(IDC_MODIFY) ;
    if (!m_pSet->CanUpdate())
    {
    TRACE("Can't Update\n");
    pButton->EnableWindow(FALSE) ;
    }
    如上 不能使按钮无效,根本没有进入if语句,但按Modify按钮时出错,
    m_pSet->Open()函数好象不能根据对应表是否能UPDATE来设置m_bUpdatable值
      

  6.   

    to 陌生人v2.0:CView::OnInitialUpdate()
    {
    COnlineTestApp* pApp = (COnlineTestApp*)AfxGetApp() ;
    m_pSet = new CStuSet(&pApp->m_dbCur) ;
    m_pSet->m_strFilter.Format("学号=%d", pApp->m_lID) ;
    m_pSet->Open(CRecordset::dynamic , NULL, CRecordset::readOnly) ;/*改为非缺省值
    ........
    }
    则能进入if (!m_pSet->CanUpdate())使按钮无效,不知如何根据对应表是否能UPDATE来设置m_bUpdatable值,难道要m_pSet->Update()出现异常时才知道不能UPDATE.