[ACCESS] Multiselect / Meervoudige selectie opslaan

Pagina: 1
Acties:
  • 544 views sinds 30-01-2008
  • Reageer

  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Er zijn meer vragen over mutliselect geweest maar op deze wordt geen antwoord gegeven. Het probleem met multiselect binnen Access is dat deze wel getoond kunnen worden maar opslaan ho maar.
Heeft iemand heier ervaring mee?

Ik zal mijn situatie schetsen: Ik wil voor een eunquete meerdere opties laten invullen om bijvoorbeeld meerdrer folders te ontvangen. Ik wil dit moet met een meervoudige selectie / multiselect (dit is een optie bij een keuzelijst in het tabblad overigen). Alles gaat goed en ik kan ook meerdere opties selecteren, maar er wordt niets opgeslagen. Hoe los ik dit op?

Ik bne via Google aan een script gekomen. Deze werkt echter niet. Is er een simpelere mannier?

Graag hulp... _/-\o_

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Als het goed is kun je in VBA door de volledige selectielijst heenlopen en deze dus vervolgens opslaan. Kijk eens in de help van Access naar multi selectie en hoe je daar doorheen kunt wandelen?

Overigens is het wel ingewikkeld je te helpen met je script als je dat niet hier post :X ;)

My personal website


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Dit is het script:

code:
1
2
3
4
5
6
7
8
9
10
11
Public Sub WriteMultiListBox(lstBox As ListBox)
Dim varItem As Variant
Dim Obj As New StringObj
   'als je een andere tekstscheider wilt, de volgende regel activeren en aanpassen
   'Obj.Init "", <scheidingstekst>
   For Each varItem In lstBox.ItemsSelected
      Obj.Add lstBox.ItemData(varItem)
   Next varItem
   lstBox.Parent(lstBox.ControlSource) = Obj.Value
   Set Obj = Nothing
End Sub


Deze krijg ik in mijn formulier dus niet aan de praat. Ik zou dus graag willen weten of er niet een makkelijkere mannier is.

[ Voor 23% gewijzigd door mbooij op 30-09-2003 14:57 ]

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Nee, er is volgens mij niet een makkelijkere manier. Dit script geeft je alle dingen die je hebben moet (ItemsSelected, For Each, et cetera). Je zult echter dit script zo moeten aanpassen dat het op jouw form past. Ik verwacht dan ook dat jouw listbox waarin je mag multiselecten niet lstBox heet...?

Wat is overigens je foutmelding, wat werkt er niet, enzovoorts?

My personal website


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Access geeft als error:

Proceduredeclaratie komt niet overeen met de beschrijving van de gebeurtenis of de procedure met de zelfde naam.

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Ik ben een stapje verder... de bovenstaande error kwam door het fout aanroepen van de functie... ik ben tegen een ander probleem gelopen:

Dit is mijn Code volledig:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'Aanroepen van de functie:
Private Sub lstVraag4_AfterUpdate()
WriteMultiListBox (lstVraag4)
End Sub

'De functie zelf
Public Sub WriteMultiListBox(lstBox As ListBox)
Dim varItem As Variant
Dim Obj As New StringObj
   'als je een andere tekstscheider wilt, de volgende regel activeren en aanpassen
   'Obj.Init "", <scheidingstekst>
   For Each varItem In lstBox.ItemsSelected
      Obj.Add lstBox.ItemData(varItem)
   Next varItem
   lstBox.Parent(lstBox.ControlSource) = Obj.Value
   Set Obj = Nothing
End Sub


Ik krijg een foutmelding nr 424. Access geeft aan dat een object vereist is. Ik snap deze niet want ik heb al een variabel meegegeven.

[ Voor 9% gewijzigd door mbooij op 30-09-2003 14:56 ]

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Hier is een stukje voorbeeld code dat wel werkt. Misschien kun je hier mee verder...
code:
1
2
3
4
5
6
7
8
9
10
Private Sub lstVraag4_AfterUpdate()
  WriteMultiListBox lstVraag4
End Sub

Public Sub WriteMultiListBox(lstBox As ListBox)
  Dim varItem As Variant
  For Each varItem In lstBox.ItemsSelected
    MsgBox lstBox.ItemData(varItem)
  Next varItem
End Sub

  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
_js_ schreef op 30 September 2003 @ 12:50:
Hier is een stukje voorbeeld code dat wel werkt. Misschien kun je hier mee verder...
code:
1
2
3
4
5
6
7
8
9
10
Private Sub lstVraag4_AfterUpdate()
  WriteMultiListBox lstVraag4
End Sub

Public Sub WriteMultiListBox(lstBox As ListBox)
  Dim varItem As Variant
  For Each varItem In lstBox.ItemsSelected
    MsgBox lstBox.ItemData(varItem)
  Next varItem
End Sub
Komt al een heel stuk in de goede richting. Ik wil deze variabelen alleen niet in een msgbox zien maar in een veld proppen. Mogelijk met ; of , onderscheden. Daar is de bovenstaande code voor. Hoe zorg ik nou dat deze variabelen in de tabel worden opgeslagen?

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Ik denk dat de handigste oplossing voor jou is om een verborgen tekstveld te gebruiken dat je gewoon aan een veld in je database hangt. Je laat dat lusje hierboven dus alle items samenvoegen in één string en deze gebruik je als waarde voor je verborgen tekstbox.

Overigens is dit natuurlijk eigenlijk een probleem met je datamodel. Het is een teken van slecht database design als je meer dan één waarde in een cel op moet slaan. In dat geval had je een extra tabel moeten gebruiken...

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

mbooij schreef op 30 september 2003 @ 13:02:
[...]
Komt al een heel stuk in de goede richting. Ik wil deze variabelen alleen niet in een msgbox zien maar in een veld proppen. Mogelijk met ; of , onderscheden. Daar is de bovenstaande code voor. Hoe zorg ik nou dat deze varabelen in de tabel worden opgeslagen?
Ga je vandaag ook nog zelf nadenken of moeten we je alles voorkauwen? :?

En let eens wat meer op de spelling in je postings, 3 typfouten per regel is echt irritant lezen :/

Professionele website nodig?


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Ben d'r uit.... Heb de code van mij met de code van _js_ gecombineerd. Het werkt. Variabelen worden in een veld gepropt. En euh Curry als je niets in te brengen hebt post dan nix.... ik zal de code van de werkende versie zo posten!!!

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Vergeet geen [norml]
Visual Basic:
1
...
[/] tags te gebruiken

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Dit is em dan de werkende code...

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub lstVraag4_AfterUpdate()
  WriteMultiListBox lstVraag4
End Sub

Public Sub WriteMultiListBox(lstBox As ListBox)
  Dim varItem As Variant
  For Each varItem In lstBox.ItemsSelected
    Variabel = Variabel & lstBox.ItemData(varItem) & " "
  Next varItem

'MsgBox (Variabel)
lstBox.Parent(lstBox.ControlSource) = Variabel
End Sub


ATS had echter wel een sterk punt dus ik het het datamodel van de database herzien. Dit ook omdat de variabellen niet terug te lezen waren. Ik heb het nu op gelost met groepboxen en meerdere velden om ze in op te slaan.

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing


  • mbooij
  • Registratie: September 2002
  • Laatst online: 19-08 19:55

mbooij

De Mosselman

Topicstarter
Hij is goed hé?

Intel i5 3570K@4.2Ghz, 2x4GB, MSI Z77A-G45, Club3D Radeon HD 7970 royalKing

Pagina: 1