Avatar billede svjensen Nybegynder
27. september 2010 - 16:03 Der er 4 kommentarer

Multi selektion fra liste til forespørgsel

Jeg anvender Access 2003.

Jeg har en QBF, hvor brugeren har mulighed for at vælge en værdi i en liste ('Grøn', 'Gul' og 'Rød'), som så afgrænser den tilhørende forespørgsel.

Jeg kunne godt tænke mig at give brugeren mulighed for at vælge mere end én værdi, så forespørgslen fx skal vise alle poster med værdien 'Grøn' eller 'Rød'.

Jeg har forsøgt mig ved, at "pakke" værdierne i en kommasepareret liste i formularen, inden forespørgslen åbnes, og har så forsøgt med følgende kriterie i forespørgslen:
In([Forms]![frmSelectStatus]![txtStatus])

Men det vil ikke rigtigt lykkes.
Er der nogen gode ideer til, hvordan jeg kan løse problemet?

/Søren
Avatar billede neoman Novice
27. september 2010 - 22:53 #1
fra http://www.mvps.org/access/forms/frm0007.htm

(Q) I have a MultiSelect listbox control on my form. I want to pass the selected items to a query as a parameter. How do I do this?

(A) Unlike simple listbox controls which can be referenced as a parameter by a query, MultiSelect listboxes cannot be used directly as a parameter. This is because calling the listbox (Forms!frmMyForm!lbMultiSelListBox) from anywhere will not automatically concatenate all the selected items. You need to build the criteria yourself.

Note: You can still use a parameterized query provided you pass the entire Where clause to it via code as a parameter. (eg. Have the query reference a hidden control to which you manually assign the complete WHERE clause using the following logic.)

For example,

'******************** Code Start ************************
Dim frm As Form, ctl As Control
Dim varItem As Variant
Dim strSQL As String
    Set frm = Form!frmMyForm
    Set ctl = frm!lbMultiSelectListbox
    strSQL = "Select * from Employees where [EmpID]="
    'Assuming long [EmpID] is the bound field in lb
    'enumerate selected items and
    'concatenate to strSQL
    For Each varItem In ctl.ItemsSelected
        strSQL = strSQL & ctl.ItemData(varItem) & " OR [EmpID]="
    Next varItem

    'Trim the end of strSQL
    strSQL=left$(strSQL,len(strSQL)-12))
'******************** Code end ************************
Avatar billede svjensen Nybegynder
28. september 2010 - 10:16 #2
Ok, det er også noget i den retning jeg forestillede mig.
Men jeg er i tvivl om, hvordan min forespørgsel så skal se ud.

I min hidtidige simple QBF havde jeg valgt en række felter fra forskellige tabeller, som skulle vises på baggrund af brugerinputtet.
For en af disse ('StatusId') havde jeg indsat kriteriet '[Forms]![frmSelectStatus]![lstStatus]'.

Jeg pakker nu min WHERE klausul i kontrollen 'txtStatus', og har forsøgt at referere til denne i stedet. Men det kan jeg ikke få til at virke...

Nogen bud?
Avatar billede neoman Novice
28. september 2010 - 17:53 #3
Hvad er indholdet af txtStatus?

Hvordan ser referencen til denne ud?

Hvad er fejlmeddelelsen?

Husk lige, at "virker ikke" ikke indeholder nogen ledetråde for udenforstående :-)
Avatar billede svjensen Nybegynder
29. september 2010 - 07:51 #4
:-) Det har du selvfølgelig ret i .

Jeg har prøvet med lidt af hvert, herunder:
- 'WHERE StatusId = 1 OR StatusId = 3'
- 'StatusId = 1 OR StatusId = 3'

Referencen til txtStatus har jeg indsat under kriterier for det pågældende felt i min forespørgelse: [Forms]![frmSelectStatus]![txtStatus]
Jeg tænker, at det nok ikke er vejen frem, men er usikker på, hvor jeg ellers skal have det ind.

Når jeg kigger på indlægget fra mvps.org, så bygger de hele sql sætningen op. Er det nødvendigt?
Og hvordan vil man så kunne anvende det i forespørgslen?
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