SQLで抽出したレコード全件(MAX10件ぐらい)を
DBGridに表示させ、キャッシュアップデートを使ってフォームが
閉じる時にデータベースへ反映しようとしています。
既にそのキーが存在していればエラーメッセージを表示したいのです。
例外処理を使用してキー(CD)が重複したときに
”キーが重複しています”というようなメッセージを
出力したいのですが...
どのようにしたらよいか、わかりません。
ご指導よろしくお願いいたします。
※データの更新は1台のパソコンで行います。
procedure TFrmOperater.FormActivate(Sender: TObject);
begin
IBDatabase1.Connected := Active;
with IBQuery1 do
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from OPERATER');
SQL.Add('ORDER BY CD');
Active := True;
end;
end;
//終了ボタン
procedure TFrmOperater.SpeedButton2Click(Sender: TObject);
begin
IBQuery1.ApplyUpdates;
close;
end;
Select文で存在を調べればどうですか。
ご指導ありがとうございます。
SELECT文で、キャッシュの中を検索するのですか?
こんにちは
データベースに関してはあまり詳しくないので(まだ学生ですので)
見当違いかも知れませんが、
キャッシュのデータをSELECT文では取得できないと思います。
そこで
//FormのOnCloseQueryにて
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
with IBQuery2 do
begin
Active := False;
SQL.Clear;
SQL.Add('Select * from OPERATER');
SQL.Add('Where CD = ' + '更新されたCDの値');
Active := True;
//データがある場合、つまりデータが重複
if RecordCount > 0 then
begin
ShowMessage('キーが重複しています');
Abort;//静的例外を発生させる。
end;
//以下データベースへ登録処理
try
IBQuery1.ApplyUpdates;
except
IBQuery1.Close;
end;
end;
end;
もしくはキー(CD)が変更されるたびに
SQL.Add('Select * from OPERATER');
SQL.Add('Where CD = ' + '更新されたCDの値');
でデータが存在するかチェックするのはどうでしょうか?
ご指導
ありがとうございました。
大変、勉強になりました。
ツイート | ![]() |