Arhn - архитектура программирования

Как изменить тип данных по умолчанию с десятичного на двойной при связывании внешних таблиц в Access?

Я использую серверную часть PostgreSQL со связанными таблицами в Access. При использовании мастера для ссылки на связанные таблицы я получаю ошибки:

Масштабирование десятичного значения привело к усечению данных

Похоже, что это неправильный масштаб для числовых типов данных, выбранных Access по умолчанию: связываемый тип данных Postgresql — Numeric без определенной точности или масштаба, и по умолчанию связывается как Decimal с точностью 28 и масштабом 6.

Как я могу получить доступ, чтобы связать его как Double?

Я вижу здесь связанные таблицы MS Access автоматически длинные целые числа, ответ был:

Выяснил это (и я чувствую себя глупо): при связывании таблиц вы можете выбрать желаемый формат для каждого поля при выполнении шагов мастера связанных таблиц.

Но я не вижу возможности в Access выбрать нужный формат при связывании.


  • Вы говорите об связывании или импорте таблиц? Это две довольно разные операции. 05.12.2016
  • Я имел в виду ссылку: я отредактировал вопрос. 05.12.2016
  • Ах хорошо. Все, что я могу сказать, это то, что действительно нет возможности выбирать типы данных при связывании таблиц. Другой ответ, должно быть, говорил об импорте. В основном Access пытается найти наилучшее соответствие типу данных, о котором сообщает драйвер ODBC. 05.12.2016
  • Проверьте это: postgresql.org/message-id/ 05.12.2016
  • Да, я читал это, но, похоже, это не дает решения, как исправить. 05.12.2016
  • Что ж, предлагается выполнить ALTER TABLE, чтобы установить для столбца numeric указанную точность (например, numeric(28,14)) - вы пробовали это? 05.12.2016
  • У меня есть несколько столбцов в нескольких таблицах с несколькими вариантами точности и масштаба, которые необходимо изменить, поэтому мне нужно решение, которое не требует изменения типа данных базы данных PostgreSQL. Мне просто нужен доступ, чтобы не использовать Decimal, а вместо этого использовать Double. 05.12.2016

Ответы:


1

Если есть что-то вроде типа данных «по умолчанию» при создании связанной таблицы ODBC в Access, этот тип будет Text(255). То есть, если драйвер ODBC сообщает о столбце с типом данных, который Access не поддерживает (например, TIME в SQL Server), Access включит его как столбец Text(255) в связанную таблицу.

В этом случае для таблицы PostgreSQL

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
);

драйвер ODBC PostgreSQL фактически сообщает, что столбец numeric имеет значение numeric(28,6), что подтверждается вызовом OdbcConnection#GetSchema("columns") из C#.

ПолучитьСхему.png

так что это то, что Access использует в качестве типа столбца для своей связанной таблицы. Только когда Access переходит к извлечению фактических данных, драйвер ODBC PostgreSQL отправляет обратно значения, которые «не подходят» для соответствующего столбца связанной таблицы.

Так что нет, почти наверняка нет общей возможности указать Access обрабатывать все столбцы numeric (т. е. Decimal) как Double. «Лучшим» решением было бы изменить определения таблиц PostgreSQL, чтобы явно указать точность и масштаб, как это предлагается в документе документация PostgreSQL:

Если вас беспокоит переносимость, всегда явно указывайте точность и масштаб [числового столбца].

Если изменение базы данных PostgreSQL невозможно, другим вариантом может быть использование сквозного запроса в Access для явного преобразования столбца в Double...

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

... имея в виду, что сквозные запросы всегда возвращают наборы записей, доступные только для чтения.

05.12.2016
  • Я провел тест на одном столбце, используя ALTER TABLE t1 ALTER COLUMN l TYPE numeric(20, 15) USING (l::numeric(20, 15));. Согласно [postgresql.org/docs/9.1/static/datatype- numeric.html] Числовые значения физически хранятся без каких-либо дополнительных нулей в начале или в конце. Таким образом, заявленная точность и масштаб столбца являются максимальными, а не фиксированными выделениями. - но для моих измененных значений есть конечные нули (как показано в PG Admin). Любая причина для этого? 07.12.2016
  • Нули в конце уже обсуждались ранее, ссылка: здесь (а также здесь). Мне кажется, что может быть некоторая путаница в том, как значения физически хранятся и как они отображаются, т. е. PostgreSQL может хранить значение без нулей в конце, но по умолчанию они отображаются с нулями в конце (в соответствии с заданным масштабом) для согласованности между различными строками. 07.12.2016
  • путаница в том, как значения физически хранятся по сравнению с тем, как они отображаются - спасибо, что прояснили это 07.12.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..