[python-win32] Re: Greetings and win32 com events question (Typo corrected)

Robert Kaplan belovedbob at greennet.net
Thu Jan 27 16:37:43 CET 2005


Hi,

Apologies, I screwed up with a typo.  AcEvents was another class 
identical to AccessEvents.  The problem is the same.

class   AcEvents
    def OnActivate(self):
        print "Hello from Access"
        return 1

<snip>
        self. ac = Dispatch ("Access.Application")
        self. db = self. ac. NewCurrentDatabase ("d:\\pyhack\\foo")
        self. fm = self. ac. CreateForm ()
        self. ac. Visible = true
        self. fm = DispatchWithEvents (self. fm, AcEvents)

blows out with

    self. fm = DispatchWithEvents (self. fm, AcEvents)
  File "D:\PYTHON22\Lib\site-packages\win32com\client\__init__.py", line 
258, in  DispatchWithEvents
    clsid = disp_class.CLSID
AttributeError: 'NoneType' object has no attribute 'CLSID'.


Second code snippet has the same screwup:


      self. ac = Dispatch ("Access.Application")
      self. db = self. ac. NewCurrentDatabase ("d:\\pyhack\\foo")
      self. fm = self. ac. CreateForm ()
      self. ac. Visible = true
      self. ev = AcEvents ()
      self. fm. OnActivate = self. ev. OnActivate

this couldn't set the OnActivate attribute with the following error.

File "D:\pyhack\1\Bob.py", line 132, in DoAccess
  self. fm. OnActivate = self. ev. OnActivate
File "D:\PYTHON22\Lib\site-packages\win32com\client\__init__.py", line 
503, in __setattr__
  d.__setattr__(attr, value)
File "D:\PYTHON22\Lib\site-packages\win32com\client\__init__.py", line 
463, in __setattr__
  self._oleobj_.Invoke(*(args + (value,) + defArgs))
TypeError: Objects of type 'instance method' can not be converted to a 
COM VARIANT

Tim Golden wrote:

> [Robert Kaplan]
>
> | I'm new to the mailing, so greetings all!
>
> Welcome. As a word of warning, this is a relatively
> low-activity list and I don't know what the overlap
> is between this and the main python list. If you get
> no response (or no solution) here, you might want
> to try the Python list.
>
> | I'm working on an application try to respond to events in Microsoft 
> | Access using Python and win32com.
>
> | class   AccessEvents
> |     def OnActivate(self):
> |         print "Hello from Access"
> |         return 1
> | | <snip>
> |         self. ac = Dispatch ("Access.Application")
> |         self. db = self. ac. NewCurrentDatabase ("d:\\pyhack\\foo")
> |         self. fm = self. ac. CreateForm ()
> |         self. ac. Visible = true
> |         self. fm = DispatchWithEvents (self. fm, AcEvents)
> | | blows out with
> | |     self. fm = DispatchWithEvents (self. fm, AcEvents)
> |   File | 
> "D:\PYTHON22\Lib\site-packages\win32com\client\__init__.py", line | 
> 258, in
> |  DispatchWithEvents
> |     clsid = disp_class.CLSID
> | AttributeError: 'NoneType' object has no attribute 'CLSID'.
>
> Well, it's not clear from your code, but the third
> parameter to DispatchWithEvents should be a *class*
> and not an *instance*. Since AcEvents isn't defined
> anywhere within your code snippet, it's hard to
> see which it is, but just in case...
>
> That said, I can't for the life of me see why that
> would raise the error you're showing, but first
> things first.
>
> TJG
>
> _______________________________________________________________________
>  
>


More information about the Python-win32 mailing list