[Access] Subform1 filter toepassen op Subform2

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-10 22:04
Ik heb een nu nog vrijwel lege Access database met een form met 2 subforms. Subform1 is een overzicht met devices waarbij Serial het unieke veld is. Subform2 is een overzicht met software waarbij Serial uit subform1 het one to many veld is. Zie afbeelding:

Afbeeldingslocatie: https://tweakers.net/ext/f/2tV9HUvtvlkPT6Gp4w1V4sFq/full.png
Nu wil ik dat als ik een filter in Subform2 (Software) toepas, dat Subform1 ook filtert op Serial (en de andere filters in Subform1 ongemoeid laat).

Ik kan het event OnApplyFilter toepassen in VBA. Een andere mogelijkheid is misschien om na het filteren van Subform2, Subform1 een query te laten uitvoeren waarbij alleen de Serials van Subform2 worden meegenomen.

[ Voor 6% gewijzigd door Swerfer op 11-02-2018 20:19 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com

Alle reacties


  • Joep
  • Registratie: December 2005
  • Laatst online: 00:42
De meest voor de hand liggende methode lijkt me inderdaad gebruik maken van het On-Apply-Filter-event van subform2. Wat ik vervolgens dan zou doen is uitzoeken welke serienummers er na de filter getoond worden in subform2. En dat lijkt niet lekker te gaan d.m.v. Me.Recordset, want On Apply Filter wordt aangeroepen voordat het filter wordt toegepast, dus Me.Recordset bevat de records van voor het toepassen van het filter. Ik zou Me.RecordSource en Me.Filter gebruiken om daarmee samen een recordset of een array te vullen. Die moet je dan vervolgens doorlopen om de serienummers die je nodig hebt toe te passen op form_subform2.RecordSource en/of form_subform2.filter, allemaal tijdens het On-Apply-Filter-event van subform2.

Misschien dat je met wat meer zoekwerk een handigere methode vindt, maar dit is waar ik in een kwartier op kom.

Edit: Ben benieuwd wat je ervan vindt.

Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-10 22:04
Joep schreef op donderdag 15 februari 2018 @ 21:55:
De meest voor de hand liggende methode lijkt me inderdaad gebruik maken van het On-Apply-Filter-event van subform2. Wat ik vervolgens dan zou doen is uitzoeken welke serienummers er na de filter getoond worden in subform2. En dat lijkt niet lekker te gaan d.m.v. Me.Recordset, want On Apply Filter wordt aangeroepen voordat het filter wordt toegepast, dus Me.Recordset bevat de records van voor het toepassen van het filter. Ik zou Me.RecordSource en Me.Filter gebruiken om daarmee samen een recordset of een array te vullen. Die moet je dan vervolgens doorlopen om de serienummers die je nodig hebt toe te passen op form_subform2.RecordSource en/of form_subform2.filter, allemaal tijdens het On-Apply-Filter-event van subform2.

Misschien dat je met wat meer zoekwerk een handigere methode vindt, maar dit is waar ik in een kwartier op kom.

Edit: Ben benieuwd wat je ervan vindt.
Joep bedankt voor dit antwoord. Inmiddels had ik al een oplossing gevonden met het OnApply event op subform 2. Ik heb een extra table aangemaakt met dezelfde velden als de tabel die oorspronkelijk aan subform 1 gekoppeld was. De subform1 is nu gekoppeld aan de extra tabel. In de OnApply van subform 2 voer ik het volgende uit:

- Delete alles uit de extra tabel
- Voer een INSERT uit voor de extra tabel met een SELECT op de oorspronkelijke tabel en de tabel bij subform 2 met een WHERE clause waar onder andere het filer in zit van subform 2 (Me.Form.Filter).
- Doe een requery voor subform 1 om de data te tonen.


Dit werkt perfect en snel en lijkt mij een gode oplossing. Ik had al gedacht om alle serienummers te gaan doorlopen in een recordset zoiets als jij aangeeft, maar had het gevoel dat dat een performance probleem zou opleveren en toen schoot mij bovenstaande methode binnen.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • Joep
  • Registratie: December 2005
  • Laatst online: 00:42
Oh, je brengt me op een idee voor een nog efficiëntere methode:

On Apply Filter, SQL-RecordSource van SubForm2 aanpassen, zodat je alleen het Serienummer selecteert en daar de Me.filter achteraanplakken: "SELECT Serienummer FROM Tabel1" & Me.Filter in een string pleuren zodat je die kunt toevoegen aan de volgende string:

strSQL = "SELECT * FROM Tabel1 WHERE Serienummer IN " & bovenstaande string

Form_SubForm1.RecordSource = strSQL

Form_SubForm1.requery

En je bent er. Ik weet de exacte syntax van alle commando's niet uit m'n hoofd, dus misschien klopt er iets niet helemaal, maar het idee lijkt me duidelijk. Ik weet de structuur van de tabellen niet, dus misschien dat de SQL-code beter kan d.m.v. een Inner Join o.i.d.

[ Voor 11% gewijzigd door Joep op 16-02-2018 10:11 ]


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-10 22:04
Joep schreef op vrijdag 16 februari 2018 @ 10:02:
Oh, je brengt me op een idee voor een nog efficiëntere methode:

On Apply Filter, SQL-RecordSource van SubForm2 aanpassen, zodat je alleen het Serienummer selecteert en daar de Me.filter achteraanplakken: "SELECT Serienummer FROM Tabel1" & Me.Filter in een string pleuren zodat je die kunt toevoegen aan de volgende string:

strSQL = "SELECT * FROM Tabel1 WHERE Serienummer IN " & bovenstaande string

Form_SubForm1.RecordSource = strSQL

Form_SubForm1.requery

En je bent er. Ik weet de exacte syntax van alle commando's niet uit m'n hoofd, dus misschien klopt er iets niet helemaal, maar het idee lijkt me duidelijk. Ik weet de structuur van de tabellen niet, dus misschien dat de SQL-code beter kan d.m.v. een Inner Join o.i.d.
Dat is ook een mogelijkheid ja. Ik zal eens kijken komende week of ik dat kan toepassen. Dank.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com