次の方法で共有

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-10-30T08:35:27+00:00

    > 出来上がったデータソースファイルを使用しているものと比較したところ、

    > 「SQL Server」を指定した様です。

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

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

    > ODBC Driver 17 for SQL Server

    また、今のところ気になるのは以下の点です。

    > SSMSでテーブルを見てみると、小数点以下2桁までありますが

    > 1000.00 の様な値が確認できます。

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

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

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

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

    お時間が合わない様なので、プロバイダについて当方で分かる範囲で調べてみました。

    的外れでしたらご容赦ください。

    Access の「外部データ」タブから「新しいデータソース」「データベースから」「SQL Server から」と選び、

    「外部データの取り込み - ODBCデータベース」というダイアログで、「リンク テーブルを作成してソース データにリンクする」を選びます。

    「データソースの選択」ダイアログで「新規作成」を選び、「データソースの新規作成」ダイアログで SQL Sererに関係しそうなのは以下の3点でした。

    ODBC Driver 17 for SQL Server

    SQL Server

    SQL Server Native Client 11.0

    3つともやってみましたが、「SQL Server Native Client 11.0」は何かが足らない様で接続できませんでしたが、他は接続に成功しました。

    出来上がったデータソースファイルを使用しているものと比較したところ、「SQL Server」を指定した様です。

    Microsoft SQL Server のドライバー履歴

    に依れば、

    ODBC

    SQL Server Native ClientMicrosoft ODBC Driver for SQL ServerOLE DB

    etc.

    とありますし、外部データベースにリンクする操作上では OLE ドライバについてはどこにも表れず、ダイアログの説明でも「ODBC」とあるので、ODBCで接続しているのではないかと思います。

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

    0 件のコメント コメントはありません
  3. Anonymous
    2020-10-27T06:44:57+00:00

    それはどこで指定するものでしょうか?

    リンクテーブルマネージャで「追加」から始めていったらあまり考えずにリンクそのものは出来てしまったので…

    また、現状はどこで調べるのでしょうか?

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

    0 件のコメント コメントはありません
  4. Anonymous
    2020-10-27T01:30:23+00:00

    どのプロバイダー( MSOLEDBSQL / SNAC / SQLOLEDB )を使用して

    SQL Server データベースに接続されているのでしょうか。

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

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