I'm converting working Perl COM scripts to Python (ActivePython
2.5.1.1)and I've hit an odd situation where win32com throws a 'Type
mismatch' error on a string.

It's odd because a) it works in ActiveState Perl, b) other methods in
the object work just fine in Python, and c) it looks suspiciously like a
key collision in an internal hash.

The following method works successfully:
        a = self.tdc.Customization.Fields.Field("REQ", "RQ_REQ_ID")
        print a.ColumnName

but the following fails:
        b = self.tdc.Customization.Fields.Fields("BUG")

I think the problem is "...Fields.Fields(...)"  The two Fields objects
are different objects but happen to have the same name.  (The 1st Fields
is a CustomizationFields object, and the 2nd Fields is TDField object
with different properties and different methods.)


I have extra debugging turned on in
Python25\lib\site-packages\win32com\client\dynamic.py.  Here's the
debugging with notes and the traceback:

        TDApiOle80.TDConnection.__LazyMap__(InitConnectionEx) added
something
        TDApiOle80.TDConnection.__LazyMap__(Login) added something
        TDApiOle80.TDConnection.__LazyMap__(Connect) added something
        TDApiOle80.TDConnection.__LazyMap__(ProjectConnected) added
something

        Attribute ProjectConnected not in cache
        Getting property Id 0x2 from OLE object
        OLE returned  True
        TDApiOle80.TDConnection.__LazyMap__(Customization) added
something

        Attribute Customization not in cache
        Getting property Id 0x1a from OLE object
        OLE returned  <PyIDispatch at 0xb409b4 with obj at 0xdbfebc>
        <unknown>.__LazyMap__(Fields) added something

a = self.tdc.Customization.Fields.Field("REQ", "RQ_REQ_ID")

self.tdc.Customization.Fields.Field
        Attribute Fields not in cache
        Getting property Id 0x6 from OLE object
        OLE returned  <PyIDispatch at 0xa4692c with obj at 0xdb39a4>
        <unknown>.__LazyMap__(Field) added something

print a.ColumnName
        Field.__LazyMap__(ColumnName) added something
        Attribute ColumnName not in cache
        Getting property Id 0x13 from OLE object
        OLE returned  RQ_REQ_ID
        RQ_REQ_ID


b = self.tdc.Customization.Fields.Fields("BUG")

        Attribute Customization not in cache
        Getting property Id 0x1a from OLE object
        OLE returned  <PyIDispatch at 0xabaa34 with obj at 0xdbfebc>
        <unknown>.__LazyMap__(Fields) added something

self.tdc.Customization.Fields
        Attribute Fields not in cache
        Getting property Id 0x6 from OLE object
        OLE returned  <PyIDispatch at 0xac0a54 with obj at 0xdb39a4>
        <unknown>.__LazyMap__(Fields) added something

self.tdc.Customization.Fields.Fields
        Attribute Fields not in cache
        Getting property Id 0x2 from OLE object
        OLE returned  <PyIDispatch at 0xae22b4 with obj at 0x18b7270>

boom    Traceback (most recent call last):
          File "TDC.py", line 112, in <module>
            tdc.MapUserFields2DatabaseFields('BUG')
          File "TDC.py", line 61, in MapUserFields2DatabaseFields
            b = self.tdc.Customization.Fields.Fields("BUG")
          File
"c:\Python25\lib\site-packages\win32com\client\dynamic.py", line 172, in
        __call__
            return
self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.
        defaultDispatchName,None)
        pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)


How the heck do you get a Type Mismatch on a string?

Again, the ...Fields.Field("TableName", "FieldName") method works just
fine, but ...Fields.Fields("TableName") method fails miserably.  



*****

The information transmitted is intended only for the person or entity to which 
it is addressed and may contain confidential, proprietary, and/or privileged 
material. Any review, retransmission, dissemination or other use of, or taking 
of any action in reliance upon this information by persons or entities other 
than the intended recipient is prohibited. If you received this in error, 
please contact the sender and delete the material from all computers. GA623


_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to