Autor Thema: Felder auslesen?  (Gelesen 9160 mal)

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Felder auslesen?
« 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

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re:Felder auslesen?
« Antwort #1 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

Offline Colibri

  • Aktives Mitglied
  • ***
  • Beiträge: 217
  • Hmmm .... lecker Vogel!
Re:Felder auslesen?
« Antwort #2 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

Offline cococo69

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 286
  • Geschlecht: Männlich
  • Super dieses Forum!!!
    • Mein Hobby...
Re:Felder auslesen?
« Antwort #3 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Felder auslesen?
« Antwort #4 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
« Letzte Änderung: 09.07.04 - 12:11:54 von koehlerbv »

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re:Felder auslesen?
« Antwort #5 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.

Offline Colibri

  • Aktives Mitglied
  • ***
  • Beiträge: 217
  • Hmmm .... lecker Vogel!
Re:Felder auslesen?
« Antwort #6 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!

Offline rar

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 856
  • Geschlecht: Männlich
  • Des passt scho
    • click
Re:Felder auslesen?
« Antwort #7 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?
†090620141300

Glombi

  • Gast
Re:Felder auslesen?
« Antwort #8 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
« Letzte Änderung: 09.07.04 - 13:40:55 von Glombi »

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Felder auslesen?
« Antwort #9 am: 09.07.04 - 13:32:17 »
Halte es für wahrscheinlich, dass & sogar leicht oder mehr effizienter ist als Cstr()
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

Glombi

  • Gast
Re:Felder auslesen?
« Antwort #10 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

Offline rar

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 856
  • Geschlecht: Männlich
  • Des passt scho
    • click
Re:Felder auslesen?
« Antwort #11 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.
†090620141300

Glombi

  • Gast
Re:Felder auslesen?
« Antwort #12 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
« Letzte Änderung: 09.07.04 - 13:43:39 von Glombi »

Glombi

  • Gast
Re:Felder auslesen?
« Antwort #13 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Felder auslesen?
« Antwort #14 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

Offline rar

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 856
  • Geschlecht: Männlich
  • Des passt scho
    • click
Re:Felder auslesen?
« Antwort #15 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
« Letzte Änderung: 09.07.04 - 14:00:19 von rar »
†090620141300

Glombi

  • Gast
Re:Felder auslesen?
« Antwort #16 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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Felder auslesen?
« Antwort #17 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
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 Colibri

  • Aktives Mitglied
  • ***
  • Beiträge: 217
  • Hmmm .... lecker Vogel!
Re:Felder auslesen?
« Antwort #18 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


Glombi

  • Gast
Re:Felder auslesen?
« Antwort #19 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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz