MS Access выдает ошибку при попытке использовать запрос с помощью SELECT TOP 0 * - PullRequest
1 голос
/ 12 марта 2012

Я хотел бы получить четкий ответ, почему я не могу обработать запрос, подобный этому, с OleDb

"select top 0 * FROM [APPELLATION$] WHERE (((([libel_app] LIKE '%g') OR ([region] LIKE '%g')) OR ([couleur] LIKE '%g')))"

Я могу с SQL, но когда я пытаюсь извлечь некоторые данные из файла Excel, он выдаетошибка, которая говорит мне, что я использую какое-то ограниченное слово или у меня есть некоторые символы, которые ограничены.Я прочитал список запрещенных слов и символов и не нашел ни одного из них в своем запросе.Моя программа дает мне SQL-запрос, я не хотел бы, чтобы в конечном итоге выяснилось, является ли число TOP N нулевым или нет, но если у меня нет решения ...

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

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

См. Принятый ответ на Существует ли альтернатива ANSI SQL для ключевого слова MYSQL LIMIT? для некоторых разновидностей. Excel там нет в списке, я уверен, что он использует тот же синтаксис, что и MsAccess, но я не удивлен, что он действует совершенно иначе при таком странном запросе. Как уже упоминал Пэдди, этот запрос не имеет никакого смысла, и его следует избегать.

Исправить это путем сопоставления «SELECT TOP 0» уродливо и сделает поддержание программного обеспечения чистым адом (бывало там :()

0 голосов
/ 12 марта 2012

N в TOP N должно иметь числовое значение 1 (округлено по Банкеру) или больше.

например

SELECT TOP 0.5 * FROM MyTable;  -- rounds to zero = error

SELECT TOP 0.6 * FROM MyTable;  -- rounds to 1 = no problem
...