Всем, кто может помочь, заранее спасибо.
Я использую 64-битную Windows 10, 64-битную офисную и 64-битную версию Python 3.7.2.
Используя pyodbc, я пытаюсь выполнить оператор Select, например:
"SELECT * FROM EconVars WHERE Year(ValueDate) = 1999"
Для этого мой код выглядит следующим образом:
existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = (1999,)
cursor.execute(existquery,params)
Когда я запускаю это, я получаю следующую ошибку pyodbc.Error: ('HYC00', '[HYC00] [Microsoft] [ODBC Microsoft Access Driver] Дополнительная функция не реализована (106) (SQLBindParameter)')
Я читал, что это может быть связано с тем, что pyodbc имеет проблемы с передачей целочисленных значений, поэтому я попытался преобразовать в float, так как это, похоже, сработало для некоторых людей. Поэтому мой код становится:
existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = (float(1999),)
cursor.execute(existquery,params)
При запуске этого кода программа просто останавливается на строке cursor.execute без ошибок.
Я также пробовал использовать вместо этого модуль pypyodbc
и при запуске того же кода, приведенного выше
existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = [1999,]
cursor.execute(existquery,params)
Я получаю следующую ошибку
OSError: exception: access violation reading 0x0000000000000000
Я подтвердил, что с подключением курсора все в порядке, потому что тот же курсор успешно выполняет команду INSERT.
Если у кого-то есть идеи, они были бы очень признательны.
Обновление 1
Спасибо за ответ, я понизил версию до 4.0.24, однако ошибка все еще остается, код ниже все равно выйдет из строя без ошибок
existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = (1999,)
cursor.execute(existquery,params)
existData = cursor.fetchall()
Кроме того, передача строки не работает
existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = ('1999',)
cursor.execute(existquery,params)
existData = cursor.fetchall()
Однако у меня он работает, передав строковую дату, например
existquery = """SELECT * FROM EconVars WHERE ValueDate = ?"""
params = ('#01/04/1999#',)
cursor.execute(existquery,params)
existData = cursor.fetchall()
Однако очевидно, что это не помогает при поиске точек данных за определенный год. Это также приводит к проблемам с датой в Великобритании и США, поскольку указанная выше дата фактически интерпретируется как 4 января.
existquery = "SELECT * FROM EconVars WHERE Year(ValueDate) = " + str(1999)
- person shahkalpeshp   schedule 16.01.2019pyodbc.version
? - person Gord Thompson   schedule 16.01.2019existquery = """SELECT * FROM EconVars WHERE ValueDate = #01/05/1999#"""
не остановится наcursor.execute(existquery)
cursor.fetchall
, однако курсор содержит -1 строку, что неверно. Является ли счетчик строк правильным способом определить, есть ли у курсора записи? - person user78913   schedule 16.01.2019