Краткая версия: когда я пытаюсь использовать функцию DatePart Access через ODBC, ее невозможно разрешить.
Более длинная версия:
У меня есть запрос Microsoft Access, который возвращает строки с отметкой времени и оценкой. Я хочу отсортировать его по дню, а затем по счету - по сути, таблица рекордов за день.
Из-за отсутствия лучшей функции я использовал функцию DatePart
для извлечения каждого года, месяца и дня из временной метки, а затем ORDER BY
их, а затем Score.
В Microsoft Access запрос работает прекрасно.
Тем не менее, когда я использую pyodbc
для доступа к тому же запросу, драйвер ODBC ставит функцию DatePart в тупик и считает, что это имя отсутствующего параметра.
Что меня поразило, так это то, что даже если я скрыл функцию DatePart, создав новый запрос HighScore, а затем SELECT * FROM HighScore
, он все равно жаловался, что не может найти параметр. По-видимому, SQL запроса разрешается довольно поздно.
Мой вопрос:
- Как разрешить функцию DatePart в SQL, чтобы Access мог ее запустить, или
- Каков правильный способ сортировки по дневной части временной метки через ODBC?
Добавлена дополнительная информация:
Кажется излишним, но вот код:
import pyodbc
access_db_path = r"<ellided>"
connection_string = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+access_db_path
connection = pyodbc.connect(connection_string, autocommit = True)
print "First query"
connection.cursor().execute('SELECT ScoreTime FROM SplitExtendedP1')
print "Worked"
print "Second query"
print connection.cursor().execute('SELECT DatePart("yyyy",ScoreTime) FROM SplitExtendedP1')
print "Doesn't get here."
Вот результаты:
First query
Worked
Second query
Traceback (most recent call last):
File "<ellided>.py", line 16, in <module>
print connection.cursor().execute('SELECT DatePart("yyyy", ScoreTime) FROM SplitExtendedP1')
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')