Autor Thema: ColumnValues --- Variant does not contain a container  (Gelesen 5414 mal)

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Hallo,

ich bekomme die Fehlermeldung "Variant does not contain a container", bin mir allerdings nicht sicher, ob ich verstanden habe, woran es liegt.

dim v,sp(2) as variant
if IsArray(doc.ColumnValues(0)) then
  v=doc.ColumnValues(0)
  sp(0)=v(0)
  v=doc.ColumnValues(1)  '// hier kommt die Fehlermeldung
  sp(1)=v(0)
else
  sp(0)=ColumnValues(0)
  sp(1)=ColumnValues(1)
endif

Soweit ich das jetzt verstanden habe, kommt die Fehlermeldung, weil in doc.ColumnValues(1) keine Werte enthält. Leider konnte ich die Fehlermeldung selbst nicht mehr rekonstruieren, deshalb würde ich gerne verstehen, was die Fehlermeldung überhaupt bedeutet.

Erstmal habe ich die Zeile 
   v=doc.ColumnValues(1)  '// hier kommt die Fehlermeldung
ersetzt durch
   if NOT (doc.ColumnValues(1) is NOTHING) then
      v=doc.ColumnValues(1) '// fix???[2004.02.14]
   end if

Viele Grüße

PS: unkommentierten Code Anderer nachträglich zu debuggen, kann nervend sein.
« Letzte Änderung: 17.02.05 - 13:11:29 von littleS »

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: ColumnValues --- Variant does not contain a container
« Antwort #1 am: 14.02.05 - 11:53:24 »
Hi,
was ist denn doc für ein Typ?

Thomas
+++To be human is more important than to be important!+++

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #2 am: 14.02.05 - 12:05:03 »
Hi,

Dim doc as NotesDocument
....

Set doc = view.GetDocumentByKey(Datevalue(terminb))



Viele Grüße

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: ColumnValues --- Variant does not contain a container
« Antwort #3 am: 14.02.05 - 12:11:50 »
Hallo,

ich glaube, die Prüfung des isArray ist verkehrt.
Probier mal mit:
If isArray(doc.ColumnValues)

In Deinem Code prüfst Du ja nur das erste Element. Damit kann er sicher nicht erkennen, ob doc.ColumnValues(1) auch ein Array ist und meckert ein bisschen.

Thomas
+++To be human is more important than to be important!+++

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #4 am: 14.02.05 - 12:22:29 »
Hi,

danke. Das Problem ist, er meckert garnicht rum, die Fehlermeldung selbst konnte ich nicht reproduzieren, nur ein User hat mir die Fehlermeldung zugeschickt ( ende letzten jahres :> ), und da der code auch nicht von mir ist, versuche ich jetzt erstmal heraus zubekommen, was den Fehler verursacht haben könnte. Im Debugger enthält das doc.ColumnValues manchmal den "Wert" [VARIANT()] und er springt in den IsArray-teil der Abfrage.

Ich denke ich muß mir den code noch was genauer anschauen, bis ich ihn begriffen habe :)


Viele Grüße

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: ColumnValues --- Variant does not contain a container
« Antwort #5 am: 14.02.05 - 12:24:00 »
Zuerst einmal, herzlich willkommen im Forum, kleines sigma ....

Die Bemerkung von Thomas ist schonmal beachtenswert, isArray ist zwar nicht verkehrt hier, aber sinnlos (und liefert wie es aussieht zwar ein korrektes, aber unerwartetes Resultat zurück).

Da Doc.ColumValues ja offensichtlich ein Feld ist, ist auch per definition klar, wie diese Eigenschaft des Dokumentes aussieht: ein eindimenstionaler Array. ColumnValues(0) ist also in jedem Fall ein skalarer Wert und damit überrascht es, dass man überhaupt auf die Fehlerzeile lossteuert, ich hätte jetzt erwartet, dass immer der else-Zweig ausgeführt wird. Offensichtlich überprüft IsArray in dieser Situation nicht den Inhalt der Array-Zelle 0, sondern gibt True zurück, weil ColumnValue selbst ein Array ist.

