Toon posts:

[Access] Meerdere filters op meerdere velden.

Pagina: 1
Acties:
  • 362 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Via een formulier probeer ik op meerdere items te filteren.
Dit wil alleen niet lukken, omdat er blijkbaar maar op 1 item tegelijk gefilterd kan worden.

Dit formulier als voorbeeld:
Afbeeldingslocatie: http://xs106.xs.to/xs106/06376/db1.gif

De waarden in het formulier komen uit een simpele tabel.
De dropdownmenu's erboven gebruik ik om de waarde van de filter te bepalen, dit met de volgende code:

Filter voor nummer:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Sub FilterNummer_AfterUpdate()

If FilterNummer.Text = "" Then
Me.FilterOn = False
Exit Sub
End If

Me.Filter = "Nummer = """ & FilterNummer.Value & """"
Me.FilterOn = True

End Sub
De filter voor "Letter" is volgens de zelfde methode.

Als ik nu eerst filter op "Nummer" lijkt het te werken, maar zodra ik op "Letter" filter wordt de filter van "Nummer" ongedaan gemaakt waardoor alle records met bijvoorbeeld de letter B zichtbaar worden.

Resultaat:
Afbeeldingslocatie: http://xs106.xs.to/xs106/06376/db2.gif

Gewenst resultaat:
Afbeeldingslocatie: http://xs106.xs.to/xs106/06376/db3.gif

Na heel wat uren uitzoeken ben ik niet tot de oplossing gekomen.
Weet iemand hoe dit op te lossen is?

Hier is de testdatabase te vinden.

Alvast bedankt!

  • jurma
  • Registratie: December 2003
  • Laatst online: 00:09

jurma

simply connecting...

Dit komt omdat je twee filters los staan van elkaar. Je kan ook proberen om eerste de waarde te lezen uit het veld nummer en visa versa.

If you want to be serious, we make a powerpoint presentation.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 26-07 17:36

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Als ik het goed begrijp wil je één filsterstring krijgen zoals:
Visual Basic:
1
Me.Filter = "Nummer = '" & FilterNummer.Value & "' AND Letter = '" FilterLetter.Value & "'"

Je bent er dus al bijna.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Verwijderd

Topicstarter
zwippie schreef op zaterdag 16 september 2006 @ 16:00:
Als ik het goed begrijp wil je één filsterstring krijgen zoals:
Visual Basic:
1
Me.Filter = "Nummer = '" & FilterNummer.Value & "' AND Letter = '" FilterLetter.Value & "'"

Je bent er dus al bijna.
Ik heb al geprobeerd beide filters in één regel te krijgen, kon helaas niet op de goede notatie komen.

Deze werkt helaas ook niet :S

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Toch zal het op 1 regel moeten komen te staan.
Misschien moeten de enkele quotes nog weg rondom FilterNummer.Value, omdat het type daar eventueel wel een getal is (ik heb je db niet gedownload).

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op zaterdag 16 september 2006 @ 16:14:
[...]


Ik heb al geprobeerd beide filters in één regel te krijgen, kon helaas niet op de goede notatie komen.

Deze werkt helaas ook niet :S
Die werkt dus perfect :)

Wat je waarschijnlijk fout doet is datje probeert al een dubbele voorwaarde op te bouwen nog vóór beide velden gevuld zijn. Dat levert je een ongeldige syntax op met meestal een idiote foutmelding.

Wat je moet doen is in een procedure beide velden checken op een waarde en dan een criteriumstring opbouwen die je vervolgens aan je form filter toekent. Die procedure roep je in beide after_updat events aan.

offtopic:
Hoewel ik er meestal de voorkeur aan geef niet het formulierfilter aan de te passen maar direct de sql string die aan het formulier ten grondslag ligt. Maar da's meer ene kwestie van gewoonte en smaak, en soms van performance en gebruikersinterface. :)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1