Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: zhermann am 23.09.04 - 09:11:50

Titel: 210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 09:11:50
Hallo Leute,

ich bekomme sporadisch beim ausführen einer eigenen Function folgende FM: "Automation object member not found."

Hier mal die Function:

Function dokcounter
   
   Dim ProgLevel As Integer
   
   Stop
   Counter = Counter + 1
   ProgLevel = Round( ( Counter * 100 / FileCounter ), 0)
   dokcounter = ProgLevel

End Function

Die Variablen Counter und FileCounter sind Globale Variablen. Filecounter ist auch gefüllt.

Laut Debugger passt Notes die Zeile zum berechnen des ProgLevels nicht.

Das komische ist aber mal geht es mal geht es nicht.  ??? Oder er bricht mittendrin zusammen.

Hat einer von Euch eine Idee?

Gruß

Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: elajen am 23.09.04 - 09:21:57
Hallo,

Filecounter ist aber nicht ab und zu mal 0?
Hast Du vielleicht einen Datentypen Überlauf?

Teile doch mal die Berechnung in mehrere Zeilen auf. Habe ähnliches auch schon mal gehabt.

Gruß von Ekki.
Titel: Re:210 - Automation object member not found
Beitrag von: koehlerbv am 23.09.04 - 09:27:41
Die Fehlermeldung verweist auf ein nicht vorhandenes OLE-Object, was in diesem Zusammenhang vollkommen abstrus erscheint.
Was läuft denn in dem Programm noch ab ? Arbeitest Du dort mit OLE ?
Wenn nicht, dann hast Du eindeutig einen R6-Bug entdeckt.

Bernhard

PS:
Die von Ekki genannten Möglichkeiten würden zu den Fehlern 6 und 11 führen - das müsste also anders aussehen. Trotzdem sollte geprüft werden, ob Overflow und DevisionByZero ausgeschlossen werden kann.
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 09:28:14
Hallo Ekki,

nein FileCounter ist immer voll. Habe das mit geprüft, in dem ich die Variablen Counter und FileCounter in eine Text-Datei geschrieben habe.

Teile mal die Zeielen auf. Vielleicht funzt es dann.

