Несоответствие типа данных в обходе выражения критерия

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

Однако, когда я запускаю JET в VB.NET, он говорит: «Несоответствие типа данных в выражении критериев».

Есть ли способ для JET вести себя как Access (т.е. по-прежнему запускать запрос и добавлять строки)?

Я знаю, что могу преобразовать поле в правильный тип в VB.NET и выполнить цикл, но у меня нет на это времени, так как мне нужно делать это для многих разных запросов.

Спасибо за любую помощь


person waqasahmed    schedule 13.03.2011    source источник
comment
Какой интерфейс вы используете для выполнения вашего SQL? А как узнать, что результаты в Access правильные? Access допускает несогласованные обновления, поэтому вы никогда не узнаете, какие проблемы были отброшены. Я рекомендую ИСКЛЮЧИТЬ все, что вызывает ошибки, и тогда у вас не будет никаких проблем.   -  person David-W-Fenton    schedule 15.03.2011
comment
Да, обычно я бы так и поступил: убедиться, что данные верны при вставке в базу данных. Однако я не сделал эту базу данных, и в ней много таблиц. Я не хочу вносить какие-либо изменения в структуру базы данных. Как упоминалось в OP, я использую JET для выполнения SQL. И я знаю, что результаты Access верны, потому что он делает вставку, тогда как через JET этого не происходит.   -  person waqasahmed    schedule 18.03.2011
comment
Вам не нужно изменять данные, чтобы избежать проблемы — просто напишите оператор SQL, чтобы избавиться от любой проблемы, вызывающей ошибки.   -  person David-W-Fenton    schedule 19.03.2011
comment
Доступ разрешает такие вещи, как значения NULL, и обрезает текст, если длина больше (после подсказок). Через JET это приводит к ошибкам. Как я уже сказал, есть буквально сотни запросов и таблиц, и было бы очень сложно просмотреть каждый из них и исправить. Я хочу сохранить существующую структуру базы данных, но сделать это через JET/VB.NET, а не через Access.   -  person waqasahmed    schedule 20.03.2011
comment
Я не думаю, что вы очень хорошо объяснили ситуацию. На данный момент мне нечего предложить, так как вы не прояснили ситуацию. Я не могу себе представить ситуацию, когда SQL не выдает приглашение в Access, а затем разрешает несогласованные обновления. ЭТО ПЛОХАЯ ВЕЩЬ, так как невозможно предсказать, каковы будут результаты. Тот факт, что предстоит проделать большую работу, ничуть не меняет того факта, что вы можете написать свой SQL, чтобы избежать ошибок. Если вы собираетесь выполнять его из-за пределов Access, у вас действительно нет выбора.   -  person David-W-Fenton    schedule 24.03.2011


Ответы (1)


Я бы начал смотреть на поля, для которых у вас есть критерии, а затем сделал оператор select в запросе, чтобы нули были изменены на приемлемый тип (попробуйте IsNull или NZ) или выполнили производную таблицу (подзапрос), которая устраняет нули до обработки критериев.

Например

SELECT TextField, DateField, OtherField 
FROM Table 
WHERE TextField='something' And Datefield=#2/11/2011#

Вот производное табличное решение:

SELECT TextField, DateField, OtherField
FROM ( 
    SELECT TextField, DateField, OtherField 
    FROM Table 
    WHERE TextField Is Not Null And Datefield Is Not Null
     ) AS aTable
WHERE TextField='something' And Datefield=#2/11/2011#

Изначально вы могли бы сказать:

SELECT nz(Table.TextField,'') AS TextField...

надеюсь, это поможет

person Praesagus    schedule 20.04.2011