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

解決


ひろみ  2006-08-03 15:41:41  No: 22833  IP: 192.*.*.*

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-03 17:10:53  No: 22834  IP: 192.*.*.*

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

編集 削除
ひろみ  2006-08-03 17:15:49  No: 22835  IP: 192.*.*.*

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

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

編集 削除
今夏休み中です  2006-08-06 15:07:50  No: 22836  IP: 192.*.*.*

こんにちは
データベースに関してはあまり詳しくないので(まだ学生ですので)
見当違いかも知れませんが、
キャッシュのデータを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 10:40:00  No: 22837  IP: 192.*.*.*

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

編集 削除