D6 教授
以前は DBISAM と DBISAMTable を使用していました。それはRecNoを処理し、変更(削除、編集など)でうまく機能しています。
現在、RecNo を処理しない ElevateDB に置き換え、多くの場合、テーブルではなくクエリを使用しています。
変更を確認するには、クエリを再度開く必要があります。
ただし、クエリを再度開く場合は、最後のレコードに位置を変更する必要があります。グリッドは別の行に表示されるため、見つけるだけでは不十分です。変更レコードが別の行に移動した後、それを追跡するのが難しく、ユーザーはこれを嫌うため、これは非常に厄介なことです。
次のコードが見つかりました。
function TBaseDBGrid.GetActRow: integer;
begin
Result := -1 + Row;
end;
procedure TBasepDBGrid.SetActRow(aRow: integer);
var
bm : TBookMark;
begin
if IsDataSourceValid(DataSource) then with DataSource.DataSet do begin
bm := GetBookmark;
DisableControls;
try
MoveBy(-aRow);
MoveBy(aRow);
//GotoBookmark(bm);
finally
FreebookMark(bm);
EnableControls;
end;
end;
end;
元の例は moveby を使用しています。バックグラウンドでクエリが再度開かれたことを確認できないため、これはクエリでうまく機能し、ビジュアル コントロールは行の位置を変更しません。
しかし、EDBTable、または Live/Sensitive Query がある場合、MoveBy を使用するのは危険です。誰かが新しい行を削除または追加すると、間違ったレコードに再配置される可能性があるからです。
次に、BookMark を使用しようとしました (備考を参照)。しかし、別の行の位置にレコードを表示するため、この手法は機能しません...
質問: DBGrid で行の位置とレコードの両方を強制する方法は?
または、基になる DataSet が更新された後、どの種類の DBGrid をレコード/行に再配置できますか?
私はユーザーフレンドリーなソリューションを探しています。私はこのジャンプアクロスDBGridを使用しようとしたため、それらを理解していますが、更新後に元のレコードを見つけようとすると目が離せなくなるため、使用するのは非常に悪いです... :-(
あなたのすべての助け、リンク、情報をありがとう: dd