Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: cococo69 am 09.07.04 - 11:04:54

Titel: Felder auslesen?
Beitrag von: cococo69 am 09.07.04 - 11:04:54
Hallo,

Gegeben:

5 Felder vom Typ Date/Time mit der Bezeichnung

VDat_1
VDat_2
VDat_3
VDat_4
VDat_5

Nun möchte ich deren Inhalt in einer Schleife auslesen.

Problem: Wie kann ich den Feldnamen in der Schleife variabel (für die laufende Zahl 1 - 5 ) angeben?

Oder geht diese etwa nur mit Hilfe eines Arrays?

Mein Code:

Sub Initialize
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim view As NotesView
   Dim doc As NotesDocument
   Set view = db.GetView( "AllesVortag" )
   Dim Counter As Integer
   
   Set doc = view.GetFirstDocument
   Do While Not (doc Is Nothing)   
      Msgbox doc.KdName(0)
      
      Counter =1
      While Counter < 6
         Msgbox doc.VDat_+Counter+(0) ' <<<======= hier ist mein Problem!!!!!!!!!!!!
         Counter = Counter + 1
      Wend
      
      Set doc = view.GetNextDocument(doc)
   Loop
   
End Sub

Gruß
Armin
Titel: Re:Felder auslesen?
Beitrag von: MadMetzger am 09.07.04 - 11:12:16
Du arbeitest einfach mit set item=doc.Getfirstitem ( feld_name ). Dann kannst du dir die Variable feld_name nach deinem Geschmack zusammen basteln.  Schau dir die NotesItem-Klasse mal an.

So etwa sollte es gehen:

Do While Not (doc Is Nothing)  
      Msgbox doc.KdName(0)
     
      Counter =1
      While Counter < 6
         feldname = "VDat"+cstr(counter)
         set item = doc.getfirstitem ( feldname )
         Msgbox item.Value (0)
      Counter = Counter + 1
      Wend
     
      Set doc = view.GetNextDocument(doc)
   Loop
Titel: Re:Felder auslesen?
Beitrag von: Colibri am 09.07.04 - 11:22:58
oder so

Counter =1
While Counter < 6
    Set item = doc.GetFirstItem("VDat_" & counter)
    Msgbox item.text      
    Counter = Counter + 1
Wend
Titel: Re:Felder auslesen?
Beitrag von: cococo69 am 09.07.04 - 11:49:39
Hallo Ihr Beiden,

"subber ", es funzt! Danke!

@Alexis
der Vollständigkeit halber (hast dich bestimmt nur vertan):
Zitat
Msgbox item.Value (0)
muss so heissen: Msgbox item.Text

@Colibri
dein Code funktioniert 100%!!!

Nachmals Danke!

Gruß Armin
Titel: Re:Felder auslesen?
Beitrag von: koehlerbv am 09.07.04 - 11:59:05
Zitat
Msgbox item.Value (0)

muss so heissen: Msgbox item.Text
Muss nicht - es kann ! Es kann auch nur das "s" gefehlt haben:
MsgBox item.Values (0)

Das Verfahren von Colibri würde ich nicht einsetzen:
Code
Set item = doc.GetFirstItem("VDat_" & counter)
Das ist wegen des an sich unzulässigen Mischens von Datentypen (String und Integer) sehr unsauber - die Umwandlung mit Cstr sollte schon verwendet werden. Ob das Vermischen der Datentypen in der nächsten LS-Version noch funktioniert, kann nicht garantiert werden.

Bernhard
Titel: Re:Felder auslesen?
Beitrag von: MadMetzger am 09.07.04 - 11:59:57
Ja hast recht... ansonsten hätte man das auch noch mit CStr() machen können. Aber gern geschehen.
Titel: Re:Felder auslesen?
Beitrag von: Colibri am 09.07.04 - 12:05:06
@Bernhard

Zitat
Das ist wegen des an sich unzulässigen Mischens von Datentypen (String und Integer) sehr unsauber - die Umwandlung mit Cstr sollte schon verwendet werden. Ob das Vermischen der Datentypen in der nächsten LS-Version noch funktioniert, kann nicht garantiert werden.

