Avatar billede margesimpson Nybegynder
06. november 2004 - 13:15 Der er 6 kommentarer og
1 løsning

Collection: Overskrive værdi, der allerede ligger i collection

Hej Eksperter,

Jeg indlæser nogle værdier fra en tekstfil til en collection og præsenterer disse værdier i et skærmbillede i textboxe, lists, comboboxe osv.

Brugeren skal kunne ændre i disse værdier, og jeg ønsker så at gemme disse ændrede værdier i min collection, dvs. overskrive eksisterende værdier i min collection.

Rækkefølgen af mine værdier i collection er vigig, og det er vigtigt, at jeg kan indsætte nye værdier mellem to eksisterende, hvorfor jeg har valgt at anvende collection i stedet for array.

MEN hvordan overskriver jeg de eksisterende værdier? Er det nødvendigt at remove den gamle værdi og add den nye, eller findes der ikke en smartere måde at gøre det på?

Mange hilsner
Avatar billede joern Nybegynder
07. november 2004 - 15:13 #1
Hej.

Jeg har kigget på dit spørgsmål et par gange, for at se hvilke svar du får.  Indtil nu har du altså ikke fået nogle.
Jeg anvender VB5 og har brugt arrays ofte, men aldrig collections.  Jeg ved ikke hvad jeg skulle bruge det til.

Måske skal du tænke anderledes med det du ønsker udført.  Du bør nok også nævne i spørgsmålet og disse ændringer er midlertidige eller skal lagres på disk - og hvordan hvis de lagres.  Anvendelse af Access er ingen selvfølgelighed, jeg bruger aldrig access.

M.v.h.  Jørn
Avatar billede margesimpson Nybegynder
07. november 2004 - 15:28 #2
Hej Jørn,
Grunden til at jeg ville bruge collections er, at jeg har behov for at kunne indsætte en værdi imellem to eksisterende værdier. Med arrays ville jeg skulle ind at flytte eksisterende værdier for at sætte en værdi ind imellem to andre.

Planen med programmet er at læse data fra en fil, give brugeren mulighed for at ændre data, og derefter skrive data til en anden fil, samt at skrive ændringer til en tredie fil, en logfil. Jeg har oprettet to collections, den ene til de oprindelige data og den anden til de nye data. Disse to sammenholder jeg til sidst før jeg skriver til logfil.
Avatar billede margesimpson Nybegynder
07. november 2004 - 15:32 #3
.....Jeg har oprettet to collections, den ene til de oprindelige data og den anden til de nye data...Dvs. jeg starter med at have to ens collections med de oprindelige data, og efterhånden som brugeren ændrer data, lægger jeg disse ændringer i nr. 2 collection.
Avatar billede joern Nybegynder
07. november 2004 - 15:49 #4
Hej.

Jeg har lavet en del database-programmer hvor jeg opbevarer data i ascii-filer.  Netop nu sidder jeg og tilføjer funktioner til min musik-database
http://jkfsoft.dk/musik32.htm

Den måde jeg giver brugeren mulighed for at ændre data ser således ud.  Der læses i 'musik-dat' indtil den aktuelle post, hver læst post skrives til filen 'musik.bak'.
Når det konstateres at det nu er den post der er rettet, læses i stedet fra tekstfelterne, der er et kontrol-array.
Derpå læses alle efterfølgende poster over i 'musik.bak' og til sidst når begge filer er lukket, kopieres 'musik.bak' til - og overskriver 'musik.dat'.

Da samme felter anvendes ved opretelse af nye poster - og sletning, er der kontrol-værdier for om det er en ny eller en sletning.

idu = Trim(txtmu(0).Text) & Trim(txtmu(1).Text)
   
  Open netsti & "musik.dat" For Input As #3
  Open netsti & "musik.bak" For Output As #4
    Do While EOF(3) = False
      For z = 0 To 14
        Line Input #3, melo(z)
      Next
      id = Trim(melo(0)) & melo(1)
     
      '--- Når posten er ny ------------------
      If ny = 1 Then
        If melo(0) = Trim(txtmu(0).Text) Then
heltny:
          For z = 0 To 14
            Print #4, txtmu(z).Text
          Next z
          ny = 0
          labtjekny.Caption = "genbrug"
        End If
       
        If EOF(3) = True Then If ny = 1 Then GoTo heltny      ' når båndnr. ikke findes i forvejen
      End If      ' ny =1
     
    If melo(2) = "slet" Then GoTo lig1        'sletning - flyttet udenfor "If" 06-11-2004
    If id = idu Then                                                  'rettelse
          For z = 0 To 14
            Print #4, txtmu(z).Text
          Next
          idu = ""
        Else
          For z = 0 To 14
            Print #4, melo(z)
          Next
      End If

lig1:
    'If id = idu Then txtmu(2).Text = bd(1)          'indsat 15-11-2003 så kun én af to ens poster slettes.
    If id = idu Then labtjekny.Caption = "genbrug"          'indsat 27-10-2004 så kun én af to ens poster slettes.
    Loop
  Close #3
  Close #4
 
  Clipboard.Clear
  Clipboard.SetText mp3sti & txtmu(0).Text & txtmu(1).Text & ".mp3", 1
 
  FileCopy netsti & "musik.bak", netsti & "musik.dat"

-------------------------------------------------------------------
I andre programmer med mindre datamængder opbevarer jeg data i lister, grids eller i arrays og skriver således direkte til datafilen når der er tilføjelser og rettelser.
Denne database har p.t. ca. 8000 poster.

M.v.h.  Jørn
Avatar billede margesimpson Nybegynder
08. november 2004 - 21:19 #5
Hej Jørn,

Jeg er indtil videre gået tilbage til at bruge arrays. Jeg vil senere prøve at bruge din løsning. Tak for det.
M.v.h.
Anja
Avatar billede joern Nybegynder
08. november 2004 - 21:23 #6
Hej.

Husk at lukke spørgsmålet.  Vil du senere diskutere brug af Ascii-filer så gem et link til jkfsoft.dk.

M.v.h. Jørn
Avatar billede nolle_k Nybegynder
10. november 2004 - 11:06 #7
Til hver entry i en collection kan du specificere en Key. Ved hjælp af denne Key kan du finde tilbage til din entry.

Dim a as New Collection
a.Add "Test", "Key1"
a.Add "Test2", "Key2"

Hvis du så skal ændre en værdi for "Key1" skriver du bare

a.Item("Key1") = "Test3"

Ret simpelt!
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
Kurser inden for grundlæggende programmering

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