質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

758閲覧

Access2010+Windows11+SQLServer2008 R2で環境依存文字が文字化けします

tsunekado

総合スコア1

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2023/06/07 09:27

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・Access2010+Windows11+SQLServer2008 R2で環境依存文字の「㎖」などが文字化けしないようにしたい。

Windows11にAccess2010のadpで作ったアプリケーションを動かしています。

このアプリケーションの画面で環境依存文字の「㎖」などを入力すると入力時は「
「㎖」と表示されて入力できてSQLServer2008 R2に登録もできるのですが、
それを呼び出すと「・」などに文字化けしてしまいます。

参照設定で ActiveX Data Objects 2.1とData Access Objectを指定しています。
ActiveX Data Objectsのバージョンが古いのかと思い、
最新の6.1に変えてみましたが直りませんでした。

SQLServer Management Studioでデータを見ると、「㎖」と正常に表示されています。

ソースは下記のように書いています。

Dim Cn As ADODB.Connection Dim rs As ADODB.Recordset Set Cn = New ADODB.Connection Set rs = New ADODB.Recordset '接続を確立する Cn.CommandTimeout = 0 Cn.Open glbADOMST ' SQLステートメントを指定してレコードセットを作成する rs.Open "Select * From 品名マスタ where 品名コード = " & Me.品名コード & ";", Cn, adOpenKeyset, adLockReadOnly

※glbADOMST = "Provider=SQLOLEDB;" & _
"Data Source=" & glbDSN & ";" & _
"Initial Catalog=MST;UID=" & glbUID & ";PWD=" & glbPWD & ";"

Access2010はWindows11に対応していないので環境依存文字を表示することはできないのでしょうか?

良い方法があれば教えていただけないでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk.exe

2023/06/08 01:09

まずSQL Server データベース側においてどの照合順序が適用されているかを確認されるのが先でしょう。
tsunekado

2023/06/08 04:21

ありがとうございます。 「㎖」が入っているSQLServerのテーブルを列の文字コードを確認すると Japanese_BIN2 932 となっていたので、Shift-JISだと思います。 今回は、お客様のWindows7の端末をWindows11にリプレースする案件でして、 Windows7のときは「㎖」は表示されていたのに11にすると文字化けしています。 今のところわからないので、 お客様に「ml」と入力にするように変えていただけないかお願いすることも考えています。 ありがとうございます。
sazi

2023/06/08 05:46

>Windows7のときは「㎖」は表示されていたのに11にすると文字化けしています。 OSだけの変更ではなくてPC環境に依存する部分もあったのではないですか? SQLServerの文字コード(コードページ)を確認して下さい。
sk.exe

2023/06/08 08:31 編集

> 「㎖」が入っているSQLServerのテーブルを列の文字コードを確認すると > Japanese_BIN2 932 もしその列のデータ型が varchar 型なのであれば、Unicode 環境依存文字を元の文字のまま格納することはできません。 ・varchar 型であっても Japanese_XJIS_140_CI_AI_KS_UTF8 のような  照合順序であれば一応格納は可能。  (但し上記の照合順序は SQL Server 2008 ではサポートされていない) ・varchar 型ではなく nvarchar 型として定義されている列なのであれば、  照合順序が Japanese_BIN2 であっても格納すること自体は可能。 > 今回は、お客様のWindows7の端末をWindows11にリプレースする案件でして、 新しい端末に Office Professional Plus 2010 か Access 2010 単体を インストールした、ということでしょうか。 また、リプレースされるのは Access を実行する端末のみで、 SQL Server 2008 R2 が稼働しているサーバーはそのまま 継続して利用されるのでしょうか。 また、SQL Server データベースへの接続用のドライバーは 従来と同じものを使用されているのでしょうか。 > Windows7のときは「㎖」は表示されていたのに11にすると文字化けしています。 元の環境では表示できていた、ということなのであれば、 少なくとも「表示されていた」時点におけるその列のデータ型は nvarchar 型であり、"㎖"も正しく格納されていたはず。 > このアプリケーションの画面で環境依存文字の「㎖」などを入力すると入力時は > 「㎖」と表示されて入力できてSQLServer2008 R2に登録もできるのですが、 > それを呼び出すと「・」などに文字化けしてしまいます。 「呼び出した結果」をどのようにして出力、確認されたのでしょうか。 例えば「Debug.Print メソッドによってそのフィールドの値を イミディエイトウィンドウに出力した」といったことなのであれば、 単に「Visual Basic Editor のインタフェースは Unicode 環境依存文字の 入出力に対応していないから必ずそうなる」という話で終わってしまいますが。
退会済みユーザー