Danke für den Hinweis, habe ich nicht gewußt!
Titel: Re:Felder auslesen?
Beitrag von: rar am 09.07.04 - 13:21:52
Bernhard,
das Mischen mit von String und Integer hast du diese Woche schon mal bei mir kritisiert.
In der Hilfe steht aber, daß das & dafür da ist.
Zitat
Ampersand (&) operator - Concatenate two expressions as strings.

Warum sollte das in einer näxten Version denn nicht mehr so sein, Cstr() aber schon?
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 13:30:54

Das

 Set item = doc.GetFirstItem("VDat_" & counter)

liefert doch wohl hoffentlich einen Fehler, wenn counter ein Integer ist! Spätestens in einer vernünftigen Notes-Version (sprich > 5) wird das nicht mehr laufen.


Sorry, das war ein Irrtum meinerseits!

Andreas
Titel: Re:Felder auslesen?
Beitrag von: Semeaphoros am 09.07.04 - 13:32:17
Halte es für wahrscheinlich, dass & sogar leicht oder mehr effizienter ist als Cstr()
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 13:39:48
Du hast recht, ich nehme meinen Einwand zurück. Der & Operator macht tatsächlich eine Typenkonvertierung. Ich hatte es bis heute jedoch nie (absichtlich) verwendet.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: rar am 09.07.04 - 13:40:15
Andreas,

der Code

   Dim text As String
   Dim zahl As Integer
   zahl = 5
   text = " Nummer " & zahl & " lebt!"
   Msgbox text

läuft mit 6.5 (ist das eine vernünftige Notesversion?) einwandfrei weil:
 
