6

我有一个使用 BDE 访问 DBase 表的 TTable 组件。表上没有索引,所以排序顺序是表中记录的物理顺序。如果我读取 RecNo 属性,它包含当前记录的预期数字。

我的印象是,使用这个星座(BDE + DBase)也可以设置 RecNo 属性以移动到相应的记录。但显然这在我的程序中不起作用。

所以:我记错了吗?或者我需要做些什么特别的事情才能让它工作?

(请不要建议放弃 BDE。我知道它的问题,我们已经在迁移它了。)

4

1 回答 1

8

TBDEDataSet只为(not )实现RecNosetter 。ParadoxDBase

unit DBTables;
...
procedure TBDEDataSet.SetRecNo(Value: Integer);
begin
  CheckBrowseMode;
  if (FRecNoStatus = rnParadox) and (Value <> RecNo) then
  begin
    DoBeforeScroll;
    if DbiSetToSeqNo(Handle, Value) = DBIERR_NONE then
    begin
      Resync([rmCenter]);
      DoAfterScroll;
    end;
  end;
end;

您可能想尝试这样的通用方法:

procedure SetRecNo(DataSet: TDataSet; const RecNo: Integer);
var
  ActiveRecNo, Distance: Integer;
begin
  if (RecNo > 0) then
  begin
    ActiveRecNo := DataSet.RecNo;
    if (RecNo <> ActiveRecNo) then
    begin
      DataSet.DisableControls;
      try
        Distance := RecNo - ActiveRecNo;
        DataSet.MoveBy(Distance);
      finally
        DataSet.EnableControls;
      end;
    end;
  end;
end;
于 2012-04-03T12:35:04.637 回答