Avatar billede -anders- Juniormester
17. marts 2014 - 22:03 Der er 5 kommentarer og
1 løsning

Begrænse poster på en liste i en formular

Hej Eksperter

Jeg sidder og roder med et problem som jeg ikke kan få løst, spørgsmålet er om det kan løses. Den er lidt tricky. Kort fortalt går det ud på følgende:

Jeg har 3 tabeller

tblitems:
tabellen er en side af en relation i tabellen er der et nøglefelt ItemID

tblroller:
tabellen er en side af en relation i tabellen er der et nøglefelt RolleID

tbldata:
tabellen er mange side af relationen i tabellen er der 2 felter Item og Rolle. Disse 2 felter er opslagsfelter hvor Item slår op i tblitems, og rolle slår op i tblroller. Alt omkring relationer fungere fint, og de data jeg registere i tblroller/tblitems tilføjes tbldata. Alt i alt et standard design for en lille relationsdatabase.

Nu skal en eventuel bruger jo ikke sidde og rode rundt i tabellerne derfor har jeg lavet en formular (frmredigerrolle) som for data fra en sammensat forspørgsel. På denne formular er der en underformular som viser de data fra tblitems der er registreret for den valgte rolle, det virker også fint. På formularen er der så en knap som åbner en anden formular, på denne formular har jeg indsat en listbox (lst010) som lister alle items (poster) som er registeret i tblitems listen har 2 kolonner, kollonne 0 er ItemID, kolonne 1 er ItemNavn. Og nu kommer det!

Listen viser jo alle Items, også dem som allerede er registeret for den valgte rolle, kan man lave en SQL sætning eventuelt i VBA som kun lister de Items (poster) i listboxen som der ikke er registeret for den valgte rolle. Jeg kender jo ItemID fra feltet Item i tbldata (kolonne 0 i list010), og RolleID fra feltet Rolle i tbldata (RolleID er i den åbne formular frmredigerrolle). Kan det løses med en SQL sætning som kan anvendes som rækkekilde i min listbox, måske noget med "Not IN"?

Jeg har søgt noget rundt, men finder ikke rigtig noget. Nogen der kunne have et forslag til en løsning.

Hilsen
Anders.
Avatar billede -anders- Juniormester
17. marts 2014 - 22:26 #1
Jeg har nedenstående kode hvor DLookUp forhindre at en post som allerede er tilføjet den valgte rolle tilføjes igen, men jeg er mere "varm" på en anden løsning :-)

Private Sub cmdgem_Click()
Dim i As Variant
Dim rs As ADODB.Recordset
i = Me!lst010
For Each i In Me!lst010.ItemsSelected

'Nedenstående LookUp spørger på om Den eller de valgte poster på lst010 alle findes i tbldata, hvis de gør tilføjes de ikke igen'

If DLookup("[Rolle]", "tbldata", "[Rolle] = " & Form_frmredigerrolle!RolleID & " And [Item] = " & Me!lst010.Column(0, i)) Then

'valgte poster på lst010 tilføjes'

Else

Set rs = New ADODB.Recordset
rs.Open "tbldata", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.AddNew
rs!Item = lst010.Column(0, i)
rs!Rolle = Form_frmredigerrolle!RolleID
rs.Update
rs.Close
Set rs = Nothing
End If
Next i
DoCmd.Close acForm, Me.Name
Form_frmvisrelationerforrollegrupper.Requery
End Sub
Avatar billede terry Ekspert
18. marts 2014 - 18:05 #2
Hi anders
Its been a long day at work so I'm finding it hard to grasp what your after. Is it possible to see the dB or an example and maybe an explanation with examples?

ekspertenATsanthell.dk
AT = @
Avatar billede -anders- Juniormester
18. marts 2014 - 20:25 #3
Hej Terry

Tak for indlægget, dejligt at se at du stadig er aktiv på eksperten :-)

Jeg laver lige et eks. til dig og sender senere i aften.
Avatar billede terry Ekspert
19. marts 2014 - 10:35 #4
Not as active as I have been but get by once in a while :-)
Havent seen much to you either ...

SELECT tblitems.ItemID, tblitems.ItemNavn
FROM tblitems where tblitems.ItemID NOT IN (SELECT tbldata.Item FROM tbldata WHERE tbldata.Rolle=[Forms]![frmredigerrolle]![RolleID])
Avatar billede -anders- Juniormester
19. marts 2014 - 11:17 #5
elegant løsning Terry, angiv nedenstående SQL som Rowsource for listboxen.

SELECT tblitems.ItemID, tblitems.ItemNavn
FROM tblitems where tblitems.ItemID NOT IN (SELECT tbldata.Item FROM tbldata WHERE tbldata.Rolle=[Forms]![frmredigerrolle]![RolleID])

Takker mange gange for hjælpen

Hilsen
Anders.
Avatar billede terry Ekspert
19. marts 2014 - 11:36 #6
selv tak
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