饂飩コーディング

iOSアプリやら、Unityやら、Cocos2dやらごにょごにょ書いております

非連結のフォームを使おう。連結フォーム?そりゃ使っちゃだめだよ。

サイトが引っ越しました。→https://scombu.com

約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。

はい!タイトルはさておき、連結フォームは危険。いみわかんないw
Accessってなんだかなぁ~と思う今日この頃。

てなわけで非連結フォームの導入部分の記述をします。

いくつかやり方はあるらしいんだけど、
詳細部分あるボタンをクリックして
そのボタンから明細フォームを開くときに引数でキーを渡して
明細フォームではそのキーでSQL文発行して
各コンボボックスにデータをセットしするって感じです。

下の帳票フォーム部分の左にある小さなボタンを押して、明細用のフォームを引数IDを渡して
開きます。
f:id:appdeappuappu:20201227214242p:plain

Private Sub コマンド36_Click()
    DoCmd.OpenForm "フォーム6", , , , , , Me.ID
End Sub


ボタンをおしたらこんな画面が開く。
f:id:appdeappuappu:20201227214431p:plain

フォームの読込イベントに以下の感じでSQLで入れてあげれば簡単。

Private Sub Form_Load()
    Me.txtID = OpenArgs
    
    Dim myCn     As ADODB.Connection    'ADOコネクションオブジェクト
    Dim myRs     As ADODB.Recordset     'ADOレコードセットオブジェクト
    Dim strSQL   As String              'SQL文用文字列
    
    '現在のデータベースへ接続
    Set myCn = CurrentProject.Connection
    
    'ADOレコードセットのインスタンス作成
    Set myRs = New ADODB.Recordset
    
    myRs.CursorLocation = adUseClient
    'SQL文
    strSQL = "SELECT 商品マスター.ID, 商品マスター.商品番号, 商品マスター.大分類, 商品マスター.中分類, 商品マスター.小分類, 商品マスター.商品名, 商品マスター.商品説明1, 商品マスター.商品説明2"
    strSQL = strSQL & " FROM 商品マスター"
    strSQL = strSQL & " WHERE ID =  " & OpenArgs & ""
    strSQL = strSQL & " ;"
    
    'レコードセット取得・・・(※1)
    myRs.Open strSQL, myCn, adOpenKeyset, adLockReadOnly
    myRs.MoveFirst
    
        Me.cbItem = myRs.Fields("商品番号")
        Me.cbDai = myRs.Fields("大分類")
        Me.cbCyuu = myRs.Fields("中分類")
        Me.cbSyou = myRs.Fields("小分類")
    
    'オブジェクトの開放
    Set myRs = Nothing: Close
    Set myCn = Nothing: Close
End Sub

あとは、ボタンをつけて、更新処理なり削除処理なり、何なりと実装しましょう。

個人的には連結フォームはどんな場面で使うのか思いつきません。
自分だけが使う画面ならいいけどその程度かなぁ・・・

Accessに明るい人は、連結フォーム使いがちだけど
自分は連結フォーム怖くてドキドキしちゃいます。ほぼ勝手にデータ更新しちゃうしねぇ~