自己写的函数如下,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的状态
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的状态
解决方案 »
- C++ 读取html 文件乱码
- 网络中的多线程问题?
- 在一个Dialog中加入IE控件(WebBrowser2),在窗口刷新时遇到的问题
- dos下输入的问题
- 请问:怎么从wma格式文件中提取信息,那位能提供一份wma文件格式的规范?
- 菜鸟问题,在线
- 怎样调用帮助文件?谢谢
- 100分询问如何解autocad vba的密码!
- 很菜的问题,立即给分,请问在VC CONSOLE下的程序输出结果超过一个屏幕,如何作输出数据的分页显示?
- 怎么在非客户区添加个按钮?遮住最大化按钮呢?我头都想炸了!
- 在多文档程序中,在创建CArchive 对象之前,必须创建CFile对象的有关问题?
- DLL如何实现COM类似事件触发的功能?
m_pSet->Edit();
.....//改变记录里字段的值
//你既然在前面用了EDIT,这里的CANUPDATE判断就没有必要
m_pSet->Update();
http://community.csdn.net/Expert/topic/3533/3533710.xml?temp=.912945
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的状态
if(!m_pSet->CanUpdate())
{
...->EnableWindow(FLASE);
}
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值
{
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.