在 Access 中链接外部表时,如何将数据类型默认值从 Decimal 更改为 Double?

How to change data type default from Decimal to Double when linking external tables in Access?

我在 Access 中使用带有 linked 表的 PostgreSQL 后端。使用向导 link 到 linked 表时,出现错误:

Scaling of decimal value resulted in data truncation

对于 Access 默认选择的数字数据类型,这似乎是错误的比例:linked 的 Postgresql 数据类型 Numeric 没有定义精度或比例,并且是被 link 编辑为 Decimal,默认精度为 28,比例为 6。

我怎样才能以 Double 的形式访问 link 它?

我在这里 MS Access linked tables automatically long integers 看到自我回答是:

Figured it out (and I feel dumb): When linking tables you can choose the desired format for each field when going through the linked table wizard steps.

但是,在 linking 期间,我在 Access 中看不到选择所需格式的选项。

如果在 Access 中创建链接 table 的 ODBC 时有类似 "default" 的数据类型,则该类型将为 Text(255)。也就是说,如果 ODBC 驱动程序报告的列具有 Access 不支持的数据类型(例如 SQL 服务器中的 TIME),则 Access 会将其作为 Text(255) 列包含在链接中table.

在这种情况下,对于 PostgreSQL table

CREATE TABLE public.numeric_test_table
(
  id integer NOT NULL,
  text_col character varying(50),
  numeric_col numeric,
  CONSTRAINT numeric_test_table_pk PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

PostgreSQL ODBC 驱动程序实际上将 numeric 列报告为 numeric(28,6),这已通过从 C#

调用 OdbcConnection#GetSchema("columns") 确认

这就是 Access 用作其链接 table 的列类型的内容。只有当 Access 去检索实际数据时,PostgreSQL ODBC 驱动程序发回的值不会 "fit" 在链接 table.[=25= 的相应列中]

所以不,几乎可以肯定没有总体选项告诉 Access 将所有 numeric(即 Decimal)列视为 Double。 "best" 解决方案是更改 PostgreSQL table 定义以明确说明精度和比例,如 PostgreSQL documentation:

中所建议

If you're concerned about portability, always specify the precision and scale [of a numeric column] explicitly.

如果修改 PostgreSQL 数据库不可行,那么另一种选择是在 Access 中使用传递查询显式地将列转换为 Double ...

SELECT id, text_col, numeric_col::double precision FROM public.numeric_test_table

...请记住,传递查询总是 return 只读记录集。