MFC ADO 数据库 修改与删除无效

老中医-R 2017-10-25 11:21:58

BOOL CBook_Dao::Alter(CBook * pBook)//修改图书信息
{

CString Tsql;//sql语句
Tsql = _T("select * from book where bookNo = '");
Tsql = Tsql + pBook->getBookNo();
Tsql = Tsql + _T("' and bookColor = '");
Tsql = Tsql + pBook->getColor();
Tsql = Tsql + _T("'");

try//尝试打开记录集
{
m_pRecordset->Open(_bstr_t(Tsql), m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
}
catch (_com_error e)//失败则跳出警示
{
AfxMessageBox(e.Description());
return FALSE;
}

//录入修改数据
//------------------
m_pRecordset->PutCollect("bookNo", _variant_t(pBook->getBookNo()));
m_pRecordset->PutCollect("bookColor", _variant_t(pBook->getColor()));
m_pRecordset->PutCollect("bookName", _variant_t(pBook->getBookName()));
m_pRecordset->PutCollect("author", _variant_t(pBook->getAuthor()));
m_pRecordset->PutCollect("publish", _variant_t(pBook->getPublish()));
m_pRecordset->PutCollect("price", _variant_t(pBook->getPrice()));
//------------------
m_pRecordset->Update();//更新数据库-将新纪录存入数据库

m_pRecordset->Close();//关闭记录集
return TRUE;
}

BOOL CBook_Dao::Del(CBook * pBook)//删除图书信息
{
CString Tsql;
Tsql = _T("select * from book where bookNo = '");
Tsql = Tsql + pBook->getBookNo();
Tsql = Tsql + _T("' and bookColor = '");
Tsql = Tsql + pBook->getColor();
Tsql = Tsql + _T("'");

try//尝试打开记录集
{
m_pRecordset->Open(_bstr_t(Tsql), m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
}
catch (_com_error e)//失败则跳出警示
{
AfxMessageBox(e.Description());
return FALSE;
}

m_pRecordset->Delete(adAffectCurrent);

m_pRecordset->Update();//更新数据库-将新纪录存入数据库

m_pRecordset->Close();//关闭记录集

return TRUE;
}



这是一个图书表 调试时Update函数 确切返回S_OK.
但是进到数据库中查看却是毫无变化.
其他表都可以增修删成功 .
就只有这个表 增加记录可以 但修改与删除不行.
求解决!
...全文
675 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
老中医-R 2017-11-02
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
使用这种方式修改数据库应该不可靠,记录集依赖于查询条件,以及当前的字段值;特别是 建议使用事务,以及连接或者command对象,使用Execut方法执行数据更新(update 。。。。或者 delete * from....)
解决的现有的问题 可以了 虽然不知道为什么那个还是失败 谢谢你
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
另外,ADO的连接对象和记录集对象在打开时,可以指定是否具有修改和删除权限。
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
引用 4 楼 lzy2359438 的回复:
[quote=引用 2 楼 xianglitian 的回复:] 你在数据库里看一下这个表的设置是不是有保护之类的
数据库没有特别设置保护啊.
引用 3 楼 zhao4zhong1 的回复:
连接所用用户在数据库服务端没有相应权限。我猜。
应该有权限的 其他表都能增修删.[/quote] 注意比如SQL Server可以单独指定某个用户对某个表具有某种权限。
smwhotjay 2017-10-25
  • 打赏
  • 举报
回复
mysql大法好,别整萎软的了。 sqlite也行
老中医-R 2017-10-25
  • 打赏
  • 举报
回复
引用 2 楼 xianglitian 的回复:
你在数据库里看一下这个表的设置是不是有保护之类的
数据库没有特别设置保护啊.
引用 3 楼 zhao4zhong1 的回复:
连接所用用户在数据库服务端没有相应权限。我猜。
应该有权限的 其他表都能增修删.
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
连接所用用户在数据库服务端没有相应权限。我猜。
向立天 2017-10-25
  • 打赏
  • 举报
回复
你在数据库里看一下这个表的设置是不是有保护之类的
老中医-R 2017-10-25
  • 打赏
  • 举报
回复
引用 楼主 lzy2359438 的回复:

BOOL CBook_Dao::Alter(CBook * pBook)//修改图书信息
{

	CString Tsql;//sql语句
	Tsql = _T("select * from book where bookNo = '");
	Tsql = Tsql + pBook->getBookNo();
	Tsql = Tsql + _T("' and bookColor = '");
	Tsql = Tsql + pBook->getColor();
	Tsql = Tsql + _T("'");

	try//尝试打开记录集
	{
		m_pRecordset->Open(_bstr_t(Tsql), m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
	}
	catch (_com_error e)//失败则跳出警示
	{
		AfxMessageBox(e.Description());
		return FALSE;
	}

	//录入修改数据
	//------------------
	m_pRecordset->PutCollect("bookNo", _variant_t(pBook->getBookNo()));
	m_pRecordset->PutCollect("bookColor", _variant_t(pBook->getColor()));
	m_pRecordset->PutCollect("bookName", _variant_t(pBook->getBookName()));
	m_pRecordset->PutCollect("author", _variant_t(pBook->getAuthor()));
	m_pRecordset->PutCollect("publish", _variant_t(pBook->getPublish()));
	m_pRecordset->PutCollect("price", _variant_t(pBook->getPrice()));
	//------------------
	m_pRecordset->Update();//更新数据库-将新纪录存入数据库

	m_pRecordset->Close();//关闭记录集
	return TRUE;
}

BOOL CBook_Dao::Del(CBook * pBook)//删除图书信息
{
	CString Tsql;
	Tsql = _T("select * from book where bookNo = '");
	Tsql = Tsql + pBook->getBookNo();
	Tsql = Tsql + _T("' and bookColor = '");
	Tsql = Tsql + pBook->getColor();
	Tsql = Tsql + _T("'");

	try//尝试打开记录集
	{
		m_pRecordset->Open(_bstr_t(Tsql), m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
	}
	catch (_com_error e)//失败则跳出警示
	{
		AfxMessageBox(e.Description());
		return FALSE;
	}

	m_pRecordset->Delete(adAffectCurrent);

	m_pRecordset->Update();//更新数据库-将新纪录存入数据库

	m_pRecordset->Close();//关闭记录集

	return TRUE;
}

这是一个图书表 调试时Update函数 确切返回S_OK. 但是进到数据库中查看却是毫无变化. 其他表都可以增修删成功 . 就只有这个表 增加记录可以 但修改与删除不行. 求解决!
用的数据库是MySQL
worldy 2017-10-25
  • 打赏
  • 举报
回复
使用这种方式修改数据库应该不可靠,记录集依赖于查询条件,以及当前的字段值;特别是 建议使用事务,以及连接或者command对象,使用Execut方法执行数据更新(update 。。。。或者 delete * from....)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