2012-04-03 2 views
6

BASEを使用してDBaseテーブルにアクセスするTTableコンポーネントがあります。テーブルにはインデックスがないため、ソート順はテーブル内のレコードの物理的な順序です。 RecNoプロパティを読み込んだ場合、現在のレコードの期待数が格納されます。テーブルのRecNoプロパティの設定がそのレコードに移動しないのはなぜですか?

この星座(BDE + DBase)では、対応するレコードに移動するようにRecNoプロパティを設定することもできます。しかし、明らかに、これは私のプログラムでは機能しません。

So:これは間違って覚えていますか?それとも、これがうまくいくために必要なことは何ですか?

(BDEを落とすについて助言しないでください。私はその問題を認識していますし、我々はすでに離れてから移行している。)

答えて

8

TBDEDataSetのみParadox(ないDBase)のためRecNoセッターを実装します。

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; 
+0

をさも[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; 

あなたはこのような一般的な何かをしようとする場合があります。または主キー[sql]のクエリ。 –

関連する問題