[python-win32] DispatchWithEvents

Janez Jere janez.jere at void.si
Tue Jul 29 11:08:22 EDT 2003


Hi, I still haven't solved my DispatchWithEvents problem:

Sample code, which works when conObj is created with Dispatch.
Any suggestions? bellow is error output, and complete source.

Janez
===========================
if 0:
    conObj = Dispatch('AdoDB.Connection')
else:
    conObj = DispatchWithEvents('AdoDB.Connection', AdoConnectionEventsLog)
    conObj.logFile = sys.stdout
#conObj.Open('SQLOLEDB.1;Password="";Persist Security Info=True;User
ID=sa;Initial Catalog=Northwind;Data Source=myserver')
conObj.Open(file("c:/etc/connStr.txt").read())
cmd= Dispatch("ADODB.Command")
cmd.ActiveConnection = conObj
cmd.CommandText = 'select count(*) from customers '
rs, cnt = cmd.Execute()
print 'Cust count:', rs.Fields[0].Value


Output when dispatched with events
============================
WillConnect:
OnConnectComplete
OnWillExecute: select count(*) from customers
OnExecuteComplete
Traceback (most recent call last):
  File "C:\cvs\jj\py\ado_events.py", line 38, in ?
    rs, cnt = cmd.Execute()
  File
"C:\usr\python\lib\site-packages\win32com\gen_py\EF53050B-882E-4776-B643-EDA
472E8E3F2x0x2x7.py", line 1822, in Execute
    return self._ApplyTypes_(5, 1, (9, 0), ((16396, 18), (16396, 17), (3,
49)), 'Execute', '{00000556-0000-0010-8000-00AA006D2EA4}',RecordsAffected,
Parameters, Options)
  File "C:\usr\python\lib\site-packages\win32com\client\__init__.py", line
445, in _ApplyTypes_
    return self._get_good_object_(apply(self._oleobj_.InvokeTypes, (dispid,
0, wFlags, retType, argTypes) + args), user, resultCLSID)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft
OLE DB Provider for SQL Server', 'Command text was not set for the command
object.', None, 0, -2147217908), None)

Complete code:
=============================================================
from  win32com.client import Dispatch, gencache, DispatchWithEvents
import sys

adoTLB=gencache.EnsureModule('{EF53050B-882E-4776-B643-EDA472E8E3F2}', 0, 2,
7)
adoRS=gencache.EnsureModule('{00000300-0000-0010-8000-00AA006D2EA4}', 0, 2,
7)

class AdoConnectionEventsLog(object):
    def OnConnectComplete(self, pError, adStatus, pConnection):
        self.logFile.write(u'OnConnectComplete\n')
    def OnCommitTransComplete(self, pError, adStatus, pConnection):
        self.logFile.write(u'OnCommitTransComplete\n')
    def OnInfoMessage(self, pError, adStatus, pConnection):
        self.logFile.write(u'OnInfoMessage\n')
    def OnDisconnect(self, adStatus, pConnection):
        self.logFile.write(u'OnDisconnect\n')
    def OnBeginTransComplete(self, TransactionLevel, pError, adStatus,
pConnection):
        self.logFile.write(u'OnBeginTransComplete\n')
    def OnRollbackTransComplete(self, pError, adStatus, pConnection):
        self.logFile.write(u'OnRollbackTransComplete\n')
    def OnExecuteComplete(self, RecordsAffected, pError, adStatus, pCommand,
pRecordset, pConnection):
        self.logFile.write(u'OnExecuteComplete\n')
    def OnWillExecute(self, Source, CursorType, LockType, Options, adStatus,
pCommand, pRecordset, pConnection):
        self.logFile.write(u'OnWillExecute: %s\n' % Source)
    def OnWillConnect(self, ConnectionString, UserID, Password, Options,
adStatus, pConnection):
        #self.logFile.write("OnWillConnect UserID: %s")# % UserID)
        self.logFile.write(u'WillConnect: %s\n' % UserID)

if 0:
    conObj = Dispatch('AdoDB.Connection')
else:
    conObj = DispatchWithEvents('AdoDB.Connection', AdoConnectionEventsLog)
    conObj.logFile = sys.stdout
#conObj.Open('SQLOLEDB.1;Password="";Persist Security Info=True;User
ID=sa;Initial Catalog=Northwind;Data Source=myserver')
conObj.Open(file("c:/etc/connStr.txt").read())
cmd= Dispatch("ADODB.Command")
cmd.ActiveConnection = conObj
cmd.CommandText = 'select count(*) from customers '
rs, cnt = cmd.Execute()
print 'Cust count:', rs.Fields[0].Value




More information about the Python-win32 mailing list