退会済みユーザー

2023/06/09 04:53 編集

私の回答のコメント欄にも書きましたが、 > 「㎖」が入っているSQLServerのテーブルを列の文字コードを確認すると Japanese_BIN2 932 となっていたので、Shift-JISだと思います。 見てるものが違います。それは文字コードではなく照合順序です。 私の回答に貼った IME パッドの画像をよく見てください。Shift JIS: - とありますよね。その意味は Shift_JIS には「㎖」という文字は無いということです。 Shift_JIS にある文字、例えば「㎜」なら、IME パッドでは Shift JIS: 0x876F と表示されます。
tsunekado

2023/06/09 05:17

いろいろと助言をいただいて申し訳ありません。 SQL Serverの列の型は varchar なのに、文字化けせずにManageMentStudioで確認でしたので、 おかしいと思ってみると、 外字として登録されていることがわかりました。 11の端末に旧端末の外字をコピーしてこようと思います。 今回、いただいた助言で文字コードについて大変勉強になりました。 ありがとうございました。
tsunekado

2023/06/09 05:31

SurferOnWww様、sk.exe様、sazi様 ありがとうございました。
guest

回答1

0

ベストアンサー

Access2010+Windows11+SQLServer2008 R2で環境依存文字の「㎖」などが文字化けしないようにしたい。

㎖ は環境依存文字などではなくて、Unicode の基本多言語面の文字です。

イメージ説明

SQLServer Management Studioでデータを見ると、「㎖」と正常に表示されています。

とのことなので、SQL Server の当該フィールドは nvarchar など Unicode 対応となっているが、それからデータを取得した後、

それを呼び出すと「・」などに文字化けしてしまいます。

とするまでのプロセスのどこかが Unicode に対応してないということだと思います。


【追記】

質問が情報不足で何が問題なのか分かりませんが、「access unicode」をキーワードにググってヒットした以下の CodeZine の記事によると、

VBAからUnicode版のWindows API を使う
https://codezine.jp/article/detail/1718

"MS-Officeアプリケーション(Excel、Word、Access等)はUnicodeに対応していますが、同様にVBAはUnicodeに対応しています" "VBA開発環境はUnicodeに対応していません"

・・・ということだそうです。心当たりはないですか?

「access unicode」などをキーワードにググれば他にも参考になりそうな記事がヒットします。ご自分でも調べてみてはいかがですか。

投稿2023/06/07 09:54

編集2023/06/08 01:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsunekado

2023/06/08 04:09

ありがとうございます。 「㎖」が入っているSQLServerのテーブルを列の文字コードを確認すると Japanese_BIN2 932 となっていました。 shift-jisということになるので、ここに㎖が登録できているということになります。 APIのことは調べてみます。 難しい場合は、環境依存文字は使わずに「ml」と普通に入力していただくようお願いしようかと思っています。
退会済みユーザー

退会済みユーザー

2023/06/08 04:20

> 文字コードを確認すると Japanese_BIN2 932 となっていました 見てるものが違います。それは文字コードではなく照合順序です。 回答の IME パッドの画像をよく見てください。Shift JIS: - とありますよね。その意味は Shift_JIS にはその文字は無いということです。
退会済みユーザー

退会済みユーザー

2023/06/08 05:17

> 難しい場合は、環境依存文字は使わずに 環境依存文字ではないと言ってるのに。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問