From: Paul Johnston Date: Fri, 26 Oct 2007 18:17:14 +0000 (+0000) Subject: Make access dao detecting more reliable #828 X-Git-Tag: rel_0_4_1~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6568b482966f99e2df0a96d893f7b8e6f639706;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Make access dao detecting more reliable #828 --- diff --git a/CHANGES b/CHANGES index bbeaf0119d..a403602145 100644 --- a/CHANGES +++ b/CHANGES @@ -25,6 +25,9 @@ CHANGES - improved behavior of add_property() etc., fixed [ticket:831] involving synonym/deferred +- Made access dao dection more reliable [ticket:828] + + 0.4.0 ----- diff --git a/lib/sqlalchemy/databases/access.py b/lib/sqlalchemy/databases/access.py index c6e6107bfa..d57c9fa9f6 100644 --- a/lib/sqlalchemy/databases/access.py +++ b/lib/sqlalchemy/databases/access.py @@ -190,13 +190,19 @@ class AccessDialect(default.DefaultDialect): self._dtbs = None def dbapi(cls): - import win32com.client - win32com.client.gencache.EnsureModule('{00025E01-0000-0000-C000-000000000046}', 0, 5, 0) + import win32com.client, pythoncom global const, daoEngine if const is None: const = win32com.client.constants - daoEngine = win32com.client.Dispatch('DAO.DBEngine.36') + for suffix in (".36", ".35", ".30"): + try: + daoEngine = win32com.client.gencache.EnsureDispatch("DAO.DBEngine" + suffix) + break + except pythoncom.com_error: + pass + else: + raise exceptions.InvalidRequestError("Can't find a DB engine. Check http://support.microsoft.com/kb/239114 for details.") import pyodbc as module return module