Delphi 什么会导致SetKey不更改我的表状态?

Delphi 什么会导致SetKey不更改我的表状态?,delphi,delphi-xe,advantage-database-server,Delphi,Delphi Xe,Advantage Database Server,我有一个表,我已经设置为另一个窗体使用的指针 此表单上有一个过程,如果GUID不存在,则使用For循环在表中创建新记录 With Table^ do for I := 0 to Results.result.RowCount - 1 do begin IndexName := 'GUID'; SetKey; FieldByName('GUID').AsString := Results.UserDetail[I].Guid; if not Gotokey then begin

我有一个表,我已经设置为另一个窗体使用的指针

此表单上有一个过程,如果GUID不存在,则使用For循环在表中创建新记录

With Table^ do
for I := 0 to Results.result.RowCount - 1 do
begin
  IndexName := 'GUID';
  SetKey;
  FieldByName('GUID').AsString := Results.UserDetail[I].Guid;
  if not Gotokey then
  begin
    Insert;
    etc..
  end;

大多数情况下,它工作得很好。。但是,在某些情况下,当它尝试设置键时,表状态不是从dsBrowse变为dsSetKey,而是停留在dsBrowse,因此会出现“表未处于编辑模式错误”

在这种情况下,它会在forloop中迭代10次,工作平稳,但在11次时,它无法将表更改为setkey模式

您是否知道该表可能发生了什么,或者为什么在调用SetKey后,该表会保持浏览模式

谢谢

更新-

我也遇到了类似的情况,SetRangeStart没有更改状态,而是保持浏览模式。我甚至清除了表上的所有更改事件,并跟踪到SetRangeStart,以确保没有运行其他代码,并且它仍然没有更改状态


使用大多数数据集,同样的代码也可以正常工作。所以我相信这可能与数据有关。。有什么想法吗?

我发现当遇到这个问题时,如果我在使用表时禁用了表上的控件,然后在解决问题后启用了控件

Table.DisableControls;
....
Table.EnableControls;

SetKey
可以触发表上的事件,您确定表中没有任何事件,如
OnDataChange
,可能会产生将状态更改回
dsBrowse
的副作用吗?我刚刚用一些断点进行了验证,没有获取SetKey来触发我的任何事件。@Trevor这没有回答您的问题,但是,为什么要使用SetKey来定位记录,你有更好的方法,比如FindKey和Locate来做这样的事情。另一方面,每次我在Delphi中看到状态更改失败时,都是由于事件中的用户代码。您确定没有执行您的事件吗?数据集是否与可视控件关联?Table是什么类?事件正在执行,但我无法跟踪工作情况和出错情况之间的代码执行差异。虽然它可能是某种东西,我只是能够找到它。谢谢,我会考虑尝试FIKEKY或定位,看看是否避免了错误。谢谢