Microsoft Access2013 環境依存文字が文字化け
Microsoft Access2013 のaccdbファイルをテーブル用、フォーム用と分けて作成してDB操作を以下のようにしたとき、環境依存文字(「立法メートル」等)が文字化けしてしまいました。
- VBAにてADOを使用
- 接続はODBC
- パラメータクエリを使用
直接テーブルに環境依存文字を登録したものを検索をする場合は上記条件でも特に支障なく環境依存文字でも表示されていたのですが、環境依存文字をパラメータクエリを介して登録する際に何かが作用しているようでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Dim sql As String Dim oCon As ADODB.Connection Dim command As ADODB.command Dim param As ADODB.Parameter Dim count As Integer ' 新規追加クエリ作成 sql = "INSERT INTO m_tani(" _ & " kbn_id" _ & ", tani" _ & " ) VALUES (" _ & ", ?" _ & ", ?" _ & ")" ' DB接続する Set oCon = New ADODB.Connection Call connect_db(oCon) ' コマンドオブジェクト生成 Set command = New ADODB.command command.ActiveConnection = oCon command.CommandText = sql ' パラメータの設定 Set param = command.CreateParameter("kbn_id", adInteger, adParamInput, , 1) command.Parameters.Append param Set param = command.CreateParameter("tani", adVarChar, adParamInput, 255, "㎥") command.Parameters.Append param ' クエリ実行 command.Execute count oCon.Close Set oCon = Nothing Set command = Nothing ' 登録完了メッセージ If (count > 0) Then MsgBox "登録しました。", vbInformation ' 一覧を表示 DoCmd.BrowseTo acBrowseToForm, "単位一覧" Else MsgBox "登録できませんでした。", vbInformation End If |
接続関係が怪しいな、と思ったので当たりをつけて試したところ、理由は未調査ですが、以下で解決しました。
- 接続をOLE DBに変更
ODBC接続
1 2 3 4 5 |
Function connect_db(oCon) oCon.ConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" _ & "DBQ=" & CurrentProject.Path & "\テーブル用ファイル.accdb;" oCon.Open End Function |
↓
OLE DB接続
1 2 3 4 |
Function connect_db(oCon) oCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" & CurrentProject.Path & "\テーブル用ファイル.accdb;" End Function |
なお、OLE DBに変更したとき、(上記とは別の箇所ですが)ADOでデータにアクセスする記述の部分でODBCでは出ていなかった、予約語のエラーが出ました。
1 |
SELECT COUNT(*) AS count FROM m_jigyosho WHERE id=0 |
こちら、予約語「count」をエイリアスで使用していたので、「row_count」と修正したらエラーは出ず、無事検索できました。
1 |
SELECT COUNT(*) AS row_count FROM m_jigyosho WHERE id=0 |
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。