WinXP(Access2000)
サイベースから取得したデータをAccessの同定義テーブルに追加するアプリケーションを()
作成しています。
データは1分ごとに更新され、そのデータを随時Accessへ追加反映させます。
Accessテーブルでは重複を防ぐ為全てのフィールドにインデックスを指定しています。
実行前は重複するレコードはUpdateされずに、そのほかのデータのみUpdateできるものであると考えておりましたがエラーではじかれました。
Access側でのインデックスの関係上エラーが出てしまいます。
※インデックスを解除すれば追加は通常にできます。
仕様で、サイベース側に抽出条件を指定せずに上記処理を行いたいのですが
どのような処理が適切でしょうか?
Access側でのインデックス機能のように自動に重複チェックし()
追加させない処理方法があればいいのですが・・・そんな便利なのないですよね;
データが20万件以上ですので1件づつのチェックは正直避けたいところです。
どうかご教授お願いします。
書き忘れましたが、.NET2003です。
よろしくお願いします。
意味が解らん・・・
因みに、キー無しテーブルにデータをインサートして、
Group By で重複データを見かけ上無くし、その結果を
最終的なテーブルにインサートすれば?・・・
まぁ〜ACCESS使っているので、そのうち無理が出てくるとは思いますが。
不一致クエリと言う手もあります。20万件以上とありますが、では最終
何件まで増加しますか?
その件数の上限を考えますと、ACCESSを使わない方が安全になります。
以上。
インデックスのない一時テーブルのようなものに一旦いれてから
insertすれば?
副問合とかexists使えばSQL文1本で一気にできそうだけど。
お返事ありがとうございます。
サイベースのデータは1分ごとにデータが増えるのですが
サーバーの負荷の理由から履歴の保持期限が3ヶ月と決められており
増えた件数分、古い履歴が削除されます。
ですが、Accessの方では全てのレコードを追加で
ひとつのテーブルに書き込んでいく処理を行わなければなりません。
データベースの中身や、更新日時等の理由から(全て説明できなくてすみません)
そのような面倒な処理を行わざるを得ない状況です。
サイベース内の全てのレコードを見なければいけない理由は
履歴レコードにデータの更新がかかる場合があり
その場合もAccess側のID一致レコードにデータ更新する為です。
いろいろ考えた結果、全てのデータを見るのではなく
最終更新時間以後のレコードのみを抽出し、Access側に追加/更新する
方法で行こうと思います。
結果的に、テーブルの処理方法ではなく
データベース側のデータでの判断となってしまいましたが(^^;
アドバイスいただきありがとうございました。
WinXP(Access)
テーブルに番号、枝番、重要番号フラグというカラムがあるのですが、
重要番号フラグがFのものを抽出したいのです。
しかし、同じ番号、枝番で重要番号フラグにTが入っていたら、そのレコードは抽出しないようにしたいのです。どうすればいいでしょうか??
例
番号 枝番 重要番号フラグ 番号 枝番 重要番号フラグ
001 2 F 001 03 F
001 2 T →抽出結果→
001 3 F
ここは「DBの重複チェックを行うには?」で いちすけさんのすれです。
新たに質問がある場合は新しくコリアンさんのスレをたてましょう。
そのときにはVBのバージョンも明記しましょう
ツイート | ![]() |