アクセス帳票フォームのレコードを指定して単票フォームを開こう

 

アクセス担当のまみです。

 

データの登録、検索ができたら次にやりたいことは・・・

入力したデータの修正ですね。

 

今回は、データ修正フォームを作成してみましょう!

 

Contents

検索結果をフォームに表示するコードのおさらい

 

今回の「修正フォーム」作成の説明のために「宛名印刷」ファイルを使用します。

 

プログラム作成の基本となる「フォームの作成」、「データの登録」、「データの検索」、「データの修正」、「レコードの削除」を「宛名印刷」ファイルを作成しながら、お伝えしています。

シリーズを読破すると、ついでにはがきの宛名印刷ができるようになっちゃいます。

お時間がありましたら是非、下記の記事から作成してみてください。

 
 

今回お伝えする「修正フォーム」は前回お伝えした、検索結果をフォームに表示させることができた、その次のステップになります。

前回の記事ととってもつながりがあるので、下記の記事でおさらいをしておいてくださいね。

 

関連記事

 

 
 
 

フォームのコピー

 

今回は修正フォームを作成します。

新しくフォームを作成してもOKなのですが、「F_データ入力」フォームとほぼ同じフォームなので、コピーしちゃいましょう!

 

 

「F_データ入力」フォームを右クリックして、「コピー」を左クリックします。

 

 

ナビゲーションウインドウ上で右クリックして、「貼り付け」を左クリックします。

 

 

フォームの名前は「F_修正」にしておきましょう。

 

 

1つテキストボックスを追加して、プロパティシートの「その他」タブで名前を「tx登録NO」にしておきましょう。

あとで非表示にするので、場所等はどこでもOKです。

 

コピーしたF_修正のクリアボタンと登録ボタンの名前と標題は変更しておきましょう。

名前 [btnクリア]→btn削除
標題 [クリア]→削除

 

名前 [btn登録]→btn修正
標題 [修正]→修正

 

 

(はてな君)
フォームをコピーできるんだぁ。コピーしたら位置とかもそのままで便利~!あれっコードもそのままコピーされるの?

 

(あいちゃん)
 はてな君中々鋭いですね。コードもそのままコピーされます!

 

 

「btnメニュー」以外は使用しないので、削除しておきましょう。

一番頭の「Option Compare Database」は削除しないでくださいね! 

 

 

 

これで、「F_修正」フォームの準備はOKです。

 

「F_データ検索」フォームから「F_修正」フォームが開くようにしてみましょう!

 

帳票フォームからレコード指定で別フォームを開く

 

まずは、「F_データ検索」フォームの「btn修正」が動くようにしていきましょう。

 

帳票フォーム側の設定

 

 

 

①「btn修正」ボタンを選択した状態で、プロパティーシートの②「イベント」タブをクリックします。

 

「クリック時」は「イベントプロシージャ」にしてを左クリックしてコードを表示しましょう。

 

 

「Private Sub btn修正_Click()」と「End Sub」の間に下記のコードを記載します。

 

    DoCmd.OpenForm "F_修正", acNormal, , , , , CStr(Me.登録NO.Value)
    DoCmd.Close acForm, Me.Name

 

コードをコピーされたい場合は下記の記事を参考にしてください。

関連記事

 

 

修正したいレコードの「登録NO」の値を、「F_修正」を開いた時に使ってねって意味です。

「F_データ検索」フォームは以上で完成です!

 

「F_修正」フォームの設定をしていきましょう。

 

単票フォーム側の設定

 

 

「F_修正」フォームの読み込み時にコードを記載します。

①フォームを選択した状態で、プロパティーシートの②「イベント」タブで、読み込み時に、「イベントプロシージャ」を選択してを左クリックしましょう。

 

 

「Private Sub Form_Load()」と「End Sub」の間に下記のコードを入力しましょう。

 

 

    Dim db As DAO.Database
    Dim Rst As DAO.Recordset
    Dim strData As String
    Dim strSQL As String
    
    Set db = CurrentDb
    strData = CStr(Me.OpenArgs)
    strSQL = "select * from T_住所録 where 登録NO=" & strData
    
    Set Rst = db.OpenRecordset(strSQL)
    
    If Rst.RecordCount = 1 Then
        Me.tx登録NO.Value = Rst!登録NO
    
    Else
    End If
    
    Rst.Close

 

CStr(Me.OpenArgs)が、「F_データ検索」の「修正」ボタンをクリックした時に、使ってねって「登録NO」の値が入っています。

 

“select * from T_住所録 where 登録NO=” & strData  で、「T_住所録」テーブルから同じ登録NOのデータを取り出してねって意味になります。

 

Rst.RecordCountには、 “select * from T_住所録 where 登録NO=” & strDataの該当データの数が入っています。

登録NOは同じ値は存在しないので、今回の場合のRst.RecordCountの値は該当があれば1、なければ0です。

では、「F_データ検索」フォームをフォームビューで開いて、確認してみましょう。

 

 

私は、4番目のデータを選んでみました。

 

 

選んだデータの「登録NO」と同じ数字が表示されていれば成功です。

私は4だったので成功!

 

(はてな君)
他のデータはこれからコードを書くの?

 

 

そうなんです。

他のデータはこれからです。今の段階で表示されるようにしておいてもいいのですが、うまく表示されなかった時にどの段階でうまくいっていないのかがわかりにくいんです。

 

(あいちゃん)
「登録NO」がうまく表示されているのがわかっていれば、見る場所はデータの書き込み部分ですからね!

 

 

それでは、下記のコードを追加しておきましょう。

 

        Me.txしめい.Value = Rst!しめい
        Me.tx氏名.Value = Rst!氏名
        Me.tx郵便番号.Value = Rst!郵便番号
        Me.tx住所1.Value = Rst!住所1
        Me.tx住所2.Value = Rst!住所2
        Me.tx電話番号.Value = Rst!電話
        Me.cmb印刷要否.Value = Rst!印刷要否
        Me.tx備考.Value = Rst!備考

 

 

動作確認をしておいてくださいね!

フォームの保存も忘れずに!

 

まとめ

 

指定したデータを別のフォームで開けたらとっても嬉しいですね。

指定したレコードを別のフォームに表示させるのが一番難しいところかなって思うので、ここができればあとは色々なものに応用が効きますよ!

 

スポンサーリンク