Ошибка MS Access "ODBC - сбой вызова. Неверное значение символа для спецификации приведения (# 0)" - PullRequest
5 голосов
/ 06 октября 2009

Кто-нибудь имеет представление, что означает эта ошибка или как ее решить? Я использую Access 2003 и SQL2005. Он появляется при попытке добавить запись в конкретную подчиненную форму.

[Microsoft] [Собственный клиент SQL] Недопустимое символьное значение для спецификации приведения (# 0)

Этот отчет об ошибке MS описывает то же сообщение, но это ошибка в SQL Server 6.5, которая уже была устранена.

Решено: Видимо, причиной этого не было PK в таблице назначения, оно не имело никакого отношения к подчиненной форме или запросу из Access. Я даже не знал, что в этой базе данных есть таблицы без PK . Добавление PK к таблице назначения решило эту проблему. Странная вещь - та же строка запроса, которая вызвала ошибку при выполнении через собственный клиент SQL, выполненный через SSMS без ошибок. Надеюсь, это поможет любому, кто сталкивался с этим странным сообщением.

Ответы [ 7 ]

6 голосов
/ 06 октября 2009

Хм, я бы проверил текстовое поле по умолчанию на стороне доступа. Я также хотел бы вызвать связанную таблицу в режиме конструктора, и вы хотите проверить тип данных, который предполагает ms-доступ. Для неподдерживаемых типов данных ms-access обычно использует строку, а серверу sql может потребоваться что-то еще.

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

Под-формы в доступе чувствительны, если у вас нет столбца метки времени в таблице сервера SQL. Как уже упоминалось, проверьте типы данных PK и FK и убедитесь, что они совпадают (просто вызовите таблицы в режиме разработки в режиме ms-access - вы получите сообщение об ошибке о режиме чтения только для чтения, но просто продолжите, чтобы вы можете проверить / просмотреть, чтобы убедиться, что типы данных совпадают).

Таким образом, для дочерней таблицы вам нужен PK, FK, а также столбец метки времени (вам не нужно отображать столбец TS в форме, но он вам нужен в таблице).

Подформы в ms-access являются чувствительными и часто дают сбой, если вы не включили столбец отметки времени в таблицу sql. (доступ использует эти столбцы версии строки, чтобы определить, были ли изменены данные).

3 голосов
/ 06 октября 2009

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

Можете ли вы выполнить свое представление в интерфейсе MS SQL Studio и попытаться вставить запись?

1 голос
/ 11 ноября 2017

У меня была эта проблема с Access 2016 при попытке обновить связанную с ODBC базу данных sQL Server. Проблемой было пустое значение в поле, используемом для объединения двух таблиц. Устранение нулевого значения решило проблему

1 голос
/ 06 июля 2016

Я только что провел день, борясь с этим с помощью ADP-проекта Access, который был импортирован в новый файл ACCDB Access 2016. Сначала я подумал, что это проблема с кодом приложения, но я получал записи ключей непосредственно в таблицу. Интересно, что записи всегда записывались - казалось, что это было повторное чтение, которое вызывало ошибку. Профилирование вставки sql и ее запуск из SQL Management Studio работали без проблем.

Таблица, которая вызывала проблемы, имела первичный ключ GUID. Переключение на столбец int решило проблему.

База данных SQL также была усеяна несколькими тысячами расширенных свойств, которые я удалил перед переключением ПК. В сети было сильное предположение, что это вызывает проблемы. Источник этого процесса задокументирован здесь: Удалить все расширенные свойства SQL

1 голос
/ 21 июля 2011

Другая причина этой проблемы заключается в том, что если вы измените имя таблицы без изменения представления, то «Зависимости» этого представления по-прежнему останутся со старым именем таблицы.

Допустим, у меня есть таблица «A» и представление «Av», производное от «A», и я создал новую таблицу, которая будет называться «A», и я изменил имя «A» на «A_old», но я не выполнял ALTER VIEW, поэтому зависимости «Av» по-прежнему остаются в «A_old», но представление происходит от «A», и оно вызывает эту ошибку в Access при попытке открыть представление как связанную таблицу

0 голосов
/ 18 июня 2018

ОК. У меня просто был такой неудачный опыт, и он не имел ничего общего с PK или чем-то подобным в моей ситуации. Представление, сообщившее об этой проблеме в Access, было изначально создано в SQL Server и использовало CAST of DATETIME к простой старой DATE, чтобы избавиться от ненужной части времени. До сегодняшнего дня это представление вызывало 0 проблем в Access, но начало вызывать изжогу, как описано выше.

Итак, я сгенерировал скрипт Drop / Create для представления MSS, запустил его, заново связал представления в Access, и база данных Access была довольна результатом. Все мои так называемые таблицы в Access - это в основном просмотры через ссылки на MSS для отчетов. У меня есть только 1 таблица, которая на самом деле делает изменения. Кроме этого, я не редактирую через представления в Access.

Сообщение, как обычно, бесполезно, но в моей ситуации это было моим решением.

0 голосов
/ 06 октября 2009

Основываясь исключительно на сообщении, которое вы предоставили выше, кажется, что вы пытаетесь установить недопустимое значение для какого-либо поля или параметра и т. Д. ... В сообщении говорится, что оно пытается преобразовать значение в конкретные данные. тип, но значение недопустимо для этого типа данных ... имеет смысл?

Пожалуйста, добавьте больше деталей, чтобы мы могли помочь вам лучше.

...