Несоответствие типа в выражении access что означает
Перейти к содержимому

Несоответствие типа в выражении access что означает

  • автор:

Получено сообщение о несоответствии типов данных

Эта ошибка указывает на то, что Access не может связать входное значение с ожидаемым для него типом данных. Например, если передать приложению Access текстовую строку вместо числа, возникнет ошибка несоответствия типов данных.

Для исправления этой проблемы можно сделать следующее:

  • Если вы изменили значение по умолчанию для поля в таблице и у вас появляется сообщение о несоответствии типов данных при попытке добавить новые записи, откройте таблицу в режиме конструктора и убедитесь в том, что выражение, заданное в качестве значения по умолчанию для поля, возвращает данные того же типа, что и у поля. Например, если тип поля — Число, не заключайте выражение для значения по умолчанию в кавычки (например, «1» возвращает текстовую строку, а не число).
  • Убедитесь, что условия столбца соответствует тип данных базового поля столбца. Если указать текстовые условия для числового поля или поля даты и времени, вы получите эту ошибку. Например, если ввести условия «50» или «13.12.12», возвращается сообщение об ошибке, так как Access интерпретирует значения в кавычках как текст, а не числа. Поэтому обязательно удалите эти кавычки. Вы узнаете, когда вводите допустимую дату в поле Условия, так как вокруг даты будут отображаться знаки # , например 13.12#.

Конфликт типов данных также может возникать в следующих ситуациях:

  • Вы задаете условие для поле подстановки, и условие использует значения, показанные в списке подстановок (например, имя), вместо связанных с ними значений внешний ключ (например, ИД). Так как значения внешнего ключа фактически являются значениями, сохраненными в базовой таблице, их следует использовать при вводе условия для поля.
  • Вы ввели знак доллара ($) в условии, заданном в поле валюты. Удалите знак доллара и просмотрите результаты. Если заданное числовое условие не является числом, оно окружено кавычками. При вводе знака $ приложение Access автоматически заключает строку в кавычки.
  • Убедитесь, что тип данных каждой пары связанных полей в запросе одинаков. Если это не так, измените тип данных одного из связанных полей, чтобы он соответствовал типу данных другого поля, иначе возникнет ошибка несоответствия.

Несоответствие типов (ошибка 13)

Visual Basic может преобразовать и привести большое число значений для присвоений типа данных, которые не были возможны в предыдущих версиях.

Тем не менее, эта ошибка может по-прежнему повторяться и имеет следующие причины и решения:

  • Причина:Переменная или свойство имеют неверный тип. Например, переменная целого типа, не может принимать строковые значения, которые не распознаются как целые числа.

Решение: Попробуйте выполнять задания только между совместимыми типами данных. Например, значение типа Integer всегда можно присвоить типу Long, значение Single — типу Double, а любой тип (за исключением пользовательского) — типу Variant.

  • Причина: В процедуру, требующую отдельное свойство или значение, передан объект.

Решение: Передайте отдельное свойство или вызовите метод, соответствующий объекту.

    Причина: Используется имя модуля или проекта, где требуется выражение, например:

 Debug.Print MyModule 

Решение: Укажите выражение, которое будет отображаться.

    Причина: Попытка использовать традиционный механизм обработки ошибок Basic со значениями Variant с подтипом Error (10, vbError), например:

 Error CVErr(n) 

Решение: Чтобы воссоздать ошибку, необходимо сопоставить ее с пользовательской или внутренней ошибкой Visual Basic, после чего снова создать ее.

    Причина: Значение CVErr не может быть преобразовано в тип Date. Например:

 MyVar = CDate(CVErr(9)) 

Решение: Используйте оператор Select Case или аналогичную конструкцию, чтобы сопоставить возвращаемое значение CVErr с соответствующим значением.

  • Причина: Во время выполнения эта ошибка указывает на то, что переменная Variant, используемая в выражении, имеет неверный подтип, либо переменная Variant, содержащая массив, используется в операторе Print #.

Решение: Для печати массивов используйте цикл в котором каждый элемент отображается отдельно.

Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Delphi+Access: Несоответствие типов данных в выражении условия отбора.

В пятой строчке при клике по ячейке вылетает ошибка «Несоответствие типов данных в выражении условия отбора». Помогите исправить.

Отслеживать
задан 3 фев 2013 в 14:34
Сергей Иванов Сергей Иванов
3 1 1 серебряный знак 2 2 бронзовых знака
@Сергей , опишите структуру таблицы CARS.
3 фев 2013 в 14:39
Поле Тип id Счетчик number Текстовой driver Текстовой route Текстовой status Текстовой
3 фев 2013 в 14:44

По какому полю выбираете, какое значение Edit1.Text вводите? Какой запрос получается, если подебажить?

3 фев 2013 в 14:47

Как видите поле выборки выбирается налету, в едит вводится любое значение 1,2,3 итд. При: Label1.Caption := ‘SELECT * FROM cars WHERE ‘+ Column.FieldName + ‘=’+Edit1.Text; получается вполне корректный запрос — SELECT * FROM cars WHERE number=3

Как сделать правиль но Запрос из Формы в Access?

Не могу сделать запрос из формы. В форме создал кнопку с макросом на открытие запроса. Макрос сделал на конструкторе. Когда я нажимаю на эту кнопку ругается что «несоответствие типов данных в выражении условия отбора».
Вот SQl код запроса:
SELECT *
FROM auto
WHERE (([AUTO]![дата_покупки]='[Формы]![AUTO]![Поле50]’));

  • Вопрос задан более трёх лет назад
  • 1764 просмотра

Комментировать
Решения вопроса 1
Артём Каретников @art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.

Осталось понять — а типы-то соответствуют? 🙂 Запрос можно упростить, русские имена использовать не надо, поле50 — стоит переименовать на значимое и надо проверить тип поля50 — что там сейчас, дата?

Если дата, то возможно, это стандартные грабли: акцесс может использовать хранение даты в формате американском, когда первый месяц, потом день и год. А у тебя скорее всего дата вбита в русском.
Тогда, как легко понять, запрос будет работать ровно до тех пор, пока у тебя первое число не больше 12. Проверь, если при дате 12-05-2016 отработает, а при 15-05-2016 — нет, это оно. Исправляется командой Format.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *