Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Access 2013)
ワークテーブルを使ったデーターの更新について
投稿日時: 20/06/30 18:38:53
投稿者: yamasho

お世話になります。
 
バックエンドmdbファイル、
フロントエンドmdbファイルの環境です。
 
バックエンドのmdbファイルは、
ネットワーク上の別のPCにあります。
 
1対多のレコードをいったんローカルにコピーし、
(Insert Into)
フォームでデーターを修正して登録ボタンを押したら、
ローカルからファイルサーバーに更新をかけます。
 
新規登録もありますし、
削除もあります。
 
クライアントPCは4台です。
 
 
登録ボタンを押して
ローカルからファイルサーバーに
登録するときですが、
いったんファイルサーバー側の
レコードを削除してから、
ローカルから追加するのが一般的なのでしょうか?
 
この方法だと、新規登録や削除は考えず、
楽かなと思いました。
 
それとも修正したものは更新して、
新規のレコードは追加、
削除はデリートとするのが一般的なのでしょうか?
 
また、Insert IntoやUopdateやDeleteなどのSQL文で、
一括処理するのが一般的でしょうか?
 
それともレコードセットを作成し、
1件ずつ処理するのが一般的でしょうか?
 
今まで独学でやってきたので、
めちゃくちゃなやり方をしていると思います。
 
正解はないとしても、
皆様はどのようにしているのか
教えていただきたいです。
 
 

回答
投稿日時: 20/07/01 11:11:44
投稿者: sk

引用:
1対多のレコードをいったんローカルにコピーし、
(Insert Into)
フォームでデーターを修正して登録ボタンを押したら、
ローカルからファイルサーバーに更新をかけます。

引用:
登録ボタンを押して
ローカルからファイルサーバーに
登録するときですが、
いったんファイルサーバー側の
レコードを削除してから、
ローカルから追加するのが一般的なのでしょうか?

引用:
それとも修正したものは更新して、
新規のレコードは追加、
削除はデリートとするのが一般的なのでしょうか?

身も蓋もないですが「場合による」という回答になります。
 
・編集対象となるテーブルの主キーがオートナンバー型である場合、
 「マスターのレコードを削除」->「ワークのレコードをマスターに追加」
 という方法は適さない。
 
・また、リレーションシップの設定によっては、
 マスター側のレコードの削除に失敗したり、
 レコードの連鎖削除が発生したりする可能性がある。
 
・上記の問題を無視できるか否か、どのような手法を用いるかに関わらず、
 トランザクション制御は絶対必須である
 (「マスターのレコードを削除」を実行した後で「ワークのレコードを
 マスターに追加」の実行に失敗する可能性などを考慮しなければならない)
 
「手法としてメジャーかマイナーか」という意味合いでの
「一般的」についてはお答えしかねますが(個人利用なら
「それぞれの好きにしたらいい」というのが私個人の考えなので)、
「どちらがより安全な手法か」ということであれば後者でしょう。

回答
投稿日時: 20/07/02 15:31:21
投稿者: Suzu

こんにちは。
 
なぜ バックエンド - フロントエンド に 分けたのでしょうか。
 
クライアント側に、サーバー側テーブルへのリンクテーブルを設置し、
そのリンクテーブルを使用し参照する方法が 少人数同時使用の安易な方法ですよね。
 
質問者さんは、その方法を選択せずに、なぜローカルにテーブルを持たせたのでしょか。
そこにメリットを感じた。あるいは リンクテーブル のデメリットを感じた からなのですよね。
 
その点を明らかにした上で どのような方法を採用するか? を考えた方がよいと思いますよ。
一般的とかそういう問題ではないです。必要要件に従って制御方法を選択するべきでしょう。
 
 
また、単なるサーバーへの単なるレコードの追加/修正/削除方法のみではなく
リンクテーブルであれば、Accessが行ってくれていた あるレコードへの編集/削除が
同時に起きない様な機能を自前で実装する必要があります。
 
最新レコードのみをテーブルに保管するのではなく
入力したレコードは全レコード保管しておき、フォームに表示する際に
削除扱いになっていないレコードを表示する方法なんかも考えられますね。
 (当然、編集回数が増えればレコード数が増える事になりますので、
    編集頻度が高い場合にはファイル容量が急増する事になります)
 
 
INSRT INTO や UPDAE DELETE を投げるにしろ レコードセット を使用するにしても
・レコードの参照編集頻度や、処理速度 ユーザー/開発者
    (業務なのであればメンテナンス性や将来的なクライアントの増加の見込み)
・メイン/サブフォーム等の画面表示 - テーブル構造
    (メインサブだからと言って 正規化されリレーション設定されたテーブルではなく
      非正規化のテーブルをわざと選択しても良いですよね)
等の、
条件をふまえメリットデメリットを比較検討し決定する必要があると思います。

投稿日時: 20/07/03 20:38:39
投稿者: yamasho

お世話になります。
 
安易に考えていました。
オートナンバー、
リレーションシップ、
リンクテーブル、
いろんな要素を考えないと
いけませんね。
 
その時の状況で考えたいと思います。
 
ご意見、ありがとうございました。