我有一个使用BDE访问DBase表的TTable组件.表上没有索引,因此排序顺序是表中记录的物理顺序.如果我读取RecNo属性,它包含当前记录的预期编号.
我的印象是,使用这个星座(BDE + DBase),也可以将RecNo属性设置为移动到相应的记录.但显然这在我的计划中不起作用.
所以:我记错了吗?或者我需要做些什么特别的工作呢?
(请不要建议放弃BDE.我知道它的问题,我们已经远离它了.)
TBDEDataSetRecNo仅为Paradox(不DBase)实现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;
Run Code Online (Sandbox Code Playgroud)
您可能想要尝试这样的通用:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4957 次 |
| 最近记录: |