Всем, кто может помочь, заранее спасибо.
Я использую 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
Драйвер] Дополнительная функция не реализована (106) (SQLBindParameter) ')
Я читал, что это может быть связано с тем, что у pyodbc есть проблемы с передачей целочисленных значений, поэтому я попытался преобразовать в число с плавающей точкой, поскольку это, похоже, сработало для некоторых людей. Поэтому мой код становится:
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 января.