Gruß

Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 09:34:51
Ausprobiert.  >:(

Habe die Function nun so gemacht:

Function dokcounter
   
   Dim ProgLevel As Integer
   Dim x As Integer
   Dim y As Integer
   
   Stop
   Counter = Counter + 1
   x = Counter * 100
   y = x / FileCounter
   ProgLevel = Round( y, 0)
   dokcounter = ProgLevel

End function

Der Debugger sprint immer beim Round an, wie ein Drogenhund...
Habe auch schon y als Doble oder Long definiert alles das gleiche.

Gruß

Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: koehlerbv am 23.09.04 - 09:42:38
Eine ganz andere Frage: Warum verwendest Du denn überhaupt Round, wenn y sowieso Integer ist ? Da gibt es nix mehr zu runden auf's nächste Ganze ...

Bernhard
Titel: Re:210 - Automation object member not found
Beitrag von: Semeaphoros am 23.09.04 - 09:48:19
Genau wie Bernhard sagt, das Round einfach mal vergessen und schauen, ob das Problem verschwindet, oder ob er jetzt bei einer anderen Stelle rausspringt. Mögliche Ursachen: da läuft ein anderer Prozess auch noch (gibts irgendwo ein Timer-Objekt?) oder die DB ist schlichtweg korrupt
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 09:53:31
Ok,

Round ist weg, jetzt bekomme ich bei 6% einen Overflow.

Ich glaube ich geh ma eine Kaffee und ein Kamel verdrücken.

Gruß

Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: Semeaphoros am 23.09.04 - 10:35:46
In welcher Zeile?
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 11:33:25
Also, habe den einen Fehler gefunden:

erster Overflow beim 328 Schritt: Weil x as integer nett geht (ich dummkopf)
328 * 100 = 32800 damit mehr als 32768 (scheiß Anfängerfehler)

Jetzt habe ich x, y und Proglevel auf Double gesetzt und immer noch Fehler:

OVERFLOW - jetzt krieg ICH gleich einen.

Hier nun die abgeänderte Function

Function dokcounter
   Dim ProgLevel As Double
   Dim x As Double
   Dim y As Double
   
   Counter = Counter + 1
   x = Counter * 100
   Proglevel = x / FileCounter  
   Dokcounter = Int(ProgLevel)
End Function

Also bis zum 327 Schritt (Counter) funzt es.

Filecounter steht auf 5202 (soviele Dateien sollen bearbeitet werden)

Schritt 327:
        x :                  327 * 100 = 32700
        Proglevel:      32700 / 5202 = 6,2830436 (laut meinen elek. Abakus)
        dokCounter:  6

Schritt 328:
        x :                  328 * 100 = 32800
        Proglevel:      32800 / 5202 = 6,3052672 (laut meinen elek. Abakus)
        dokCounter:  sollte auch 6 sein, aber Notes meint OVERFLOW

...

Es scheitert immer am ändern von Double in Integer.
Gibt es im 6.5.1 Notes einen Bug oder ist das ein neues Feature???
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 12:01:39
G E F U N D E N !!!

Counter ist von Typ Integer.
Notes mag es halt nicht wenn typübergreifende Berechnungen durchführt.

                        Double = Integer * 100

Habe die Variable Counter in den Typ Double geändert und siehe da es geht.

Gruß Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: koehlerbv am 23.09.04 - 12:23:44
Und wir halten mal fest: Die Fehlermeldung ist ein R6-Bug, denn mit OLE hat das nun wirklich nix zu tun ...

Bernhard
Titel: Re:210 - Automation object member not found
Beitrag von: Semeaphoros am 23.09.04 - 12:31:38
Im Prinzip ja, es sei denn, wir haben es trotzdem noch mit einer Datenpanbk-Korruption zu tun, denn dann wirds irrelevant, was er meldet. So ganz unter einen Hut bringe ich die Infos, die wir hier haben, noch nicht so richtig.
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 13:30:42
Hallo Semeaphoros,

es ist eigentlich ganz einfach.

Ich versuche eine einfache Prozentberechnung zu machen, damit ich in der Statusleiste fogenden Text ausgeben kann: "xxx% bearbeitet..."

Nun habe ich mit der Berechnung der Prozentzahl Probleme bekommen.
Ich habe immer die FM siehe Subject bekommen. Nachdem ich das Round rausgenommen habe habe ich ein Overflow bekommen. Die Db kann nicht Korrupt sein, da ich die Fehler auch in einer neuen DB bekommen habe.

Somit schließe ich mich Bernhard an, es handelt sich wohl um einen kleinen Käfer.

Gruß Zsolt
Titel: Re:210 - Automation object member not found
Beitrag von: Semeaphoros am 23.09.04 - 13:34:13
Wenn Du das zuverlässig reproduzieren kannst - indem Du eine Datenbank baust, die das Problem hat, dann solltest Du das unbedingt als Bugreport an den Support melden.
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 23.09.04 - 18:32:44
Hallo nochmal,

mir ist da noch was eingefallen.

Es kann kein Bug sein weil:

       y as integer
       x as Double

       y = 238
       x = CDbl( 328 * 100)

Ergebnis ist ein Overflow, weil Notes erst die Zahlen in der  Klammer (328 * 100) als Integer berechnen will. Danach sollte es in ein Double-Wert umgewandelt werden, nur kommt er nicht mehr dazu, weil schon der Overflow (32800) da ist.

Gruß

Zsolt

P.S. Im Notes 7 ist der gleiche Overflow aufgetretten.



Titel: Re:210 - Automation object member not found
Beitrag von: Glombi am 23.09.04 - 19:17:13
Alles ist korrekt.

Wenn Du
 x = CDbl( 328 * 100)
machst, multiplizierst Du 2 Integer und es gibt korrekterweise einen Overflow.

Ein Blick in die Notes Designer Hilfe zur Multiplikation:
The result is a value whose data type is generally the same as that of the operand whose data type is latest in this ordering: Integer, Long, Single, Currency, Double. For example, if one operand is a Double and the other is a Long, then the data type of the result is Double.

Wenn Du bspw.
   erg = 328.0 * 100.0   
   Msgbox x
verwendest, geht es.

Also: Alles KEIN Bug oder sowas!

Andreas
Titel: Re:210 - Automation object member not found
Beitrag von: koehlerbv am 23.09.04 - 20:53:14
Der hier diskutierte Bug bezieht sich aber - sowie ich das bisher gesehen habe - nicht auf das korrekte Verhalten bei der Integer-Multiplikation, sondern auf die Ausgabe der Meldung "Automation object member not found".

Aber offensichtlich haben wir nicht mehr so richtig die Chance, hinter deren wahre Ursache zu kommen ...

Bernhard
Titel: Re:210 - Automation object member not found
Beitrag von: Glombi am 23.09.04 - 21:01:24
Ja, stimmt. Die Meldung "Automation object member not found." steht zwar in der KBASE, aber in einem ganz anderen Zusammenhang.

Andreas
Titel: Re:210 - Automation object member not found
Beitrag von: koehlerbv am 23.09.04 - 21:11:12
Das ist (oder besser: SOLLTE) ein OLE-Fehler sein ("OLE-Server zuckt nicht"). In diesem Zusammenhang isses gaga.

Wenn man jetzt noch den kompletten Erst-Code von Zsolt hätte, dann wäre das reif für einen Call bei IBM  ;)

