Как запросить столбец MS Access, имя которого имеет знак вопроса, через ODBC? - PullRequest
2 голосов
/ 11 сентября 2009

У меня есть база данных MS Access (Access 2002, для записи). В нем есть столбец, имя которого содержит вопросительный знак, например, таблица «Users» со столбцами «uid» и «isAdmin?». Мне нужно подключиться к этой базе данных через ODBC и запросить этот столбец в следующих строках:

select [uid], [isAdmin?] from Users order by [isAdmin?];

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

Некоторые ограничения:

  • Я не могу легко изменить имена столбцов.
  • Я не могу легко использовать что-то другое, кроме ODBC, для подключения, хотя, возможно, это мой запасной план, если я не могу заставить ODBC вести себя.
  • Я не могу просто сказать select * from Users - он по-прежнему задыхается от порядка (что сложно в реальном запросе, поэтому действительно нужно делать в SQL).

Вещи, которые я пробовал, которые не работают:

  • select [uid], '[isAdmin?]' from Users; - второй столбец становится строкой "[isAdmin?]"
  • select [uid], ['isAdmin?'] from Users;
  • select [uid], [isAdmin\?] from Users;
  • select [uid], [isAdmin\?] {escape '\'} from Users; - и никакой другой escape-символ не работает.
  • select [uid], { [isAdmin?] } from Users;

РЕДАКТИРОВАТЬ : Я должен был уточнить, я не могу легко изменить базу данных вообще, кроме как через ODBC (или ADO или DAO или что-то еще, но это будет немного сложно, и в этот момент я могу просто выполнить запрос через них).

Ответы [ 5 ]

3 голосов
/ 12 сентября 2009

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

Есть ли у вас доступ на запись к структуре MDB? И есть ли у вас копия автономного доступа?

Если это так, создайте новый пустой файл MDB (вы удалите его, когда закончите). Создайте связанную таблицу из нового MDB и используйте ее для записи сохраненного QueryDef, который создает псевдоним поля. Затем используйте DoCmd.TransferDatabase, чтобы экспортировать его из вашего временного MDB в настоящий.

Это предполагает, что у вас есть доступ файловой системы SMB к MDB, к которому вы обращаетесь из своего приложения через ODBC.

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

2 голосов
/ 11 сентября 2009

Другой вариант - создать представление таблицы Users и переименовать столбец с ошибками в представлении.

2 голосов
/ 11 сентября 2009

Я бы использовал , пропустив запросы и переименовав поля в запросе. Создайте свой проход через что-то вроде

 select [uid], [isAdmin?] AS ISADMIN from Users order by [isAdmin?]

(или что-то еще в нативном SQL),
затем в Access просто ссылка на этот запрос

select Uid, ISADMIN from qpstUsers
1 голос
/ 20 июня 2016

Я столкнулся с такими же проблемами. (с использованием драйвера MS Access от SQLdeveloper).

ACCESS SQL не нравится "" ", как в НЕ НРАВИТСЯ "* val *" тогда я заменил на НЕ НРАВИТСЯ '* val *'

0 голосов
/ 02 ноября 2009

Попробуйте это "IsAdmin?"

Двойные кавычки сработали в моей ситуации, когда кто-то назвал столбец: Lead #

Мое предложение where стало тогда, где "Lead #" = '123'


Я забираю это обратно ...

где ([Lead #] = 123)

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

...