我有一个使用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;