Robert Brewer wrote:
Chris Curvey wrote:
I'm trying to get to an MS-SQL datbase via the win32com.client library and the ADO library, but I seem to lose the context of the connection whenever I execute a statement. For example, the first "assert" below is OK, but the second one is not. I'm also losing the value of @@identity.
Is this a known issue? I was hoping for a DB-API 2.0 interface to MS-SQL, but I can't get my clients to pay for an mxODBC license.
import unittest from win32com.client import Dispatch
class TransactionTest(unittest.TestCase): def testConnection(self): conn = Dispatch('ADODB.Connection') conn.Open("Driver={SQL Server};Server=mxdev;UID=chris_dev;PWD=chris;DATABASE=tempdb")
# start a transaction conn.execute("begin tran")
result = conn.execute("select @@trancount")
while not result.EOF: # this test passes assert result.Fields.Item(0).Value == 1 result.MoveNext()
result = conn.execute("select @@trancount") while not result.EOF: #this test fails assert result.Fields.Item(0).Value == 1 result.MoveNext()
##############################################################
##########
if __name__ == "__main__":
unittest.main()
Two ideas:
1. Have you tried result.Close() before the second conn.execute()?
2. I use a new ADODB.Recordset object, which works for me:
res = win32com.client.Dispatch(r'ADODB.Recordset') res.Open(query, conn, adOpenForwardOnly, adLockReadOnly) data = [] if not(res.BOF and res.EOF): data = res.GetRows() # Convert cols x rows -> rows x cols data = zip(*data) res.Close()
Hope that helps!
Robert Brewer
MIS
Amor Ministries
[EMAIL PROTECTED]
Yup, adding "result.Close()" made it all better! thanks!
_______________________________________________ DB-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/db-sig