Bernhard
Titel: Re:210 - Automation object member not found
Beitrag von: Glombi am 23.09.04 - 21:17:39
Der Vollständigkeit halber hier der Auszug aus der KBASE. Es hat nicht wirklich was mit OLE direkt zu tun.

LotusScript code that accesses a third party object (a non-Lotus object) results in the following error when calling methods which contain no parameters:

"Automation object member not found."

The same code logic works within Visual Basic without error.

The following code sample demonstrates this issue.  The below code runs on Windows systems to access the Assigned Directories Services (ASDi) object.  When the Members method is called, the error occurs:

 Dim Group
 Dim Member
 
               ' Bind to a known group object.
 Set Group = GetObject("WinNT://ComputerName/Administrators")
 Set member = Group.Members  'The code will error when executing this line

 Forall x In member  
  Print x.name
 End Forall
 
 Msgbox  group.name  ' Returns "Administrators"
 Msgbox group.class  ' Returns "Group"
 Msgbox group.AdsPath ' Returns "WinNT://Domain/ComputerName"
 
 If Group.IsMember("WinNT://Domain/ComputerName/csmith") Then
  Msgbox "Already a Member"
 Else
  group.Add("WinNT://ComputerName/csmith")
 End If




LotusScript requires the use of parentheses when calling the methods of non-Lotus objects, even when the methods do not have any parameters.  

From the example above, the Members method call would be made as follows:

Set member = Group.Members()

Within Notes, when working with Notes objects it is recommended, but not required, to use parentheses when calling a method that does not contain any parameters.

For example, both of the following calls to GetFirstDocument (of the NotesDocumentCollection class) run without error:

Set doc = collection.getfirstdocument

Set doc = collection.getfirstdocument()

Supporting Information:

A directory service is basically a database that contains the attributes and locations of shared objects connecting the network.  Users that want to access these resources may do so by using a special syntax.  An assigned directory service uses a syntax which is called a namespace.  For example, //CompanyName/csmith would identify a workstation and a logged-in user.  The collection of all workstations and users on the network can be accessed this way from a namespace.  A directory service provides a method to manage the data stored in internal tables.  You can read and set security flags and descriptions.

The ability to access and/or update the Active Directories depends on the ADSi object control and is available through COM.  

It is also important when using the IsMember method, that the complete ADsPath is used.

Related Documents:

Setting Third-Party Object Property to an Object Causes Error: "Automation Object Member Not Found"
Document #:  1084270
Titel: Re:210 - Automation object member not found
Beitrag von: zhermann am 24.09.04 - 06:54:02
Hallo Bernhard,

hier der erstcode.

Function dokcounter
   
   Dim ProgLevel As Integer
   
   Counter = Counter + 1
   ProgLevel = Round( ( Counter * 100 / FileCounter ), 0)
   dokcounter = ProgLevel

End Function

Ich habe den Automation Error in der Zeilt ProgLevel = ... bekommen.

Gruß

Zsolt
Titel: Re: 210 - Automation object member not found
Beitrag von: DaemoN am 12.09.11 - 15:51:11
dieses thema ist zwar schon viele jahre alt, hat mir aber heute nach stunden erfolglosen versuchen die lösung gebracht. hatte auch das problem dass object.Members zwar in VB script funktioniert, nicht aber in LN script. dass die lösung mit object.Members() derart simpel ist, hätte ich nicht gedacht.

ein dankeschön an das notes forum und dessen member welche mir wieder einmal weiterhelfen konnten!  8) :love: