本記事では、SQL Serverのストアドプロシージャにマクロが渡したデータで更新処理を行うと更新したデータが文字化けする事象についてご説明します。
また、文字化けしないようするにはどうしたらよいのか、その解決方法についてもご説明します。
事象について
まずは何が起きているのか、その事象について詳しくお話します。
例えば、Excelに入力されたデータをSQL Serverで更新するため、その入力データをSQL Serverのストアドプロシージャに渡して更新するようなマクロが組まれているとします。
ところが、次の通りに操作して処理が行われると、なぜか文字化けしてしまうのです。
- Excelのシートにデータを入力
- ①のデータをSQL Serverで更新(Update)
実際に文字化けする例
このExcelのシートは、実行ボタンをクリックすると黄色のセルのデータをSQL Serverで更新するように作られています。
この黄色のセルのデータは、ストアドプロシージャのパラメタに渡されます。
実行ボタンをクリックした後に更新されたデータを確認してみると、下の画像の通りにデータが文字化けしてしまいます。
1行目のデータは全角文字が「??????」と表示されており、文字化けしています。
文字化けした原因
文字化けした原因ですが、ストアドプロシージャを呼び出す際に指定したパラメタの型が原因です。
ではどんな型を指定したのか、実際のコードを見て頂きましょう。
'データ型の指定 objParameter.Type = adChar
このadCharが問題でした。このadCharを指定してデータを更新すると文字化けします。
文字化けしないようにするには
文字化けしないようにするにはどうすればよいのかというと、adWCharを指定します。
'データ型の指定 objParameter.Type = adWChar
以上のように、ストアドプロシージャを呼び出すのに指定するパラメタの型には注意しましょう。
【動画】adCharとadWCharそれぞれコードに実装した時の参考動画
参考に、adCharとadWCharそれぞれコードに実装した時の参考動画を公開しているツイートをお見せします。
【昨日のドはまり】
引数の型指定に「adWChar」だと文字化け起こらず。
「adChar」だと文字化け(全角文字が?マークに化ける)😱😱
初めは「adChar」を使っていたためドはまり。1時間くらいググりまくってなんとか「adWChar」だと文字化けが起こらないとの情報にたどり着く…😇😇#Excel#VBA#SQLServer pic.twitter.com/zRFh4qzgKl— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) March 29, 2021
adCharを実装している時は文字化けが起きているのに対し、adWCharを実装しているときは文字化けが起きていません。
最後に
本記事では、SQL Serverのストアドプロシージャにマクロが渡したデータで更新処理を行うと更新したデータが文字化けする事象についてお話ししました。
ストアドプロシージャのパラメタ設定で、文字化けしないように型の指定には注意しましょう。
本記事と同じようなコードを組む機会があるときは是非参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。