ODBCドライバ経由でVBAのプログラムやAccessのリンクしたテーブルにレコードを追加したり更新したりすると、以下のエラーが表示される。
「Data too long for column 'XX' at row 1」エラー
暫定対処方法について覚書。
エラーメッセージの内容
単純に考えれば、フィールドに定義されているデータ型よりも大きいデータを挿入/更新しようとしているためと思われるが、実際には、フィールドサイズよりも小さいデータを挿入したときでも発生する。
例えば、midiumtext型のフィールドにたった3文字の文字列を挿入しようとしたときなどがある。
エラーの発生原因
原因は、機種依存文字列が挿入または更新しようとしたデータに含まれていたためだった。
また、特定の漢字を使用した場合にも同様のエラーが発生する場合もあるようだ。
まだ完全な対処方法などがわかってない。
暫定回避策
現時点での暫定回避策について以下に記載。
- MySQLのODBCドライバの設定画面にある"Connect Options"タブの"Initial Statement"に「set names cp932」を設定する。
- VBAで指定する接続文字列に「STMT=set names cp932」を含める。
VBAからADOを使用してAddNew、Updateした際にはこれでうまくいった。
接続文字列の例
以下接続文字列の例。
conKB.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};DATABASE=kb;OPTION=3306;PWD=XXXX;" _ & "PORT=3306;SERVER=localhost;STMT=SET NAMES cp932;UID=root"
基本的に機種依存文字は使用しないのが常識。
完全な回避策等わかり次第内容を更新する。
コメント