パソコン情報

【Access】一覧表示から選択したレコードを非連結フォームに表示



一覧表示から、レコードを選択して、その選択したレコードのデータを別の非連結フォームに表示させる方法になります。

その後は、非連結フォームに表示された内容を修正したりの次作業になるのですが、その手前の処理で、簡単そうでちょっと悩んだので備忘録にしておきます。

 

 

帳票フォームからキーを引っ張ってくる方法



もっとも手っ取り早いのが、帳票フォームは閉じないで、非連結のフォームをポップアップで開いてから、データを呼び出す方法かと思います。

 



ちょっと見栄え的には悪いですが、後ろの帳票フォームから、noというフィールド値を引っ張ってきてVBAにて、非連結フォームに呼び出しています。

 

Private Sub Form_Load()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

        Set cn = CurrentProject.Connection
        rs.CursorLocation = adUseClient
        rs.Open "Vew_product_stock", cn, adOpenKeyset, adLockOptimistic

                rs.Filter = "no = " & Forms![stock_product]![no]

'                Debug.Print edit_no

                    With Me
                    !edit_handling = rs!handling
                    !edit_no = rs!no
                    !edit_code = rs!code
                    !edit_jan_sku_code = rs!jan_sku_code
                    !edit_name = rs!name
                    !edit_supplier = rs!supplier
                    !edit_stock = rs!stock
                    !edit_schedule_arrival = rs!schedule_arrival
                    !edit_ideal_stock = rs!ideal_stock
                    !edit_waiting_shipping = rs!waiting_shipping
                    End With

                rs.Close: Set rs = Nothing
                cn.Close: Set cn = Nothing

ExitErrRtn:

                Exit Sub

ErrRtn:
               MsgBox "エラー: " & Err.description

               rs.Close: Set rs = Nothing
               cn.Close: Set cn = Nothing


End Sub

 


他にも方法はあるかと思いますが、フォームの開閉タイミングでデータが引き継がれないエラーなどもあります。


この方法ならば、帳票フォームから値が引っ張って来れないということがありません。



フォーム間で変数として引き渡す方法

 

帳票フォームが開いていようがいまいが関係ない方法で、フォーム間で変数として渡す方法があります。

 

ココがポイント

モジュール内で変数を定義


すればいいだけです。

もしかしたら、こっちの方が簡単?かもしれませんが好みでしょうかね。

 



そして、帳票フォームから選択したレコードを非連結フォームを開くときに下記の様に、フォーム間変数に設定します。



Private Sub Form_Load()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String

On Error GoTo ErrRtn

        Set cn = CurrentProject.Connection
        rs.CursorLocation = adUseClient
        rs.Open "Vew_product_stock", cn, adOpenKeyset, adLockOptimistic

                rs.Filter = "no = " & trans_stock_no  'ここにフーム間変数を設定

'                Debug.Print edit_no

                    With Me
                    !edit_handling = rs!handling
                    !edit_no = rs!no
                    !edit_code = rs!code
                    !edit_jan_sku_code = rs!jan_sku_code
                    !edit_name = rs!name
                    !edit_supplier = rs!supplier
                    !edit_stock = rs!stock
                    !edit_schedule_arrival = rs!schedule_arrival
                    !edit_ideal_stock = rs!ideal_stock
                    !edit_waiting_shipping = rs!waiting_shipping
                    End With

                rs.Close: Set rs = Nothing
                cn.Close: Set cn = Nothing

ExitErrRtn:

                Exit Sub

ErrRtn:
               MsgBox "エラー: " & Err.description

               rs.Close: Set rs = Nothing
               cn.Close: Set cn = Nothing


End Sub

 


結局は、どっちの方法でも簡単にできましたが、あとは好みの問題でしょうかね。