Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ?
Hallo Ich sollte noch ultradringend eine Schnittstelle in ein ERP System erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir win32com.client Probleme. Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip top. Vgl. PythonWin Output: * >>> import win32com.client * >>> o = win32com.client.Dispatch("OLE_VK.VK") Das Aufrufen von Methoden funktioniert: * >>> o.SetClient(7777) * True * >>> o.SetApplicationID(6) * True * >>> o.NewHeader * <bound method IVK.NewHeader of <win32com.gen_py.ABEA Business-Object * Verkauf.IVK instance at 0x19950648>> Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties keine Werte zuweisen. Ich erhalte immer einen Syntax Error ... * >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 * Traceback ( File "<interactive input>", line 1 * SyntaxError: can't assign to function call (<interactive input>, * line 1) Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst noch besonders beachten (Werteübergabe von Typ Integer, String, Currency, Boolean, DateTime, Variant, Double). Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin ich mega froh ;-) Danke und Gruss Stefan # The method SetAsBooleanbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), (8, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsBooleanbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), (3, 1), (11, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), (8, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsCurrencybyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), (3, 1), (6, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), (8, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDateTimebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), (3, 1), (7, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), (8, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsDoublebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), (3, 1), (5, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), (8, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsIntegerbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), (3, 1), (3, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), (8, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsStringbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), (3, 1), (8, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), (8, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetAsVariantbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), (3, 1), (12, 1)),_tableID , _fldID, arg2) # The method SetTextDetail is actually a property, but must be used as a method to correctly pass the arguments def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, arg1=defaultUnnamedArg): return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), (8, 1)),_dtxttyp , arg1) # The method SetTextHeader is actually a property, but must be used as a method to correctly pass the arguments def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), (3, 1), (8, 1)),_htxttyp , _hdoktyp, arg2)
versuch mal o.Table.AsCurrencybyName("DKO","AUF_NR", 268) gruss rr Stefan Mallepell wrote:
Hallo
Ich sollte noch ultradringend eine Schnittstelle in ein ERP System erstellen (ja ich bin viel, viel zu spät dran ...). Jetzt macht mir win32com.client Probleme.
Die ERP SW stellt einen COM Server zur Verfügung, auf den ich als Client aus Python zugreifen sollte. Die Instanzierung des COM Objekts geht tip top. Vgl. PythonWin Output:
* >>> import win32com.client * >>> o = win32com.client.Dispatch("OLE_VK.VK")
Das Aufrufen von Methoden funktioniert:
* >>> o.SetClient(7777) * True * >>> o.SetApplicationID(6) * True * >>> o.NewHeader * <bound method IVK.NewHeader of <win32com.gen_py.ABEA Business-Object * Verkauf.IVK instance at 0x19950648>>
Da die Properties des Objekts leider als "Methoden" erscheinen (vgl. Unten Ausschnitt aus generiertem Interface), kann ich nun den Properties keine Werte zuweisen. Ich erhalte immer einen Syntax Error ...
* >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 * Traceback ( File "<interactive input>", line 1 * SyntaxError: can't assign to function call (<interactive input>, * line 1)
Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst noch besonders beachten (Werteübergabe von Typ Integer, String, Currency, Boolean, DateTime, Variant, Double).
Tja ich bin nicht wirklich der Python Crack und muss jetzt eingestehen, dass ich mich etwas übernommen habe ... Wenn mir jemand helfen kann, bin ich mega froh ;-)
Danke und Gruss Stefan
# The method SetAsBooleanbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(3, LCID, 4, (24, 0), ((8, 1), (8, 1), (11, 1)),_tableID , _fldID, arg2)
# The method SetAsBooleanbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsBooleanbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(13, LCID, 4, (24, 0), ((8, 1), (3, 1), (11, 1)),_tableID , _fldID, arg2)
# The method SetAsCurrencybyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(4, LCID, 4, (24, 0), ((8, 1), (8, 1), (6, 1)),_tableID , _fldID, arg2)
# The method SetAsCurrencybyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(14, LCID, 4, (24, 0), ((8, 1), (3, 1), (6, 1)),_tableID , _fldID, arg2)
# The method SetAsDateTimebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(19, LCID, 4, (24, 0), ((8, 1), (8, 1), (7, 1)),_tableID , _fldID, arg2)
# The method SetAsDateTimebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDateTimebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(20, LCID, 4, (24, 0), ((8, 1), (3, 1), (7, 1)),_tableID , _fldID, arg2)
# The method SetAsDoublebyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(5, LCID, 4, (24, 0), ((8, 1), (8, 1), (5, 1)),_tableID , _fldID, arg2)
# The method SetAsDoublebyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsDoublebyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(15, LCID, 4, (24, 0), ((8, 1), (3, 1), (5, 1)),_tableID , _fldID, arg2)
# The method SetAsIntegerbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(1, LCID, 4, (24, 0), ((8, 1), (8, 1), (3, 1)),_tableID , _fldID, arg2)
# The method SetAsIntegerbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsIntegerbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(11, LCID, 4, (24, 0), ((8, 1), (3, 1), (3, 1)),_tableID , _fldID, arg2)
# The method SetAsStringbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(2, LCID, 4, (24, 0), ((8, 1), (8, 1), (8, 1)),_tableID , _fldID, arg2)
# The method SetAsStringbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsStringbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(12, LCID, 4, (24, 0), ((8, 1), (3, 1), (8, 1)),_tableID , _fldID, arg2)
# The method SetAsVariantbyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(6, LCID, 4, (24, 0), ((8, 1), (8, 1), (12, 1)),_tableID , _fldID, arg2)
# The method SetAsVariantbyNo is actually a property, but must be used as a method to correctly pass the arguments def SetAsVariantbyNo(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(16, LCID, 4, (24, 0), ((8, 1), (3, 1), (12, 1)),_tableID , _fldID, arg2)
# The method SetTextDetail is actually a property, but must be used as a method to correctly pass the arguments def SetTextDetail(self, _dtxttyp=defaultNamedNotOptArg, arg1=defaultUnnamedArg): return self._oleobj_.InvokeTypes(10, LCID, 4, (24, 0), ((3, 1), (8, 1)),_dtxttyp , arg1)
# The method SetTextHeader is actually a property, but must be used as a method to correctly pass the arguments def SetTextHeader(self, _htxttyp=defaultNamedNotOptArg, _hdoktyp=defaultNamedNotOptArg, arg2=defaultUnnamedArg): return self._oleobj_.InvokeTypes(9, LCID, 4, (24, 0), ((3, 1), (3, 1), (8, 1)),_htxttyp , _hdoktyp, arg2)
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hoi Robert
versuch mal o.Table.AsCurrencybyName("DKO","AUF_NR", 268)
Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl unten: * >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) * Traceback (most recent call last): * File "<interactive input>", line 1, in <module> * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given) Gruss Stefan
Hi, warum fragst Du nicht mal diejenigen, die die Klassen entwickelt haben. Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun. Wo hast Du den die Klasse o.table initialisiert, vielleicht liegt dort ein Fehler vor, dass die entsprechende ID dann genommen wird. Leider kenne ich Eurer System nicht, zu wenig Infos. Bis dann, Volker -------- Original-Nachricht -------- Datum: Thu, 15 Feb 2007 12:29:34 +0100 Von: Stefan Mallepell <steve@syso.ch> An: python-de@python.net CC: Betreff: Re: [Python-de] Probleme mit win32com.client / com-objekt hat property, das als methode dargestellt ist / wie weise ich nun Werte zu ?
Hoi Robert
versuch mal o.Table.AsCurrencybyName("DKO","AUF_NR", 268)
Nein, das habe ich bereits versucht und es tut leider auch nicht. vgl unten:
* >>> o.Table.AsIntegerbyName("DKO","AUF_NR", 268) * Traceback (most recent call last): * File "<interactive input>", line 1, in <module> * TypeError: AsIntegerbyName() takes at most 3 arguments (4 given)
Gruss Stefan
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-- Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten Browser-Versionen downloaden: http://www.gmx.net/de/go/browser
Hi Volker Die Klasse ist ein COM-Server Objekt, welche mit win32com.client verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts als Methoden dargestellt werden.
Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit AsIntegerbyName zu tun.
Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt - sorry. Das andere Property ergibt aber den selben Fehler. Mein Problem ist, dass Python untenstehendes als Methode und nicht als Property warnimmt. Das COM Objekt (hier "o") das aber als Property versteht, welchem man einen Wert zuweisen kann / muss. Z.B. o.Table.AsIntegerbyName("DKO","AUF_NR") = 268 Was aber gegen den Python Syntax ist ... Liebe Grüsse Stefan PS.: vgl auch erstes Mail in diesem Thread für weitere Infos
Die Klasse ist ein COM-Server Objekt, welche mit win32com.client verfügbar gemacht wird. Das Problem ist, die Properties des COM-Objekts als Methoden dargestellt werden.
Allerdings hat die Methode AsCurrencybyName nicht zwingend etwas mit
AsIntegerbyName zu tun.
Ja, das sind zwei verschiedene Property. Habe das Bsp. schlecht gewählt - sorry. Das andere Property ergibt aber den selben Fehler.
Mein Problem ist, dass Python untenstehendes als Methode und nicht als Property warnimmt. Das COM Objekt (hier "o") das aber als Property versteht, welchem man einen Wert zuweisen kann / muss. Z.B.
o.Table.AsIntegerbyName("DKO","AUF_NR") = 268
Was aber gegen den Python Syntax ist ...
Meine COM-Zeiten sind leider schon eine Weile her - darum kann ich nicht wirklich helfen fuerchte ich. Aber aus reinem Interesse: wie deklariert man denn so ein parametrisiertes Property, zB in VB, und wie greift man dann drauf zu? Diez
Stefan Mallepell <steve@syso.ch> writes:
* >>> o.Table.AsCurrencybyName("DKO","AUF_NR") = 268 * Traceback ( File "<interactive input>", line 1 * SyntaxError: can't assign to function call (<interactive input>, * line 1)
Gibt es eine Lösung für dieses Problem? Falls ja, was muss ich sonst noch besonders beachten (Werteübergabe von Typ Integer, String, Currency, Boolean, DateTime, Variant, Double).
Hast Du es mal mit o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268) probiert. Die SetAsCurrencybyName Methode gibt es ja nach dem, was Du aus dem INterface zitierst:
# The method SetAsCurrencybyName is actually a property, but must be used as a method to correctly pass the arguments def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg):
Bernhard -- Intevation GmbH http://intevation.de/ Skencil http://skencil.org/ Thuban http://thuban.intevation.org/
Hoi Bernhard
o.Table.SetAsCurrencybyName("DKO","AUF_NR", 268)
def SetAsCurrencybyName(self, _tableID=defaultNamedNotOptArg, _fldID=defaultNamedNotOptArg, arg2=defaultUnnamedArg):
Wie konnte ich nur so blind sein! Ich habe mir gestern wirklich die Haare gerauft und dabei hätte ich nur das Interface sauber lesen müssen ... Tja, habe jetzt einen tollen Umweg mit Zwischenfiles und VBS zusammengestrickt - was ich natürlich jetzt sofort einstampfen werde und es sauber und nett in Python machen ... Danke für die Hilfe! Stefan
participants (5)
-
Bernhard Herzog
-
Diez B. Roggisch
-
robert rottermann
-
Stefan Mallepell
-
Volker Helm