6

BDE を使用して DBase テーブルにアクセスする TTable コンポーネントがあります。テーブルにはインデックスがないため、ソート順はテーブル内のレコードの物理的な順序になります。RecNo プロパティを読み取ると、現在のレコードの予想数が含まれています。

このコンスタレーション (BDE + DBase) を使用すると、対応するレコードに移動するように RecNo プロパティを設定することもできるという印象を受けました。しかし、どうやらこれは私のプログラムでは機能しません。

だから:これは間違って覚えていますか?または、これが機能するために何か特別なことをする必要がありますか?

(BDE を削除することについてアドバイスしないでください。私はその問題を認識しており、既に BDE から移行しています。)

4

1 に答える 1

8

TBDEDataSet(ではなく)RecNoに対してのみsetterを実装します。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 に答える