次の方法で共有

AccessからSQLServerにリンクしたテーブルで通貨型(SQL Server上は money型)のカラムが空白になる

Anonymous
2020-10-26T16:35:30+00:00

古い .mdbを .accdbにするついでに、テーブルは SQL Serverに出して本体からはリンクする様にしました。

日付やYes/No型でアップサイジング出来ないのに悩まされましたが、元データの不具合(西暦が3桁とかの入力ミス)を修正してSQL Serverへデータを移行する事は出来たと思っていました。

元々の Access上では「通貨型」、SQL Serve上では money型となっているカラムをAccessで取り出すと空になっている様です。

SSMSでテーブルを見てみると、小数点以下2桁までありますが1000.00 の様な値が確認できます。

全てが空ではなく、SQL Server上で 0.00 となっているカラムはAccess上でも ¥0 と表示されます。

AccessにもSQL Serverにも不慣れなので、データのコンバートやアップサイジングでの作業等で何かミスをしている可能性があるのでしょうが、原因がさっぱり解りません。

原因は判らなくても利用さえできれば良いとも思いますが、現状はテストデータなので、本番データの移行時に備えておきたいと思います。

原因及び対処方法を教えてください。

よろしくお願い致します。

情報が不足でしたらご指摘ください。

以下、環境です。

Windows10 pro

バージョン 1909 ビルド 18363.1139

Microsoft SQL Server Express (64-bit)

Version 15.0.2070.41

Language 日本語(日本)

Server Collation Japanese_CI_AS

C:\Windows\System32\odbcad32.exe

バージョン 10.0.18362.1

__このファイルで良いのでしょうか?

Microsoft Office 365 ProPlus

バージョン2002 ビルド 12527.21236

という表記と

Microsoft(R) Access(R) for Office 365 MSO (16.0.12527.21230) 32ビット

とがあります。

__古い .mdbをコンバートしてきたので32bit版を使用しています

__64bit版ではどうにも動きませんでした

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2020-11-05T02:56:55+00:00

> 残念ながら変化ないです。

それは残念。

SQL Server データベース上のテーブルをリンク先とする Access のリンクテーブルにおいて、

通貨型( SQL Server 上では money 型)のフィールドの値が表示されない

という事例について海外のコミュニティを当たってみた限り、今のところは

Access のバージョン、SQL Server のバージョン、ドライバーの種類やバージョンの

組み合わせの違いによって起こり得る現象ではないかと考えます。

Office Dev Center: MONEY datatype not displaying from SQL Server backend

stack overflow: MS SQL Server field with Data type of Money shows empty field in MS ACCESS linked table

今回の事例と共通しているのは、次の 3 点です。

・Access のテーブルを SQL Server にアップサイジングした。

 (具体的にどのような方法、操作手順を踏んだのかは不明)

・アップサイジングされたテーブルをリンク先とするリンクテーブルを

 フロントエンドデータベース( .accdb ファイル)上に作成した。

・そのリンクテーブルをデータシートビューで開くと、

 通貨型( SQL Server 上では money 型)のフィールドの値が

 ( 0 である場合を除いて)空白で表示される。

とりあえず、SSMS を使用して money 型のフィールドを含むテーブルを新規作成し、

何か適当な金額が格納されたレコードを追加して、更にそのテーブルを

リンク先とするリンクテーブルを .accdb ファイル上に作成してみても

同様の現象が発生するのか否かを確認されることをお奨めします。

もし通貨型のフィールドの値が正常に表示されるのであれば「アップサイジングの

プロセスに起因する問題」ということになるでしょうし、やはり空白表示のまま

なのであれば、「実行環境またはデータベース接続の問題」ということになると思います。

なお上記の 2 つの事例については、どちらもデータ型を decimal 型に変更することで

一応問題が解消されているようですので、money から decimal(19,4) にすること

( Access 上では同じく通貨型としてマッピングされます)も検討してみて下さい。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2020-11-05T12:15:56+00:00

    色々教えて頂いてありがとうございます。

    新規のmoney型カラムでは問題無さそうなので、アップサイジングのプロセスなどに何か原因があるのかもしれません。

    decimal型への変更で対策できるのが判ったのは心強いです。

    現状のテストデータではdecimal型とし、本番データ移行の際に(余裕があれば)手順などを変えて様子を見てみます。

    ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2020-10-30T13:26:10+00:00

    > とりあえず以下のドライバーを使用したファイルデータソースを作成し、

    > リンクテーブルを作成する際にそのデータソースを指定してみて下さい。

    > > ODBC Driver 17 for SQL Server

    残念ながら変化ないです。

    > money 型における小数部分の精度は(一部の環境を除いて)最大 4 桁で、

    > SSMS のビューア上では通常 1000**.0000** のように表示されるはず。

    テーブルを選んで右クリックで「上位1000行の選択」だと、やはり小数点以下は2桁の表示です。

    「上位200行の編集」だと小数点以下は4桁です。

    該当カラムのプロパティを見てみると、「数値の小数点以下桁数」は4となっています。

    SSMS のバージョンは18.7です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません