mfc 单文档 odbc数据库更新问题

jiangshengwei888 2011-04-24 12:05:00
try
{
if( m_pSet->IsOpen())
{
m_pSet->Close();
}
//设置查询条件
m_pSet->m_strFilter.Format(_T("abscissa = %d and ordinated = %d"),ptTemt.x,ptTemt.y);
//执行查询
m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::none);
//更改信息
if( !m_pSet->IsEOF())
m_pSet->m_sign = n;
// 以上的程序执行的都对,我不知道为什么下面的m_pSet->CanUpdate的返回值为false
if( m_pSet->CanUpdate())
{
m_pSet->Update();
}

m_pSet->Close();

}
catch (CDBException* e)
{
e->ReportError();
return;
}
...全文
158 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangshengwei888 2011-04-28
  • 打赏
  • 举报
回复

if( !m_RoutSet.IsEOF())
{
m_RoutSet.Edit();
m_RoutSet.m_sign = n;
}
if( m_RoutSet.CanUpdate())
{
m_RoutSet.Update();
m_RoutSet.Requery();
}
改为
if( !m_RoutSet.IsEOF())
{
m_RoutSet.Edit();
m_RoutSet.m_sign = n;
m_RoutSet.Update();
}
就正确了。
程序出错时在输出栏显示的是,Update()之前必须要有Edit()或AddNew()。
zxhx 2011-04-28
  • 打赏
  • 举报
回复
执行查询后看一下你的m_pSet是啥内容
估计m_pSet结果集不正确
hztj2005 2011-04-28
  • 打赏
  • 举报
回复
不是很明白你的数据库状况,看这样可以吗:
m_RoutSet.Requery();//更新查询
while( !m_RoutSet.IsEOF())
{
m_RoutSet.Edit();
m_RoutSet.m_sign = n;
m_RoutSet.movenext;
}
m_RoutSet.Update();

zyq5945 2011-04-28
  • 打赏
  • 举报
回复
CString strSql;
strSql.Format(_T("SELECT * FROM [Table] WHERE abscissa = %d and ordinated = %d"),ptTemt.x,ptTemt.y);
//执行查询
m_pSet->Open(CRecordset::snapshot,strSql,CRecordset::none);
改成这样试试,不是设置m_strFilter
jiangshengwei888 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hztj2005 的回复:]

找本数据库的书看吧,下面查询语句不完整。
m_pSet->m_strFilter.Format(_T("abscissa = %d and ordinated = %d"),ptTemt.x,ptTemt.y);
[/Quote]
现在改成下面的代码,有时能执行,有时弹出对话框“数据更新或删除的企图失败”。奇怪的是我单步运行时总也不出错。是什么原因呢??
m_RoutSet.m_strFilter.Format(_T("abscissa = %d and ordinated = %d"),ptTemt.x,ptTemt.y);
//执行查询
m_RoutSet.Requery();//符合查询条件的只有一条记录
//更改信息
if( !m_RoutSet.IsEOF())
{
m_RoutSet.Edit();
m_RoutSet.m_sign = n;
}
if( m_RoutSet.CanUpdate())
{
m_RoutSet.Update();
m_RoutSet.Requery();
}
hztj2005 2011-04-28
  • 打赏
  • 举报
回复
找本数据库的书看吧,下面查询语句不完整。
m_pSet->m_strFilter.Format(_T("abscissa = %d and ordinated = %d"),ptTemt.x,ptTemt.y);
jiangshengwei888 2011-04-25
  • 打赏
  • 举报
回复
现在能执行m_pSet->Update()了,但是抛出异常,数据库跟新不了。
高手在哪了?我很急呀。
我就是想改数据库中符合查找条件的一项值,应该很简单呀?是我的方法有问题吗?

4,011

社区成员

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

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