パソコン(ソフト)

【Access】コンボボックスで選択したデータを入力した時のちょっとしたTips

選択したデータの種類が違うエラー

 

非連結のテキストボックスをコンボボックスにして、別テーブルのリストを選択させる方法で値をVBAで登録する方法をやっています。

 

【Access】テキストボックスからコンボボックス変更

 

しかし、

さらに詳しく

noである番号の方を登録テーブルに書き込みたいのですが、次のフィールドにあるデータが書き込まれて型が違うためにエラーになりました。

 

 

 

Private Sub new_entry_btn_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset


      Debug.Print Me.edit_categories.Column(0)

If MsgBox("新規登録しますか? yes/no", vbYesNo, "データ登録確認") = vbYes Then
        
        
On Error GoTo ErrRtn
        
        Set cn = CurrentProject.Connection
        rs.Open "dbo_product_master", cn, adOpenKeyset, adLockOptimistic
        
        ' トランザクションの開始
        cn.BeginTrans
        
                rs.AddNew
                
                rs!code = edit_code
                rs!code_ec = edit_code_ec
                rs!code_amazon = edit_code_amazon
                rs!jan_sku_code = edit_jan_sku_code
                rs!name = edit_name
                rs!name_kana = edit_name_kana
                rs!categories = edit_categories
                rs!item = edit_item
                rs!purchase_price = edit_purchase_price
                rs!purchase_currency = edit_purchase_currency
                rs!selling_price = edit_selling_price
                rs!supplier = edit_supplier
                rs!shipping_flag = edit_shipping_flag
                rs!handling = edit_handling
                
                rs.Update
                MsgBox ("新規登録完了しました。")
        
        ' トランザクションの保存
        cn.CommitTrans
        
                rs.Close: Set rs = Nothing
                cn.Close: Set cn = Nothing
        
         
Else
        
        MsgBox ("新規登録しませんでした。")
        Exit Sub
         
End If


ExitErrRtn:
        DoCmd.Close acForm, "edit_product_master", acSaveNo

Exit Sub


ErrRtn:
        'BeginTransの時点まで戻り、変更をキャンセルする
        cn.RollbackTrans
        MsgBox "エラー: " & Err.Description
        
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing


End Sub

 

 

種類が違うよってエラーがでたので、直感的に

ココに注意

コンボボックスで選択した値が数字じゃなくて内容を入れようとしている

とわかりました。

設計上、数字で管理するようにしてあります。

 

 

 

デバックで、

Debug.Print Me.edit_categories

 

とやってみると、はやり内容をテーブルに書き込もうとしていたようです。

なので、

 

Debug.Print Me.edit_categories.Column(0)

 

とやってみたら、ちゃんと数字が選択されました。

 

Column関数を知っていれば(笑)

 

コンボボックスで選択すると、項目には数字しか入らないので、わざわざ隣にテキストボックスを設置して内容を表示するようにしていました。

ココがポイント

Column関数を知っていたらこんな事をやらなくても良かったかもしれません。

 

 







Column関数を使ってフォーム修正

 

まず、コンボボックスのプロパティソースから集合体ソースを選択して、表示させたい内容を前にして、次に番号のフィールドを設定しました。

 

 

 

プロパティシートの連結列を1にしました。

プロパティシートの書式の列数を1にしました。

この設定にて、VBAでデバッグの内容を見ると、

 

Debug.Print Me.edit_categories

 

とやってみると、もちろんフォームでも表示されている内容になりますが、

 

Debug.Print Me.edit_categories.Column(1)

 

とやってみたら、ちゃんと数字が選択されました。

 

これで、

ポイント

フォームで選択したコンボボックス上では、人間が分かる内容で表示されますが、テーブルへの書き込みは、数字が書き込みできることになります。

 

 

 

                rs!code = edit_code
                rs!code_ec = edit_code_ec
                rs!code_amazon = edit_code_amazon
                rs!jan_sku_code = edit_jan_sku_code
                rs!name = edit_name
                rs!name_kana = edit_name_kana
                rs!categories = edit_categories.Column(1)
                rs!item = edit_item.Column(1)
                rs!purchase_price = edit_purchase_price
                rs!purchase_currency = edit_purchase_currency.Column(1)
                rs!selling_price = edit_selling_price
                rs!supplier = edit_supplier.Column(1)
                rs!shipping_flag = edit_shipping_flag.Column(1)
                rs!handling = edit_handling.Column(1)

 

 

この辺も細かい設定も探し当てる前に時間を要します。

長年Accessを使って開発をしていますが、スグに忘れてしまい簡単に思いつくような方法でやってしまいます。

このような備忘録にしておくことで思い出すことも容易になる事でしょう。

 

 

 

 

-パソコン(ソフト)
-, , , , ,

© 2020 PCTips