17. marts 2014 - 22:03Der 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.
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
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?
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])
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])
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.