在使用delphi6 adotable控件的问题 急!(30分)

  • 主题发起人 主题发起人 wanlihen
  • 开始时间 开始时间
W

wanlihen

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中使用了delphi6 adotable控件,在删除数据库记录时出现‘行句柄引用了一个
已被删除的行或被标识为删除的行。’请高手指教!
是access数据库,有一个主键
不是删除一个已经被删除的记录,正常的一个一个的删除记录。
选中一个记录,用ADOTable.DeleteRecords(arCurrent);
 
adotable.delete不就可以了吗,为什么要用deleterecords呢
 

Try
AdoTable1.Delete;
Execpt
showmessage('Delete Wrong');
End;
 
adotable.delete与adotable.deleterecords效果一样。
在进入程序后删除一个记录后再删除一个记录才会出现。在调试时发现
在adodb.pas中
function TCustomADODataSet.InternalGetRecord(Buffer: PChar;
GetMode: TGetMode; DoCheck: Boolean): TGetResult;
运行到
gmPrior:
begin;//<--Recordset.Bookmark>0
if not Recordset.BOF then Recordset.MovePrevious;//<--Recordset.Bookmark=unsigned
if Recordset.BOF then Result := grBOF;
end;
此时 Recordset.Bookmark=unsigned 导致下面语句出错
if Result = grOK then
begin
with PRecInfo(Buffer)^ do
begin
RecordStatus := Recordset.Status;
if (BookmarkSize > 0) and ((adRecDeleted and RecordStatus) = 0) then
begin
BookmarkFlag := bfCurrent;
Bookmark := Recordset.Bookmark;//<---出错处



 
是不是因为数据没有删除,只是作了删除的标记,
你删除记录把adotable.refresh试试.
 
用了adotable.refresh还是不行
 
我在access2000 d6 表中有一个主键时用 adodataset 删除不会出错,
试试!
 
你们的回答都未能解决问题,如果哪位感兴趣,我给他EMAIL我的数据库试试。
 
兄弟,你试试用两个ADOQuery来处理,一个用BOOKMARK标记,另一个专门用于删除,
只要在删除后第一Querys要REQUEY一下,然后再GOTO BOOKMARK。
 
请对你的Delphi6.0升级Borland升级包.
 
不要用Table,用ADOQuery, 而且删除最好提交SQL语句。 Delete From TableName Where ……

然后刷新一次.
 
我希望有一位高手能帮我修改出Delphi6.0中adodb.pas中的相应bug,
实际上adodb.pas中有bug,而不是别的什么问题!
我只是半瓶子水,明知有错,不得要领。
 
该问题未解决!
 
yes, it is bug
 
主健的问题。加一个自增id字段
 
在是你删除晨,记录不能定位到指定的记录。指定到的记录的虚的,所以出现这个错误。
你转一下记录便没事。
 
nplang,问题就在这,我已在注释中提到过了,问题为什么会出现这样的问题,如何解决。
而且该问题不是在我的程序中出现的,而是在ADODB.PAS中出现的,如何修改错误。
 
下载有关ADO的补丁和微软ADO的补丁。
 
adodb.pas 是的delphi中的源程序,与微软的ado无关
 
哎,我们安装了SQL2000客户端后,就有你上述问题。就是这样解决的。delphi和微软补丁都需要
 
后退
顶部