Hello all. I am the present maintainer of adodbapi, a pure python module which uses ADO-DB to access SQL databases. (see adodbapi.sourceforge.net) It has been my stated goal for some time to port the package to Iron Python, since it is fully DB-API_2.0 compliant, and the existing SQL access library samples for ipy are relatively light weight.
The present implementation works only in CPython and depends on pywin32 to make COM calls to access ADO. I originally thought that I would replace all of the COM interface with ADO.NET calls, but someone suggested that it would be less rewriting to call COM from ipy, too. <comments about the wisdom of this are welcome.> I could use some help with my present snag. In the snippet below (which works in CPython) the Properties attribute of the dispatch object is completely different between the two implementations. I notice, when I do a dir(adoConn), that ipy shows two different attributes called "Properties" , so perhaps the other one has the interface I want, if I knew how to get at it. I didn't write this code so I don't know how or why it works, but it is used to see whether a particular database supports rollback and commit. What alternate code could I use to aviod calling adoConn.Properties(indx) as a method? #begin snippet ......... try: import win32com.client def Dispatch(dispatch): return win32com.client.Dispatch(dispatch) win32 = True except ImportError: #perhaps running on IronPython from System import Activator, Type def Dispatch(dispatch): type = Type.GetTypeFromProgID(dispatch) return Activator.CreateInstance(type) win32 = False #implies IronPython def connect(connstr, timeout=30): "Connection string as in the ADO documentation, SQL timeout in seconds" conn=Dispatch('ADODB.Connection') conn.CommandTimeout=timeout conn.ConnectionString=connstr conn.Open() return Connection(conn) class Connection: def __init__(self,adoConn): self.adoConn=adoConn self.supportsTransactions=False for indx in range(adoConn.Properties.Count): ### iron py errors on the next line if adoConn.Properties(indx).Name == 'Transaction DDL' \ and adoConn.Properties(indx).Value != 0: self.supportsTransactions=True self.adoConn.CursorLocation = defaultCursorLocation if self.supportsTransactions: self.adoConn.IsolationLevel=defaultIsolationLevel self.adoConn.BeginTrans() #Disables autocommit self.messages=[] #end snippet ...... My resulting stack trace ends with: File "C:\Program Files\IronPython 2.0 Beta4\lib\site-packages\adodbapi\adodbapi.py", line 264, in connect File "C:\Program Files\IronPython 2.0 Beta4\lib\site-packages\adodbapi\adodbapi.py", line 317, in __init__ TypeError: __ComObject is not callable --- Any suggestions are welcome. -- Vernon Cole
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com