Форум сайта python.su
Система - Win, Python3.1, pywin32 2.14. Access 2010.
База - accdb файл (пров. Microsoft.ACE.OLEDB.12.0)
Проблема - если в ЗНАЧЕНИИ поля в базе попадаются скобки , то чтение рекордсета выкидывает с ошибкой драйвера аксесса “Invalid Pattern String”. Запрос простейший - select * from xxx where number = yyy.
Как только вручную убираю скобки из поля - запрос проходит без ошибок.
Запись таких полей работает (данные заносит похожий питоновский скрипт на этой же машине, через RecordSet, не через инсерты). В записи проблем никогда не возникало ни с чем.
Чтение полей со скобками из других баз (sqlite, mysql) срабатывает. Не проходит запрос именно из аксесса.
Посоветуйте, как заставить его не воспринимать скобки как служебные символы (что, как я подозреваю, он делает). Может, какой-нить параметр при создании соединения?
Что не надо советовать (как я подозреваю, сработает, но потребует прилично времени и усилий) -
1. перейти на другую бд (мне больше нравится sqlite, но скрипт давний и довольно большой, переписывать не хочется да и возможность прямой правки в аксессе иногда полезна)
2. при занесении преобразовывать скобки (т.е. в бд хранить адаптированные значения, а не реальные, при каждом чтении/записи декодировать)
Как предположение - может, сейчас есть уже лучший вариант для работы с АДО чем pywin?
Офлайн
Погуглил тут. Вот такая же проблема http://www.delphigroups.info/2/9/223820.html. Решается экранированием открывающей скобки “[[”. Только у них скобки в выражении поиска, а у вас при чтении. Может тогда и в базе экранировать?
Офлайн
PooHНу как бы это подходит под мой пункт 2, что не надо советовать. В базе нужны чистые значения.
Погуглил тут. Вот такая же проблема http://www.delphigroups.info/2/9/223820.html. Решается экранированием открывающей скобки "[[". Только у них скобки в выражении поиска, а у вас при чтении. Может тогда и в базе экранировать?
Отредактировано (Сен. 9, 2010 13:52:54)
Офлайн