選択したデータの種類が違うエラー
非連結のテキストボックスをコンボボックスにして、別テーブルのリストを選択させる方法で値をVBAで登録する方法をやっています。
https://pctips.jp/pc-soft/access20200125/
しかし、
さらに詳しく
noである番号の方を登録テーブルに書き込みたいのですが、次のフィールドにあるデータが書き込まれて型が違うためにエラーになりました。
[php] 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 [/php]
種類が違うよってエラーがでたので、直感的に
ココに注意
コンボボックスで選択した値が数字じゃなくて内容を入れようとしている
とわかりました。
設計上、数字で管理するようにしてあります。
デバックで、
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)
とやってみたら、ちゃんと数字が選択されました。
これで、
ポイント
フォームで選択したコンボボックス上では、人間が分かる内容で表示されますが、テーブルへの書き込みは、数字が書き込みできることになります。
[php] 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) [/php]
この辺も細かい設定も探し当てる前に時間を要します。
長年Accessを使って開発をしていますが、スグに忘れてしまい簡単に思いつくような方法でやってしまいます。
このような備忘録にしておくことで思い出すことも容易になる事でしょう。