質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • VBA

    1782questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    427questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1つのフォームに詳細欄にタブコントロールでタブ分けされた参照整合性のないサブフォームの保存ボタンの動きについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 175

oze

score 5

まずは、拝見ありがとうございます。
助力いただける方、コメントお願いします。

Accessでの開発を行っており(未経験)保存ボタンのVBAの記述で悩んでおります。

1つのテーブルデータのメンテナンスでしたら調べればすぐに出てくるのでわかるのですが、
1つのフォームで3つのマスタデータ(参照整合性なしでそれぞれ新規登録タブと更新削除タブを持ち、タブ計6つ)のメンテナンスを行う場合のVBAの記述が全く分かりません。

また、マスタデータの入っている場所がpostgreSQLデータベースになりますので
ODBCドライバで接続を行っております。

保存ボタンはヘッダーに、タブは詳細欄に配置されております。

保存ボタンの動きのとしては、
・タブ内のサブフォームに入力されたものを保存する(postgreSQLデータベース内に)
・保存ボタンが押される以外では保存は行わないものとする
・入力内容に不備がある場合はポップアップ表示で登録できないことを伝える

以上の3点になります。

助力いただける方、コメントお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

postgresをリンクテーブルとするなら、直接の連結は避けたほうが良いです。
メインとなるデータを選択した段階で、accessのテーブルにワークテーブルを設け該当データをコピーして、そのデータの確定後にそのデータ元にpostgresを更新するようにしたほうが良いでしょう。
※フォームはそのワークテーブルと連結する。

またそうすることによってリレーションシップが作成できますから、意図する簡単な作成ができるのではないかと思います。
サブフォームを含むフォームを簡単作成

尚、ワークテーブルを使用する際の連結の場合、データを削除すると画面上に#deleteが表示されます。
回避方法としてはワークテーブルと全く同じダミーのテーブルを作成しておき、ワークテーブルを削除する直前に、フォームのコントロールソースをダミーに切り替えると回避できます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/23 14:38

    ワークテーブルを使うということは同意件ですが、#delete 表示の回避は、削除後サブフォームに対して Requery すればいいのでは。
    あるいは、
    DoCmd.RunCommand acCmdSelectAllRecords
    DoCmd.RunCommand acCmdDelete
    というようにUIをつかって削除すればいいでしょう。

    キャンセル

  • 2018/07/23 14:43

    Requery で消えるのは知っていますが、一瞬でも表示したくない場合です。
    hatenaさんの言われる方法で一瞬たりとも#delete表示されないですか?

    キャンセル

  • 2018/07/23 17:02

    下記でどうでしょう。
    DoCmd.Echo False
    On Error Resume Next
    '削除処理
    Me.サブフォームコントロール名.Form.Requery
    DoCmd.Echo True
    On Error GoTo 0

    キャンセル

  • 2018/07/23 17:30

    ワークテーブルについての知識が乏しいので、見当はずれなことを言ってしまうかもしれません、先に誤っておきます。

    フィールドに登録・更新・削除ができるクエリ?を作成しておき、
    ワークテーブルを作っておいて、上記のクエリから得たデータを
    ワークテーブルに転記し、ワークテーブルに入力されたデータをまとめて
    SQLデータベースにINSERTする。という認識でお間違いないでしょうか?

    その場合ですと、
    登・更・削クエリのフォームプロパティで
    開いたときVBAで入力されたデータをワークテーブルに転記する
    というVBAを記述し、保存ボタンを押したときにワークテーブルのデータを
    SQLデータベースにINSERTするVBAを記述する
    という流れでお間違いないでしょうか?

    質問に質問を重ねてしまい申し訳ございません。

    キャンセル

  • 2018/07/23 17:43

    概ね合っています。
    ワークテーブルを利用する意図としては、
    ・連結したフォームにすることにより生産性が向上すること。
    ・accessとpostgresのトランザクション制御を分離できること。
    です。
    また、リンクテーブルに連結すると、画面操作している場合に、リンク先のテーブルがロックされてしまいます。

    キャンセル

  • 2018/07/23 17:49

    返答ありがとうございます。
    トランザクション制御しないままで開発を進めてしまうところでした。

    努力してみますが、行き詰ってしまった場合、
    再度投稿するかもしれないので、お手すきでしたら返答のほうお願いしたいです。
    ありがとうございました。

    キャンセル

  • 2018/07/25 11:42

    > hatena さん
    DoCmd.Echoによる制御で#Deleteが表示されないのは確認できました。

    キャンセル

  • 2018/07/25 12:43

    オートナンバーを連番として利用する際などは、オートナンバーのリセットが必要で、連結した場合には変更できないので、ダミーテーブルを利用したりしています。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    DB設計について

    1画面に複数選択のチェックボックスを作成する際の DB設計について質問です。 例えば、10個のチェックボックスがある場合、 設計の仕方は色々あると思いますが、チェックボックスの

  • 解決済

    PostgreSQLのレプリケーションによる性能について

    PostgreSQLの性能向上を図っていますが、 PostgreSQL9系より標準搭載されているレプリケーション機能を使用したいと考えています。 環境はVMで、クラウドにC

  • 解決済

    質問・回答・回答補足の選択要素があるアンケートフォームのテーブル設計について

    前提・実現したいこと 質問・回答・回答補足の選択要素があるアンケートフォームのテーブル設計について、どのようにテーブル設計をするべきか悩んでおります。 例えば以下の様なフォ

  • 解決済

    「ポスグレ」2つのVM間でDBを複製させたい。

    実現したいこと 現在VMを二つ使っており、片方に入れているポスグレのDBデータをもう片方に複製したいのですが、どのようにすればいいでしょうか? 両方ともにポスグレのインスト

  • 解決済

    PostgreSql.confの設定について

    皆様がPostgreSqlをインストールする際に、 初期値から変更されるpostgresql.confの値を教えて頂けませんでしょうか。 現状、SQLのレスポンスが悪く困ってお

  • 解決済

    求む、VBAの記述例

    VBA初心者です。 どこから手を付けていいかも分からず困っています。 VBAで入力チェック ・有無 ・形式:文字か数字の判定 ・範囲チェック ・整合性チェック エラーがあればメ

  • 解決済

    PostgreSQL,Accessでinsert selectがおかしい

    Accessで、レコード数が約120万件あるPostgreSQLのテーブルから リンクテーブルを経由して別のaccess上のテーブルへ全件Insertする処理があります。 その

  • 解決済

    VBAでオブジェクト型の変数をモジュールレベルでコンストラクタするには?

    失礼いたします 帳簿処理用のユーザーフォームいくつかを作っています。 それぞれのフォームの構造が似ているので、イベント時の動作が変わらないコントロールに関してはコントロール名を

同じタグがついた質問を見る

  • VBA

    1782questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    427questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

  • トップ
  • VBAに関する質問
  • 1つのフォームに詳細欄にタブコントロールでタブ分けされた参照整合性のないサブフォームの保存ボタンの動きについて