Avatar billede sbay Nybegynder
22. juli 2004 - 09:09 Der er 13 kommentarer og
1 løsning

Brugen af array

Jeg forsøger at lære/bruge arrays, men det volder lidt kvaler!

Jeg vil gerne tilføje en værdi til et felt (liste - og af forskellig type på felterne!!!), og har fået et praj om at ReplaceItemValue er vejen frem. Jeg forsøger med nedenstående, men kan ikke få sat array til den værdi feltet har inden jeg begynder:

    Dim array() As String
    array() = Doc.SalaryNo    ****** fejler
    u = (Ubound(array)) + 1
    Redim Preserve array(u)
    array(u) = "test"
    array(u+1) = "test2"
   
    Dim item As NotesItem
    Set item = doc.GetFirstItem("SalaryNo")
    Call Doc.ReplaceItemValue("SalaryNo, array")
Avatar billede pr0gm4n Nybegynder
22. juli 2004 - 09:44 #1
Du er nødt til at fortælle den, hvor mange elementer array skal indeholde, førend du putter noget i.

Hvis vi antager at du vil tage det der står i doc.salaryNo og tillægge to værdier yderligere, så kan det gøres således:

Dim array() as string
Dim u as integer
'erklær doc og tildel
u=ubound(doc.salaryNo)+2
redim array(u) 'ingen preserve da variablen stadig er tom
array = doc.salaryNo
array(u-1) = "test"
array(y) = "test2"
doc.salaryNo = array

(jeg har ikke haft ovenstående forbi en Notes-designer, så der kan godt være en bøv i...)

Jeg synes ikke der er nogen grund til at rode med NotesItem og ReplaceItemValue i dette eksempel. Specielt ikke når det du ønsker at lære er at arbejde med arrays.
Avatar billede sbay Nybegynder
22. juli 2004 - 09:50 #2
Den fejler stadig her: array = doc.salaryNo
Avatar billede sbay Nybegynder
22. juli 2004 - 09:54 #3
Illegal reference to array or list: ARRAY
Avatar billede jogii Nybegynder
22. juli 2004 - 10:35 #4
Du skal ihverttilfælde starte med at Redimme istedenfor at Dimme. Mao skal der stå
    Redim array() as string
til at starte med.
22. juli 2004 - 10:37 #5
Når man erklærer et array, kan det nogen gange være bedst at erklære det uden at angive type (f.eks. "Dim array"). Prøv sådan her:
Dim array
Dim u As Integer
'erklær doc og tildel
u=Ubound(doc.salaryNo)+2
array = doc.salaryNo
Redim Preserve array(u)
array(u -1) = "test"
array(u) = "test2"
doc.salaryNo = array
Avatar billede jogii Nybegynder
22. juli 2004 - 10:40 #6
En anden ting er at smide det over i en variant til mellembehandling. Varianter er ligeglade med formatet. F.eks.:
    Dim array0 as Variant
    array0 = Doc.SalaryNo
    Dim u as integer
    u=ubound(array0)+ 1
Avatar billede sbay Nybegynder
22. juli 2004 - 11:00 #7
Hvis jeg skriver: Dim array0 as Variant virker array0 = Doc.SalaryNo ikke.
Men hvis jeg skriver Dim Array virker det godt, men så virker array(u-1) = "test" og array(u) = "test2" ikke!!!!!
Avatar billede jogii Nybegynder
22. juli 2004 - 11:23 #8
Hvad hvis du skriver
  Redim array
og senere redimmer
  Redim Preserve array(u)
?
Avatar billede sbay Nybegynder
22. juli 2004 - 11:45 #9
det kan man ikke.... det fejler!
22. juli 2004 - 12:03 #10
Dette eksempel virker i sin helhed, hvis du laver det som en agent:
Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set doc = New NotesDocument ( db )
    doc.salaryNo = "test0"
    Dim array
    Dim u As Integer
'erklær doc og tildel
    u=Ubound(doc.salaryNo)+2
    array = doc.salaryNo
    Redim Preserve array(u)
    array(u -1) = "test"
    array(u) = "test2"
    doc.salaryNo = array
End Sub
Avatar billede sbay Nybegynder
22. juli 2004 - 12:30 #11
Det forstår jeg ikke. Jeg får en fejl når den kommer til Redim: Illegal REDIM.
Avatar billede pr0gm4n Nybegynder
22. juli 2004 - 14:56 #12
--> jogii, hvor starte med en Redim?? Re. henviser vel til at man gentager noget man har gjort i dette tilfælde at Dim'me.

Eller er der en best practise som jeg har overset?
Avatar billede sbay Nybegynder
22. juli 2004 - 15:41 #13
Jeg har løst det med følgende:
    Dim V As Variant
    Dim U As Integer
    V = Doc.GetItemValue(FieldName)
    If V(0) = "" Then
        U = 1
    Else
        U = Ubound(V) + 1
    End If
    Redim Preserve V(U)
    V(U) = FieldValue
    Call Doc.ReplaceItemValue(FieldName, V)
Avatar billede jogii Nybegynder
22. juli 2004 - 18:17 #14
Vedr. Redim, så er det min erfaring at det ikke virker hvis man først dimmer og derefter redimmer. Man skal så at sige fortælle den at man agter at gøre det senere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester