ADO的问题:对TADOTable或TADOQuery添加记录后,再删除记录,此后对TADOQuery的任何操作均提示“指定的行不能被定位,一些值可能在最后一

有哥 2002-11-08 08:38:43
我试过TADOTable、TADOQuery都这个样。代码如下:
if (MessageBox(Application->Handle,"确定要删除这道试题吗?","提醒",MB_ICONQUESTION|MB_YESNO)==IDYES)
{
MainRec->Delete();
if (MainRec->RecordCount) //在此处出错,以注释该句
{
MainRec->Next(); //出错会移到这里
if (MainRec->Eof) MainRec->Last();
ShowRecord();
}
}

...全文
165 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2002-11-11
  • 打赏
  • 举报
回复
问题是我一取MainRec->Eof就出错:
“指定的行不能被定位,一些值可能在最后一次读取后改变”

1、確認一下TDataSet::AfterScroll事件中有無修改數據有的代碼。
2、你用的是Access数据库,用Access打開該數據庫,你能將記錄滾動到最後一條記錄嗎?(如果不行,請為你的表設定主鍵,我想如果不行設定主鍵會失敗,因為數據庫中已經存在相同的記錄。這就是問題所在)
3、問題產生的可能:自动编号的ID,可能該ID被修改,因為你未做唯一索引或主鍵,單刪除不會出錯,單新增不會出錯,新增與刪除同時進行就出錯,可能出錯於你的某些自動生成編碼的字段中,生成編碼那些代碼有問題,你查一查吧,最好先設定主鍵,再運行程序,就知道錯在哪裡了,改正程序錯誤後,你可以不要主鍵。
xiaowa 2002-11-10
  • 打赏
  • 举报
回复
我觉得在数据库中要设置主键。。。。在没有设置的情况下经常会出现很多很怪的问题
勉励前行 2002-11-09
  • 打赏
  • 举报
回复
MainRec->Delete() ; //刪除後,DataSet記錄指針會自動指向上一條
if(!MainRec->Eof && !MainRec->Bof) //如果你想指向下一條,諒加上這句吧
MainRec->Next();
ShowRecord(); //我覺得,在AfterScroll中寫代碼或許更好。
有哥 2002-11-09
  • 打赏
  • 举报
回复
我已经打ADO补丁了,单机操作连接Access数据库,在数据模块中使用连接,确定只有当前操作的表打开着。
有哥 2002-11-09
  • 打赏
  • 举报
回复
To:PPower()
问题是我一取MainRec->Eof就出错
To:mee123456(臭球)
添加后已经提交了,没有主键,但有自动编号的ID
mee123456 2002-11-09
  • 打赏
  • 举报
回复
看看在添加记录之后你用Post()函数提交了吗?你的表格中都设置主键了吗?
勉励前行 2002-11-08
  • 打赏
  • 举报
回复
1、是用BCB5嗎?打了BCB+ADO大補丁沒有?
2、你的表是否關聯其他,刪除是否確認成功。關係數據庫中,表的關聯一旦建立,有時會讓你增不了,或刪除不了。
“另:只添加或只删除不会出错,混合操作便出错:”
這個問題你要看看有多少人同時操作這個表,表中有沒有觸發器,也就是說,當你操作這個表的時候,有沒有其他因素更改了該表,如果有更改那麼你該刷新。

有哥 2002-11-08
  • 打赏
  • 举报
回复
另:只添加或只删除不会出错,混合操作便出错

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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