在 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 只读记录集。
我在 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 只读记录集。