Weiter, v ist nach der Zuweisung

v=doc.ColumnValues(0)

ein Skalar und die Zuweisung sp(0)=V(0) dürfte dann die Fehlermeldung werfen (und nicht die markierte Zeile)
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #6 am: 14.02.05 - 13:15:29 »
Danke erstmal.

Wie kann ich denn, falls die Fehlermeldung in der Zeile davor also bei sp(0)=v(0) erzeugt wird, die Fehlermeldung abfangen, um dann den Benutzer in einer MessageBox zu bitten, mir seine letzten Aktionen zu mailen, damit ich versuchen kann, den Fehler zu reproduzieren.

Würde anstelle von sp(0)=v(0) folgendes klappen:
if (v(0)) then
  sp(0)=v(0)
else
  MessageBox....
end if

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: ColumnValues --- Variant does not contain a container
« Antwort #7 am: 14.02.05 - 13:30:52 »
Der gesamte Code scheint mir ziemlich nutzlos zu sein. Was da vermutlich erreicht werden soll, ist wohl mit einer einzigen Zeile abzudecken:

sp = doc.ColumnValues
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ColumnValues --- Variant does not contain a container
« Antwort #8 am: 14.02.05 - 21:31:28 »
Den Code, den Du dort vorgefunden hast, kannst Du locker unter "ganz, ganz übel" verbuchen. Besteht die Möglichkeit, dass Du den einfach wegwerfen kannst, um ihn neu zu machen ? Ein grosser Schaden kann da nicht entstehen ...

Nur ein paar Beispiele:

Code
dim v,sp(2) as variant
Eine Deklaration der schlampigsten Sorte. v ist Variant (ohne das das separat deklariert wurde), sp ist ein dreielementiges Array des Typs Variant. Sauber wäre:
Code
Dim v as Variant
Dim sp (0 to 2) as Variant 'wenn den Variant der Weisheit ketzter Schluss ist - und das sollte es nicht sein !!!

Code
if IsArray(doc.ColumnValues(0)) then

doc.ColumnValues (0) ist niemals ein Array, sondern immer ein skalarer Wert. Ein Element eines Arrays (was ein Item eines Dokuments immer ist !) ist immer skalar. Diese Zeile ist also einfach ... Dummfug !

Ich mag' das jetzt wirklich nicht weiter ausdehnen. Du hast da keinen Code, sondern Kot übernommen. Schmeiss es weg und mach eine brauchbare Lösung. Wir helfen, wo es für Dich erforderlich erscheint.

Bernhard

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #9 am: 15.02.05 - 10:08:33 »
Hallo,

danke für das Angebot, ich werde dann wohl noch öfters hier Fragen stellen. Also ihn wegwerfen und neu machen geht wohl eher nicht, da ich mich zum einen erst seit knapp 2 Wochen mit Lotus Notes beschäftige und zum zweiten die Kunden auf die Abarbeitung von Fehlerreports warten  ::).
Mittelfristig werde ich vermutlich die Module erstmal mal mit Kommentaren versehen, falls ich denn verstehen sollte, was da ursprünglich gemacht werden sollte.

Also in ColumnValues(0) steht ein Datum, in ColumnValues(1) steht Datum Uhrzeit und in ColumnValues(2) steht wiederum Datum Uhrzeit. Macht es dann die Abfrage IsArray(doc.ColumnValues(0)) immer noch keinen Sinn?
Die View Set doc = view.GetDocumentByKey(Datevalue(terminb)) enthält, so wie ich das sehe, alle Termine die an dem Datum "terminb" stattfinden, die einzelnen Spalten dieser View sind Datum, Datum und Uhrzeit des Terminbeginns, Datum und Uhrzeit des Terminendes, und sollen wohl nach sp(0), sp(1), sp(2) kopiert werden.