Zitat
Ampersand (&) operator - Concatenate two expressions as strings.
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 13:42:05
Ja, Du hast recht. Ich habe mich da geirrt.  :-[
Hier stimmt die Doku mal ausnahmesweise  ;D

Was die Notes Versionen angeht: Ich habe leidvoll erfahren, dass Notes 6 wesentlich pingeliger ist als Notes 5. Insbesondere in gemischten Notes/Web Anwendungen kann das schon nerven und man muss einiges ändern, wenn man nicht sehr sauber schon in R5 programmiert hat.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 13:47:50
Ich habe das mal mit dem Operator + getestet, der in Script überladen ist.

Sub Click(Source As Button)
   
   Dim s As String
   Dim i As Integer   
   s = "test"
   i = 1   
   Msgbox  s & i
   Msgbox s + s
   Msgbox i + i
   Msgbox s + i   'Hier knallt's dann
   
End Sub

Dazu aus der Hilfe:
Plus (+) operator
Syntax
expr1 + expr2
Elements
expr1, expr2
Any String expressions, or any of the following:
Numeric expression: LotusScript converts it to its text representation (if plus is interpreted as concatenation).
NULL: LotusScript treats it as  NULL.  If either expression is NULL, the result is NULL.
EMPTY: LotusScript treats it as a zero-length String value.
Return value
The result is a String or a Variant of type String, if either of the operands is a Variant.
Usage
Use the ampersand (&) operator to ensure a concatenation operation. The plus (+) operator  concatenates two character strings, but LotusScript determines whether to interpret the plus as a concatenation operator or an addition operator on the basis of the operands in the expression in which it appears.

Also work's as designed.

Irgendwie widerstrebt es mir, den & so zu verwenden. Aber man lernt ja nie aus.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: koehlerbv am 09.07.04 - 13:58:14
Ich hoffe, mir fällt das demnächst wieder ein, wo das mit dem Ampersand dann doch nicht funktioniert ...
Ich halte es hier aber mit Andreas: Es ist unsauberes Coden, es liest sich schlechter. Ich mach's einfach nicht.

Bernhard
Titel: Re:Felder auslesen?
Beitrag von: rar am 09.07.04 - 13:58:51
Wenn ich ehrlich bin schreib ich auch immer
string + Cstr(integer)
Das mit dem & hab ich erst später gesehen und dann wollte ich mich nicht umgewöhnen. Außerdem gefällt mir +Cstr() besser

Msgbox (5 & 5) ergibt übrigens "55"

-dani
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 14:10:39
Hier kommt übrigens 10 heraus:
Msgbox  "5" + 5

und hier 515
Msgbox  "5" & 5 + "5" + 5

und hier 1055
Msgbox  "5" + 5 & "5" & 5

Ich bleibe da lieber bei meiner Typkonvertierung.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: Semeaphoros am 09.07.04 - 14:14:46
Na, hier ist aber das Verhalten von "+" gefährlich, weil nicht direkt durchsichtig, hingegen ist das Verhalten von"&" in jedem Falle klar: ist immer eine Concatenation von Strings, die Konvertierung ist also vorhersagbar immer VOR der Operation, was bei "+" offenbar nicht der Fall ist
Titel: Re:Felder auslesen?
Beitrag von: Colibri am 09.07.04 - 14:15:09
Zitat
Ich hoffe, mir fällt das demnächst wieder ein, wo das mit dem Ampersand dann doch nicht funktioniert ...
Ich halte es hier aber mit Andreas: Es ist unsauberes Coden, es liest sich schlechter. Ich mach's einfach nicht.

Warum soll sich & schlechter lesen als +Cstr()

Das leuchtet mir nicht ein. Ist doch wohl eher einfach nur eine Gewohnheit. Auserdem sind es 6 Zeichen mehr zu tippen!

Aber weil wir gerade bei sauber und unsauber sind, was ist hier sauberer?

Dim doc as NotesDocument
Dim doc2 as NotesDocument
Dim doc3 as Notesdocument

oder

Dim doc, doc2, doc3 as NotesDocument

Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 14:20:30
Sauberer ist das erste oder alternativ
Dim doc1 As NotesDocument, doc2 As NotesDocument, doc3 As NotesDocument

Das zweite ist fehlerhaft, da Du nicht sichergehen kannst, dass doc1 und doc2 als NotesDocument behandelt werden.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: Semeaphoros am 09.07.04 - 14:20:30
Das erste ist sauber, und zwar weil das zweite nicht den gewünschten Effekt erbringt: bei der zweiten Variante ist doc und doc2 vom Typ Variant, schaus Dir mal im Debugger an ....
Titel: Re:Felder auslesen?
Beitrag von: koehlerbv am 09.07.04 - 14:21:38
Sauber ist nur Fall 1. In Fall 2 erzeugst Du doc und doc2 als Variant und nur doc3 als NotesDocument.

By the way: Strings verkette ich mit dem Ampersand und nicht mit dem Plus-Zeichen. Und: Das scheinbare Einsparen von zu tippenden Zeichen wirst Du irgendwann mit einem riesigen Aufwand bezahlen.

Bernhard
Titel: Re:Felder auslesen?
Beitrag von: MadMetzger am 09.07.04 - 14:22:06

Aber weil wir gerade bei sauber und unsauber sind, was ist hier sauberer?

Dim doc as NotesDocument
Dim doc2 as NotesDocument
Dim doc3 as Notesdocument

oder

Dim doc, doc2, doc3 as NotesDocument


Also laut einhelliger Meinung hier im Forum ist die erste Variante die sauberere. Schau mal im BP-Diskussionsforum in diesem Thread hier nach: Was ein Notes-Entwickler immer beachten/machen sollte (http://www.atnotes.de/index.php?board=27;action=display;threadid=16269)
Titel: Re:Felder auslesen?
Beitrag von: Semeaphoros am 09.07.04 - 14:24:33
Na, das geht hier noch nicht einmal um sauber oder nicht, das geht um Korrektheit des Codes (allenfalls, meistens ist es ja ohne Nebenwirkungen, ausser dass unnötig Zeit verbraten wird).
Titel: Re:Felder auslesen?
Beitrag von: Glombi am 09.07.04 - 14:26:47
Dann sind wir uns ja mal einig  :)

Wegen & vs. Cstr(): Das ist wohl eher eine Sache der persönlichen Einstellung.
Ich denke mal, wer Cstr() verwendet, verwendet auch immer Option Declare.

Andreas
Titel: Re:Felder auslesen?
Beitrag von: Colibri am 09.07.04 - 14:37:17
Vielen Dank an die vielen Profis hier für die Antworten.  :)

Das Forum gefällt mir !!!!
Titel: Re:Felder auslesen?
Beitrag von: Semeaphoros am 09.07.04 - 14:40:00
Ich denke mal, wer Cstr() verwendet, verwendet auch immer Option Declare.

Wahrscheinlich