【ExcelVBA】SQL Serverのストアドプロシージャにマクロが渡したデータで更新処理を行うと更新したデータが文字化けする事象について

本記事では、SQL Serverのストアドプロシージャにマクロが渡したデータで更新処理を行うと更新したデータが文字化けする事象についてご説明します。

また、文字化けしないようするにはどうしたらよいのか、その解決方法についてもご説明します。

事象について

まずは何が起きているのか、その事象について詳しくお話します。

例えば、Excelに入力されたデータをSQL Serverで更新するため、その入力データをSQL Serverのストアドプロシージャに渡して更新するようなマクロが組まれているとします。

ところが、次の通りに操作して処理が行われると、なぜか文字化けしてしまうのです。

  1. Excelのシートにデータを入力
  2. ①のデータをSQL Serverで更新(Update)
【参考】文字化けしているデータ

実際に文字化けする例

例えばこんなExcelのシートがあるとします。

このExcelのシートは、実行ボタンをクリックすると黄色のセルのデータをSQL Serverで更新するように作られています。

この黄色のセルのデータは、ストアドプロシージャのパラメタに渡されます。

実行ボタンをクリックした後に更新されたデータを確認してみると、下の画像の通りにデータが文字化けしてしまいます。

1行目のデータは全角文字が「??????」と表示されており、文字化けしています。

文字化けした原因

文字化けした原因ですが、ストアドプロシージャを呼び出す際に指定したパラメタの型が原因です。

ではどんな型を指定したのか、実際のコードを見て頂きましょう。

        'データ型の指定
        objParameter.Type = adChar

このadCharが問題でした。このadCharを指定してデータを更新すると文字化けします。

文字化けしないようにするには

文字化けしないようにするにはどうすればよいのかというと、adWCharを指定します。

        'データ型の指定
        objParameter.Type = adWChar

以上のように、ストアドプロシージャを呼び出すのに指定するパラメタの型には注意しましょう。

【動画】adCharとadWCharそれぞれコードに実装した時の参考動画

参考に、adCharとadWCharそれぞれコードに実装した時の参考動画を公開しているツイートをお見せします。

adCharを実装している時は文字化けが起きているのに対し、adWCharを実装しているときは文字化けが起きていません。

最後に

本記事では、SQL Serverのストアドプロシージャにマクロが渡したデータで更新処理を行うと更新したデータが文字化けする事象についてお話ししました。

ストアドプロシージャのパラメタ設定で、文字化けしないように型の指定には注意しましょう。

本記事と同じようなコードを組む機会があるときは是非参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら