データベースの重複データ処理

解決


りな  2010-01-05 09:09:03  No: 36718

アドバイスくださる方々、いつもありがとうございます。
データベースの重複処理に関して、質問があります。

delphi4  oracle8iを使用しているのですが、データベース上の項目IDにプライマリーキーをかけ、データが重複しないようにしています。insert文でデータを追加するとき、IDが重複しているときは「IDが重複していまので、ほかのIDを入力してください」というメッセージを出し、入力をできないようにしたいのですが、どのようにすればよいでしょうか?また、データが追加された際に、自動的にIDを振り分ける方法をご存知でしょうか?

現在insert文は以下のように、書いています。

begin
 with query1 do 
 begin;
 close;
 SQL.Clear;
SQL.ADD('insert into TableA (aID, aNAME) values (:value1, :value2)');
 prepare;
 params...
 (省略)
  end;
 execsql;
end

です。


HOta  2010-01-05 15:05:23  No: 36719

方法としては、
1.Selectで検索してみる。
2.Insertを発行してエラーが出れば重複している。

begin
 with query1 do 
 begin;
   close;
   with SQL do
   begin
     Clear;
     ADD('insert into TableA (');
     ADD('    aID');
     ADD('  , aNAME');
     ADD(') values (');
     ADD('   :value1');
     ADD(' , :value2');
     ADD(')');
   end;
   prepare;
   params...
 (省略)
//  end;
   
   try
     execsql;
   except  //エラーを起こした場合の処理
     showmessage('IDが重複しています。');
   end
  end;
end


りな  2010-01-06 06:38:38  No: 36720

HOtaさん、返答ありがとうございます。

begin
 with query1 do 
 begin;
 close;
 SQL.Clear;
SQL.ADD('insert into TableA (aID, aNAME) values (:value1, :value2)');
 prepare;
 params...
 (省略)
  //end;

  try
   execsql;
  except
   showmessage('エラー');
  end;    ← (コロン抜きも試してみました)
end;
end;

としてみたのですが、エラーが生じてもexceptへ入っていきません。すみませんが、アドバイスいただけないでしょうか(try except文はいつもうまくいきません)?


HOta  2010-01-06 23:34:54  No: 36721

IDEのデバッガオプションで、「Delphi言語の例外で停止」にチェックが入っていれば、外してください。


りな  2010-01-07 07:55:49  No: 36722

HOtaさん、チェックをはずしたらうまくいったのですが、理由がよくわからないので、教えていただけないでしょうか?また、私以外で、同じようにDelphi4を使っている方に聞いたら、はずさなくても問題なくtry exceptが実行できると言っていたので、すこし混乱しています。


りな  2010-01-07 08:15:26  No: 36723

少し話が違うのですが、oracle8iはsqlplusでテーブルの項目(列)をけすことはできないのでしょうか?alter table A drop(項目);と入力しても、8.1.0.0といってようなエラーが表示され、実行することができません。


GTR  2010-01-07 21:06:15  No: 36724

sqlplusで実行するとき、
alter table A drop(項目);
最後の;がいらないとおもうけど。


HOta  2010-01-07 21:26:30  No: 36725

「Delphi言語の例外で停止」はプログラムのエラーを開発環境が停止させてしまいます。その為、プログラムのtry except制御が利かなくなります。

COMPATIBLEパラメータが、8.1.0.0.0以上でないと使用できないエラーではないでしょうか?


りな  2010-01-07 21:46:34  No: 36726

HOTAさん、

はい、おっしゃった通りのエラーです。ちなみに、ORA-00406とオラクルのエラー番号がでます。


HOta  2010-01-08 02:13:59  No: 36727

下記でどうでしょう?
http://okwave.jp/qa/q97191.html?order=&by=


りな  2010-01-09 23:17:33  No: 36728

HOtaさん、情報ありがとうございます。問題が解決いたしました。


りな  2010-01-09 23:18:18  No: 36729

チェックし忘れていました。


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

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






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