Haves: Tabeller med henholdvis persondata og værelsesnr. Formular hvor værelsesnr inskrives vha kombinationsfelt.
Spørgsmål.: Kan "brugte" værelsesdata udlukkes fra kombinationsfelt så det ikke er muligt at vælge det samme værelse igen? Det må ikke slettes, det skal kunne anvendes igen hvis der sker ændringer i værelsestildelingen.
Ja det kan sagtens lade sig gøre - kombinationsfeltets datakilde skal være en forespørgsel der ikke medtager "brugte". Hvis du vil have noget mere konkret så lad os vide tabel/feltnavne og kombinationsfeltet datakilde. Mvh
Og en form, "Bookings" med enslydende controlelmenter bortset fra "bEnd" istedet for "end" havende form_Bookings indeholdende: ''''''''''''''''''''''''''''''''' Private Sub Form_Current() syncKroom End Sub
Private Sub bEnd_AfterUpdate() syncKroom End Sub
Private Sub start_AfterUpdate() syncKroom End Sub
Private Sub syncKroom() If IsNull(start) Or IsNull(bEnd) Then Kroom.ControlSource = "" Kroom.RowSourceType = "Value List" Kroom.RowSource = "udfyld start og slut tidspunkt" Kroom.ColumnWidths = "5cm" Else Kroom.ControlSource = "room" Kroom.RowSourceType = "Table/Query" Kroom.ColumnWidths = "0cm;4cm" Kroom.RowSource = _ "SELECT rooms.id, rName from Rooms where not id in " _ & "(select rooms.id FROM Rooms inner join Bookings on rooms.id=bookings.room where " _ & "cdate(Forms!bookings!start) < end and cdate(Forms!bookings!end) >start)" End If Kroom.Requery End Sub '''''''''''''''''''''''''''''''
Kombinationsboksen Kroom sættes ved oprettelse til det samme som IsNull(start) ... delen - dog: antalkolonner=2 bundetkolonne=1
Så lige at sidste del kan skrives kortere men det er rent 'syntatic sugar'
Private Sub syncKroom() Dim syncType syncType = -(IsNull(start) Or IsNull(bEnd)) With Kroom .ControlSource = Array("room", "")(syncType) .RowSourceType = Array("Table/Query", "Value List")(syncType) .ColumnWidths = Array("0cm;4cm", "5cm")(syncType) .RowSource = Array(KroomSQL, "udfyld start og slut tidspunkt")(syncType) .Requery End With End Sub
Private Function KroomSQL() KroomSQL = "SELECT rooms.id, [rName] from Rooms where not id in " _ & "(select rooms.id FROM Rooms inner join Bookings on rooms.id=bookings.room where " _ & "cdate(Forms!bookings!start) < end and cdate(Forms!bookings!end) >start)" End Function
Tabelnavn: Værelser til rådighed Felter: Værelse - Id Tabelnavn: Tildelt værelse Felter: Værelse - navn - Id Formnavn: Tildelt værelse Rækkekilde:SELECT [Værelser til rådighed].Værelse FROM [Værelser til rådighed] ORDER BY [Værelser til rådighed].Værelse;
Der er jo så ingen afhængighed af andre felter når et værelse skal udvælges og dermed ingen grund til at at kombinationsboksens egenskaber ændres dynamisk.
Kombinationsboksen kan stadig laves med blandt andet:
1. Rækkekilde: select ... where not "feltnavn" in ("select feltnavn ...) 2. Requery på en eller anden event.
Måske andre har noget at tilføje.
Synes godt om
Ny brugerNybegynder
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.