16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:TUpdateSQLの使い方"
この発言は #00886 おみゃー さんのTUpdateSQLの使い方 に対するコメントです
DBGridやDBEdit等のDBコントロールで更新しているRow(行)は
前後の行にフォーカスを動かすか、明示的にPostメソッドを実行
しなければDataBaseに書き込まれません。たとえばDBGridで1行
だけ変更して、前後に動かさずにプログラムを終了したりすると
更新が反映されていないことがあります。
今回の例では
| ボタンのクリックイベント等で
| DB1.ApplyUpdates([Query1]); //これだけです。
と書きましたが、これも危険かもしれないのでイカのように
明示的にPostしてから実行したほうがいいでしょう。
With Query1 Do
begin
if Modified then //データの変更があったなら
Post; //書き込む
if State in [dsInsert, dsEdit] then //挿入モードでデータが未入力なら
Cancel; //キャンセルする
if UpdatesPending then //CachedUpdatesが適用されていないなら
DB1.ApplyUpdates([Query1]); //それを適用してDBを実際に更新する
end;
更新が適用されないまま(例えば更新ボタンが押されないまま)プログラムを
終了するのを防ぐにはフォームのOnCloseQueryなどで、上記の判断を行って
UpdatesPending状態であれば
if MessageDlg('データが変更されていますが、更新ボタンが押されていません'
+ #13 + #10 + #13 + #10
+ '変更内容を破棄してよろしいですか?',mtConfirmation,
[mbYes,mbNo],0) <> mrYes then
abort;
などとすれば更新モレがなくなるでしょう。
おみゃー@名古屋
Original document by おみゃー 氏 ID:(PXB01563)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|