Access (VBA)

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

 
(Windows 10 Home : Access 2013)
Access サブフォーム選択 メインフォーム表示
投稿日時: 19/07/07 10:08:03
投稿者: sakamoto4827

お世話になります
 
このサイトに載っていた下記例文で 住所録テーブルを更新したいと思います
メイン、サブフォームを作成し、メインフォームを非連結、サブフォームを連結、メインフォームのテキスト欄に記入後、保存釦でテーブル更新、メインフォームテキスト欄クリアは確認できましたが、その後サブフォームのレコード選択(行の色を変えたとき)フィールド内容をメインフォームのテキスト欄に表示させ、メインフォームでテキスト修正後保存釦でテーブル更新、表示をしたいのですがよろしくお願いします
 
基本的に上記内容で、メイン、サブフォームは無理なのでしょうか?
VBA初心者ですがよろしくお願いします
 
Private Sub 保存_Click()
    Dim Con As ADODB.Connection
    Dim Rst As ADODB.Recordset
  Set Con = CurrentProject.Connection
  Set Rst = New ADODB.Recordset
  Rst.Open "住所録", Con, adOpenForwardOnly, adLockPessimistic
  With Rst
        .AddNew
        .Fields("氏名") = Me!氏名
        .Fields("会社名") = Me!会社名
        .Fields("郵便番号") = Me!郵便番号
        .Fields("住所") = Me!住所
        .Fields("電話番号") = Me!電話番号
        .Fields("年齢") = Me!年齢
        .Update
    End With
  Rst.Close
    Set Rst = Nothing
    Set Con = Nothing
  Call ClearControls
  Me.Refresh
End Sub
 
Private Sub クリア_Click()
    Call ClearControls
End Sub
 
Private Sub 閉じる_Click()
    DoCmd.Close acForm, "住所録", acSaveNo
End Sub
 
Sub ClearControls()
    Dim Ctl As Control
  For Each Ctl In Me.Controls
        If Ctl.ControlType = acTextBox Then
            Ctl = Null
        End If
    Next Ctl
End Sub

回答
投稿日時: 19/07/08 09:34:07
投稿者: sk

引用:
メインフォームを非連結、サブフォームを連結

引用:
サブフォームのレコード選択(行の色を変えたとき)フィールド内容をメインフォームのテキスト欄に表示

サブフォームの Current イベントの発生時に、
サブフォームのカレントレコードの各フィールドの値を
メインフォームの各コントロールに代入なさればよろしいでしょう。
 
引用:
メインフォームでテキスト修正後保存釦でテーブル更新、表示をしたい

引用:
Rst.Open "住所録", Con, adOpenForwardOnly, adLockPessimistic

テーブル[住所録]の主キーはどのフィールドなのでしょうか。

回答
投稿日時: 19/07/08 10:27:22
投稿者: Suzu

サブフォームのレコードを
今回の非連結のメインフォームに転記するのは 既にskさんがコメントされています。
  
新規レコードの入力は、紹介のあったページの内容です。
しかし、紹介のあったページは、ちょっとしか書いていませんが、
あくまでも、非連結フォームの内容を、「新規レコード」として保存する機能です。
  
既存レコードをフォームに表示 → 既に skさんが回答
  
既存レコードを修正 → サブフォームのレコードソースを解除
                                  主キーを元に、レコードセットから編集したいレコードを特定
                                  フォームの内容を上書
                                  サブフォームのレコードソースを再び設定し、
                                     サブフォームのカレントレコードを移動
  
既存レコードの削除 → 簡単なのは、サブフォームのレコードセットからレコードを削除
  
となります。
  
  
が。。。
元々、非連結で紹介されているテクニックに、サブフォームを使う事で連結フォームになります。
であれば、はじめから連結フォームを使えば良いのでは?
  
サブフォームにせず帳票フォームとして その フォームヘッダに、コントロールを配し
Currentイベントで操作をします。
がそうなると、何のためにレコードセットオブジェクトを使うのか意味がなくなります。
  
何の為に、非連結のテクニックに、サブフォームを絡ませるのですか?
「保存」ボタンを使いたいが為でしょうか?
 
 
非連結にてシステム構築を考えた時
一番面倒なのは、同一レコードに複数人が同時に編集を加える可能性があるとき、だれのレコードを正とするか。
連結の場合、そのあたりは Access君がいろいろメッセージを出したりして制御してくれますが
非連結の場合、それを自前で用意
  (簡単には、誰かが編集可能なフォームで開いた段階でそのレコードのフラグ
     (予めテーブルにフィールドを追加し、そのフィールドをフラグとして使用)
   を変更し 編集可能なフォームでは開けなくします。)
 する必要があります。
 
技術探究の為の質問でしたら良いですが
実装の前提のご質問で、ご自分を初心者と言うのであれば避けた方が良い選択肢だと思います。

投稿日時: 19/07/08 21:31:00
投稿者: sakamoto4827

回答ありがとうございました
 
こんな風に使用できたらと思い投稿しましたが
VBAをもう少し勉強してみます