お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"データ(レコード)の削除"







Table1 で関連づけてあるデータベースのレコードを、DBGridで表示して、
データを確認しながら、レコードを削除するコードです。

削除したいデータにカーソルをあわせ、[Return]キーを押すと、
削除確認が表示され、OKするとレコードが削除されます。
DBGgridでは、レコードポインタのある行の背景を変えておくと、
削除の間違いが減るでしょう(自分は、文字色を黄色、背景を赤にしています)。

必要のないボタン等も、コードに入っていますが、各自で必要、不必要を
判断してください。
使っているオブジェクトは、
[Table1][DataSource1][DBGrid1][Button1]
特に直接関係ないオブジェクトは
[Memo1][Button2][Button3] です。


procedure TForm1.Button1Click(Sender: TObject);      // 削除ボタン
begin
   with Button1 do
   if k_Sakujo = True then               // 削除モードであれば
   begin                                 // 削除終了
      k_Sakujo := False;                 //   ※1 削除モードOFF
      Caption := '削除';
      Memo1.Lines.Text := '';            //   削除の方法表示等を消す
      Button2.Enabled := True;           //   必要なボタンの使用OK
      Button3.Enabled := True;
   end
   else
   begin                                 // 削除開始
      k_Sakujo := True;                  //   削除モードON
      Caption := '削除終了';
      Memo1.Lines.Text := #10#32'削除したい行で、[Return]キーを押して
ください。'#10#10#32'削除の終了は、[削除終了]をクリックしてください。';
                                         // ※2 削除方法表示
      Button2.Enabled := False;          // ※3 追加ボタン
      Button3.Enabled := False;          // 終了ボタン等を使えないようにする
      DBGrid1.SetFocus;
   end;
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);   // ※4
var
   RetValue : Integer;
begin
   if Key = #13 then                // [Return]キーが押されて
   begin
      if k_Sakujo = True then       // かつ、削除モードであれば
      begin
         Key := #0;
         RetValue := MessageDlg('このデータを削除してもいいですか?',
                                mtConfirmation,[mbYes,mbCancel],1);
         if RetValue = mrYes then   // 削除OKを返したら
            Table1.Delete;          // 削除
      end;
   end;
end;


{以下は、メモ表示関係です。削除とは直接関係ありません。}
procedure TForm1.MemoClear;         // オブジェクトを伴わないプロシージャ
begin
   Memo1.Lines.Text := '';          // MemoClear; が呼ばれたらメモの内容を
                                    // クリアする
end;

procedure TForm1.Memo1Change(Sender: TObject);    // メモの内容が変わったら
begin
   if Memo1.Lines.Text = '' then    // 内容がクリアされたら
      Memo1.Color := clWindow       // 背景色を白くする
   else
   begin                            // 内容が書き込まれたら
      Memo1.Font.Color := clBlue;   // 文字色を青くし
      Memo1.Color := $00EEFFFE;     // 背景をごく薄い黄色にする(個人の自由)
   end;
end;



※1 ユニット内変数として  k_Sakujo: Boolean; を作っておいてください。
   現在削除モードであるかないかを判断いたします。
   (その時には、Form のメンバ変数というのがいいらしい。)
   参考:メンバ変数の作り方
      type
          TForm1=class(TForm)
          ....
          private
            {ここや、}
          public
            {ここで宣言します}
          end;

※2 ユーザーに対する削除の方法を Memo型のオブジェクトで表示しています。
   (私の場合は、マニュアル代わりに、必ず Memo型を張り付けています。)
   もちろん必要のない場合は、この行を削除してください。
   ちなみに #10#32 は、1行改行して、スペースを1つ入れてから、
   メッセージを表示しています。
   (ただ単に、Memo1 の左の枠と、メッセージの文字が、くっつきすぎるのが
    私の感性と合いません。)

※3 終了ボタンとか、追加ボタンとか削除中に起きてはならないイベントを
   起きないようにしておきます。

※4 削除本体です。


                                                 H9.10.31        マ太郎


Original document by マ太郎          氏 ID:(VYC12077)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum