Hello,

I'm trying to write a small application to work with a Microsoft Access
database. This application will have to insert and update records, and
I'd like to use paramstyle='named'. With INSERT commands this seems to
work, with UPDATE I get an exception I can't explain.

Example: The database table called tblHaupt contains the fields id
(integer, primary key, autoincrement), item (varchar), ort (integer,
foreign key into another table). There are more fields, but the UPDATE
command I've been trying out only uses these three.

Code to try it:
########################################################################
import adodbapi

CONNFORM = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};"
DBLOKAL = r"X:\Path\to\database\db.accdb"    # or db.mdb

UPCMD = "UPDATE tblHaupt SET item = :item, ort = :ort_id WHERE id = :h_id"
updata = {"item": "Testkeks D", "ort_id": 12, "h_id": 745}

connstr = CONNFORM.format(DBLOKAL)
conn = adodbapi.connect(connstr, paramstyle='named')
curs = conn.cursor()
curs.execute(UPCMD, updata)

Result:
Traceback (most recent call last):
  Python Shell, prompt 62, line 1
    # Used internally for debug sandbox under external interpreter
  File "C:\Program
Files\Python37\Lib\site-packages\adodbapi\adodbapi.py", line 867, in execute
    operation = self._reformat_operation(operation, parameters)  # if
'named' will set self._parameter_names
  File "C:\Program
Files\Python37\Lib\site-packages\adodbapi\adodbapi.py", line 751, in
_reformat_operation
    operation, self._parameter_names =
api.changeNamedToQmark(operation) # convert :name to ?
  File "C:\Program
Files\Python37\Lib\site-packages\adodbapi\apibase.py", line 598, in
changeNamedToQmark
    c = chunk[i]
builtins.IndexError: string index out of range
##########################################################################

What's the matter here? INSERT into the same table works. The same
UPDATE command using paramstyle 'pyformat' works. Why not UPDATE with
'named'? Is something wrong with my parameter dictionary and I don't see it?

Python version is 3.7.2 (64bit), adodbapi.__version__ = 2.6.0.6, Windows
10 Home, Version 1809 (64bit).

Thank you for explanations,
Sibylle
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to