Viele Grüße

 

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: ColumnValues --- Variant does not contain a container
« Antwort #10 am: 15.02.05 - 10:19:40 »
Hm, jetzt wirds aber abenteuerlich ...... sieht mir fast so aus, wie wenn die Variable "Doc" hier kein NotesDocument sein sollte, sondern ein NotesViewEntry ??

Jedenfalls, wenn Du in solchem Code Fehler beheben willst, dann ist Deine Aufgabe eine Sisyphus-Aufgabe: das kannst Du schlichtweg vergessen, ohne mehrjährige Erfahrung mit LotusScript.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #11 am: 15.02.05 - 10:39:39 »
Hi,
ich versuche mal die relevanten Teile des Codes hierhin zu schreiben:

Dim doc As NotesDocument
Dim v,sp(2) As Variant
Dim db As NotesDatabase
Dim view As NotesView
Dim session As New NotesSession
...
Set db = session.CurrentDatabase
Set view = db.GetView("Verfügbar")
...
Set doc = view.GetDocumentByKey(Datevalue(terminb))
...
If Isarray(doc.ColumnValues(0)) Then 
   v = doc.ColumnValues(0)                   '// Datum eines Termins
   sp(0) = v(0)     
   v = doc.ColumnValues(1)                   '// Datum/Uhrzeit des Beginns
   sp(1) = v(0)
   v = doc.ColumnValues(2)                   '// Datum/Uhrzeit des Terminendes
   sp(2) = v(0)
Else
   sp(0) = doc.ColumnValues(0)
   sp(1) = doc.ColumnValues(1)
   sp(2) = doc.ColumnValues(2)
End If
...
If sp(0) > Datevalue(terminb) Then Exit Do
....

Müsste also als erstes doc nicht als NotesDocument sondern als NotesViewEntry deklariert werden?

Viele Grüße

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: ColumnValues --- Variant does not contain a container
« Antwort #12 am: 15.02.05 - 10:45:02 »
Nein, dann lässt er sich so nicht mehr setzen.

Auch mit diesem Abschnitt lässt sich genaueres nicht sagen, der Code ist schlichtweg unsinnig.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: ColumnValues --- Variant does not contain a container
« Antwort #13 am: 15.02.05 - 10:49:24 »
Dieser Teil
Code
If Isarray(doc.ColumnValues(0)) Then 
   v = doc.ColumnValues(0)                   '// Datum eines Termins
   sp(0) = v(0)     
   v = doc.ColumnValues(1)                   '// Datum/Uhrzeit des Beginns
   sp(1) = v(0)
   v = doc.ColumnValues(2)                   '// Datum/Uhrzeit des Terminendes
   sp(2) = v(0)
wird niemals ausgeführt.

Diese Aussage irritiert mich zutiefst:
Zitat
da ich mich zum einen erst seit knapp 2 Wochen mit Lotus Notes beschäftige und zum zweiten die Kunden auf die Abarbeitung von Fehlerreports warten

Bernhard

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #14 am: 15.02.05 - 11:37:27 »
Hi,

im Debugger wird der erste Teil der If-Anweisung durchlaufen, zumindest wenn als Datentyp von doc.ColumnValues im Debugger [Variant()] angezeigt wird.
Der ursprüngliche Programmierer arbeitet hier nicht mehr und ich wurde vor kurzem dazu auserkoren mich um die eintrudelnden Fehlermeldungen zu kümmern. Bis vor 2 Wochen dachte ich noch, daß man LotusNotes nur zum email schreiben benutzt :>
Naja mal schauen, ob ich den ein oder anderen Fehler noch einkreisen kann.

Viele Grüße

Offline littleS

  • Junior Mitglied
  • **
  • Beiträge: 78
Re: ColumnValues --- Variant does not contain a container
« Antwort #15 am: 15.02.05 - 11:55:06 »
Hi,

aber ich werde mithilfe der Designer-Help erstmal möglichst viel des Kots^H^H^H^HCodes kommentieren und versuchen zu verstehen.

Viele Grüße

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz