Почему установка свойства RecNo таблицы не перемещается в эту запись? - PullRequest
6 голосов
/ 03 апреля 2012

У меня есть компонент TTable, который использует BDE для доступа к таблице DBase.В таблице нет индекса, поэтому порядок сортировки - это физический порядок записей в таблице.Если я читаю свойство RecNo, оно содержит ожидаемое число для текущей записи.

У меня сложилось впечатление, что с помощью этого созвездия (BDE + DBase) также можно установить свойство RecNo для перемещения ксоответствующая запись.Но, видимо, это не работает в моей программе.

Итак: я правильно помню это?Или что-то особенное, что мне нужно сделать, чтобы это работало?

(Пожалуйста, не советуйте удалять BDE. Я знаю о его проблемах, и мы уже уходим от него.)

1 Ответ

8 голосов
/ 03 апреля 2012

TBDEDataSet реализует RecNo сеттер только для Paradox (не DBase).

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;
...