7

標準 DBNavigator バーの挿入ボタンの動作を、データセットの挿入から追加に変更したいと考えています。

ボタンのクリックを BeforeAction イベントでトラップしたり、追加を行ったりすることができます。次に、OnClick イベントで元の挿入を中止しますが、これは少しハックのようです。より良いアイデアはありますか?私は D6 を使用しています (時計で 500,000 kms、そしてまだ強くなっています...)。

アドバイスをありがとう

よろしく、

PhilW.

4

3 に答える 3

11

TDBNavigator から独自のクラスを派生させ、BtnClick メソッドをオーバーライドできます。または、手早く汚い修正を行うために、実行時に挿入ボタンのクリック ハンドラーを変更することもできます。

type
  THackDBNavigator = class(TDBNavigator);

procedure TForm1.DBNavigatorInsertClick(Sender: TObject);
var
  DBNavigator: TDBNavigator;
begin
  DBNavigator := ((Sender as TControl).Parent as TDBNavigator);
  if Assigned(DBNavigator.DataSource) and (DBNavigator.DataSource.State <> dsInactive) then
  begin
    if Assigned(DBNavigator.BeforeAction) then
      DBNavigator.BeforeAction(DBNavigator, nbInsert);

    DBNavigator.DataSource.DataSet.Append;

    if Assigned(DBNavigator.OnClick) then
      DBNavigator.OnClick(DBNavigator, nbInsert);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  THackDBNavigator(DBNavigator1).Buttons[nbInsert].OnClick := DBNavigatorInsertClick;
end;
于 2009-02-11T12:06:06.327 に答える
1

ほとんどのデータベースでは、挿入と追加の間に違いはありません。実際の物理的な挿入を行うということは、実際にすべてのデータを移動することを意味し、新しい行が挿入される場所から始めて、1 行のサイズを縮小し、その新しい行を新しく開いた場所に書き込みます。すべてのディスク アクティビティが原因で、これは非常に遅くなります。

代わりに、データベースは物理ファイルの最後にデータを書き込む追加を行います。インデックスの順序は、行がファイル内の正しい場所に配置される方法を制御します。

そのため、使用する方法や DBNavigator のボタンの意味に関係なく、ほとんどの意図と目的のために、挿入ではなく追加を既に取得している可能性があります。それ以外のように見えるのはインデックスです。

インデックスなしでデータベースを作成し、挿入と追加の両方を数回実行して、すべての操作の後にデータを注意深く調べて、有効性を確認できます。

于 2009-02-11T12:14:19.833 に答える