Avatar billede mhass Nybegynder
05. oktober 2004 - 21:35 Der er 13 kommentarer og
1 løsning

Hvordan gemmer jeg værdier fra en listbox når man vælger flere

Hejsa

Jeg har en listbox, hvorfra man kan vælge flere værdier, men værdierne bliver ikke gemt når jeg vælger flere.

Jeg har selv fundet frem til at man på en eller anden måde skal sætte access til at gemme værdien i en anden tabel, men kan ikke finde ud af hvordan jeg skal gøre det.

Jeg har en tabel der hedder COMPANY hvori der i kollonnen SERVICES kan vælges flere muligheder i en listbox. Skal jeg så oprette en ny tabel til relationerne, og hvordan "skriver" jeg formen så den gemmer værdierne der?

På forhånd tak
Avatar billede mhass Nybegynder
05. oktober 2004 - 21:37 #1
Forresten arbejder jeg i Access 2003...
Avatar billede dannynielsen Nybegynder
05. oktober 2004 - 22:29 #2
i den event du ønsker skal starte overførslen af valgte data fra list kontrollen, indsætter du følgende kode:

Private Sub Kommandoknap2_Click()
    Dim ctl As Control
    Dim varItm As Variant

    Set ctl = Me.Liste0
   
    For Each varItm In ctl.ItemsSelected
        DoCmd.RunSQL "insert into tblSelectedCompany VALUES ('" & ctl.ItemData(varItm) & "')"
    Next varItm
End Sub

koden løber gennem alle valgte data og indsætter de valgte i en tabel, som hedder tblSelectedCompany. I det valgte eksempel har jeg brugt en knap kontrol.
Avatar billede kabbak Professor
05. oktober 2004 - 22:52 #3
sætter de valgte ind efter hunanden i samme felt med ; imellem

Private Sub Kommandoknap2_Click()
For intCurrentRow = 0 To Liste0.ListCount - 1
        If Liste0.Selected(intCurrentRow) Then
            strItems = strItems & Liste0.Column(0, _
                intCurrentRow) & ";" ' ";" kan udskiftes med "," eller andet
        End If
    Next intCurrentRow
DoCmd.RunSQL "INSERT INTO COMPANY (SERVICES) VALUES ('" & Left(strItems, Len(strItems) - 1) & "')"

End Sub
Avatar billede mhass Nybegynder
06. oktober 2004 - 08:31 #4
Jeg er lidt dummy i det her access, så jeg ved ikke hvor jeg skal indsætte koden henne? Hvad skal jeg klikke på??? :-)
Avatar billede mhass Nybegynder
06. oktober 2004 - 12:09 #5
Jeg fandt ud af at sætte kabbak's kode ind, og det virker ikke helt efter hensigten, for hver gang jeg vælger noget, kommer der en dialogboks frem der spørger om jeg vil udføre det jeg har gang i, for så virker undo ikke mere... Derudover oprettes der en ny række i tabellen hver gang jeg laver en ændring, hvilket heller ikke er meningen....

Men det virker med at den indsætter flere værdier i samme felt :-)

Har I ideer til hvad en løsning kan være?
Avatar billede kabbak Professor
06. oktober 2004 - 12:32 #6
Hvordan ser din sql ud, den du brugte før, må jeg se den.?
Avatar billede mhass Nybegynder
06. oktober 2004 - 12:50 #7
hvis det er sq'en til at hente indholdet til listbox'en så er den

SELECT services.id, services.name FROM services ORDER BY [name];
Avatar billede kabbak Professor
06. oktober 2004 - 12:53 #8
nej det er den hvor du gemmer i COMPANY tabellen
Avatar billede mhass Nybegynder
06. oktober 2004 - 14:05 #9
hhmm...Den listbox før oprettede jeg via en guide, så jeg ved ikke hvor sql'en er?? Kan det forklares hvor jeg skal kigge?

Jeg har uploadet tabellen, hvis du orker at kigge. www.martinhass.dk/test/test.zip
Avatar billede kabbak Professor
06. oktober 2004 - 21:52 #10
Option Compare Database


Private Sub Form_Current()
Dim TempStr As Variant, I As Integer
For intCurrentRow = 0 To ServiceList.ListCount ' fravælger alle i listen
ServiceList.Selected(intCurrentRow) = False
Next

If Me.services <> "" Then
  TempStr = Split(Me.services, ";")
    For intCurrentRow = 0 To ServiceList.ListCount
        For I = 0 To UBound(TempStr)
          If ServiceList.Column(0, intCurrentRow) = Val(TempStr(I)) Then
            ServiceList.Selected(intCurrentRow) = True ' vælger dem der er brugt
          End If
      Next
  Next
End If
End Sub

Private Sub ServiceList_DblClick(Cancel As Integer)
For intCurrentRow = 0 To ServiceList.ListCount - 1
        If ServiceList.Selected(intCurrentRow) Then
          strItems = strItems & ServiceList.Column(0, intCurrentRow) & ";"
          ' ";" kan udskiftes med "," eller andet, men så skal den også skiftes i Form_Current()
        End If
Next intCurrentRow
   
If strItems <> "" Then
        Me.services.SetFocus
        Me.services.Text = Left(strItems, Len(strItems) - 1)
        Me.ServiceList.SetFocus
            Call Form_Current
        Me.Refresh
  End If
End Sub

Geg har omdøbt din Liste
Avatar billede kabbak Professor
06. oktober 2004 - 21:58 #11
nå det smuttede

Jeg har omdøbt din liste til ServiceList, og fjernet at den hænger på service feltet, det står  ud for Kontrolelementkilde i Properties

Sæt feltet service ned på formularen, du kan eventuelt skjule det, hvis du ikke vil se det, men det skal være der.

Kopier hele koden ind i din forms modul, så skulle det virke.

Angående opdatering, skal du dobbeltklikke for at opdatere, det skal gøres medens shift holdes nede ved flere makeringer.
Avatar billede kabbak Professor
07. oktober 2004 - 18:50 #12
Avatar billede mhass Nybegynder
08. oktober 2004 - 10:44 #13
Det spiller kabbak. Det er super. Mange tak for hjælpen. Vil du ikke have nogle point som tak for hjælpen?
Avatar billede kabbak Professor
08. oktober 2004 - 15:04 #14
et svar ;))
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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