加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么设置表的RecNo属性不会移动到该记录?

发布时间:2020-12-15 04:31:19 所属栏目:大数据 来源:网络整理
导读:我有一个使用BDE访问DBase表的TTable组件.表上没有索引,因此排序顺序是表中记录的物理顺序.如果我读取RecNo属性,它包含当前记录的预期编号. 我的印象是,使用这个星座(BDE DBase),也可以将RecNo属性设置为移动到相应的记录.但显然这在我的计划中不起作用. 所
我有一个使用BDE访问DBase表的TTable组件.表上没有索引,因此排序顺序是表中记录的物理顺序.如果我读取RecNo属性,它包含当前记录的预期编号.

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

所以:我记错了吗?或者我需要做些什么特别的工作呢?

(请不要建议放弃BDE.我知道它的问题,我们已经远离它了.)

解决方法

TBDEDataSet仅为Paradox(不是DBase)实现RecNo setter.
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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读