Использование Python s win32com вместе с Foxpro (поставщик VFP OLEDB) - PullRequest
0 голосов
/ 10 января 2020

В настоящее время я пытаюсь установить соединение с базой данных foxpro с помощью модуля python win32com. Код Python в настоящее время выглядит следующим образом:

    import win32com.client
    conn = win32com.client.Dispatch('ADODB.Connection')
    dsn = 'Provider=vfpoledb;Data Source=C:\MyDbFolder\MyDbContainer.dbc;'
    conn.Open(dsn)
    print('ok')

Однако он говорит, что не может найти провайдера; Несмотря на это, я успешно установил последнюю версию Microsoft OLE DB Provider для Visual FoxPro 9.0 с веб-сайта Microsoft.

'Поставщик не найден. Возможно, он установлен неправильно. '

Я пробовал это как с python 32-битной, так и с 64-битной версией на разных p c. Если вы используете 32 бит python, это работает. Однако, если нужно использовать 64-битную python, кажется, что это тоже нужно.

Кто-нибудь получил эту работу без проблем?

1 Ответ

0 голосов
/ 10 января 2020

Одним из возможных решений проблемы отсутствия 64-разрядного драйвера VFPOLEDB может быть настройка базы данных VFP в качестве связанного сервера в 32-разрядном экземпляре сервера MS SQL (Express бесплатен и должен работать). SQL Сервер 2014 представляется последней версией, для которой доступно 32-разрядное издание. Для SQL Server имеется множество 64-битных драйверов OLEDB, и они не заботятся о разрядности экземпляра.

В * 1003 есть пошаговые инструкции * Как успешно подключиться к Файлы базы данных Foxpro с использованием функции MS SQL Linked Server и ODB C? over на ServerFault

Примечание: использование данных Fox через связанный сервер строго ограничено и далеко не так эффективно, как использование Fox напрямую или через VFPOLEDB. Однако иногда ограниченный доступ лучше, чем отсутствие доступа вообще.

Запросы должны использовать SQL серверный синтаксис, и они ограничены им. Например, логические поля отображаются на тип данных bit (0 или 1), поскольку SQL Сервер не имеет понятия логических значений. Но внутри OpenQuery вы можете использовать полный синтаксис Fox. Предполагая, что связанный сервер называется FOX, а таблица StoffPZN имеет логическое поле op:

select * from FOX...StoffPZN where op = 1;  -- T-SQL rules

select * from openquery(FOX, 'sele * from StoffPZN wher op');  -- Fox rules
...