キャッシュアップデート重複チェックについて

解決


ひろみ  2006-08-04 00:41:41  No: 22833

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;


HOta  2006-08-04 02:10:53  No: 22834

Select文で存在を調べればどうですか。


ひろみ  2006-08-04 02:15:49  No: 22835

ご指導ありがとうございます。

SELECT文で、キャッシュの中を検索するのですか?


今夏休み中です  2006-08-07 00:07:50  No: 22836

こんにちは
データベースに関してはあまり詳しくないので(まだ学生ですので)
見当違いかも知れませんが、
キャッシュのデータを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の値');
でデータが存在するかチェックするのはどうでしょうか?


ひろみ  2006-08-07 19:40:00  No: 22837

ご指導
ありがとうございました。
大変、勉強になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加