Access, Query Invoermasker/Criteria

Status
Niet open voor verdere reacties.

NigellusTheNVG

Nieuwe gebruiker
Lid geworden
22 sep 2022
Berichten
3
Hi allen!

Ik ben op zoek naar een oplossing voor het volgende probleem:

Ik wil een zoekfunctie maken voor een bepaalde Cel in de database.
Deze is werkend, echter lukt het niet om één handeling te voltooien.

Het doel is het zoeken van een viercijferige code van een telefoonnummer in een formulier, die de gegevens uit een gelinkte query haalt.

Ik heb momenteel een invoerbalk met keuzemenu gemaakt omdat de nummers die uiteindelijk gevonden zijn dan ook gekozen moeten worden.
Hierin moeten dus vier cijfers worden ingevuld om vervolgens de matchende resultaten te zien in de balk.
Echter, moet de gebruiker, de viercijferige code kunnen intypen, de zoekbalk moet uit telefoonnummers van alle leads vervolgens deze viercijferige code vinden.

Ik ben zelf niet verder gekomen om de desbetreffende query van de criteria te vullen met ? danwel #.

In de database staan verschillende soorten telefoonnummers, daarnaast staat er tekst in de cel, dus het moet mogelijk zijn om op vier waarden van deze cel te zoeken.

Dus als ik 1569 invul, moet als eerste vier cijfers, ergens in het midden of aan het einde gevonden kunnen worden.

Omdat niet alle telefoonnummers op dezelfde manier zijn ingevuld (+316, +31 6, 06, 040, 04 09) lijkt me dit een onmogelijke opgave.

Ik hoop dat iemand me hiermee verder kan helpen!

Ik hoop dat alles een beetje duidelijk is, anders wil ik het graag nog even toelichten!

Alvast bedankt!

NigellusTheNVG
 
Echt heel duidelijk is het niet, maar ik vermoed dat je met de functies Replace (spaties verwijderen) en Instr (komt een string ergens voor) een heel eind moet kunnen komen.
Ik maakte bijvoorbeeld een query met de volgende WHERE clause:
Code:
WHERE InStr(Replace([Tel]," ",""),"1569")>0;
Vrij vertaald: zoek naar telefoonnummers waaruit spaties verwijderd zijn en waarin de string "1569" voorkomt.
 
De oplossing die in de meeste applicaties wordt gebruikt: zoekvelden. Je voegt een extra berekend veld toe aan je tabel waarin je de gestripte versie van het telefoonnr opneemt: alleen de cijfers, zonder spaties, streepjes of whatever. Als je dit systeem voor namen gebruikt: verwijder ook alle ¨/, é of è wordt E, ... enzovoort. Normaal maak je dit veld persistent zodat het ook weggeschreven wordt en niet steeds herrekend moet worden (ik weet niet of dit bij Access tabellen kan, in databases zeker wel). Als je geen berekend veld in een tabel wil : je kan hiervoor een eigen functie schrijven en deze éénmalig in een update query uitvoeren voor de bestaande gegevens. Daarna kan je in een formulier in een after update of via een data macro ervoor zorgen dat bij aanpassingen of toevoegen van gegevens dit veld up-to-date blijft.
Ik zou niet gaan zoeken in een berekend query veld, want eens dat je meer dan een paar honderd gegevens hebt kan ... dit ... ontzettend ... traag ... worden.
 
Gelukkig is Access niet 'in de meeste applicaties'; de oplossing van Peter lijkt mij meer dan afdoende. Zelf doe ik dat met een vergelijkbare zoekstring (Replace en Instr) op een keuzelijst met invoervak, waarbij je in het invoervak dus de geschoonde zoektekst typt en die dan als filter op het formulier gebruikt. En waarbij een klik op een waarde uit de gevonden lijst dan een actie start. Of, als je alleen een tekstveld wilt gebruiken waarmee je het doorlopende formulier kunt filteren, dan kan dat bijvoorbeeld zo:

Code:
Private Sub Zoektekst_Change()
Dim sZ As String

    sZ = Me.Zoektekst.Text
    If Len(sZ) > 0 Then
        Me.Filter = "[Telefoonnummer] Like ""*" & sZ & "*"""
        Me.FilterOn = True
        Me.Zoektekst.SelStart = Len(sZ)
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub

Deze methode werkt in jouw geval uiteraard niet perfect, omdat je de spaties niet weghaalt uit het telefoonnummer. Maar je kunt deze functie ook gebruiken om de onderliggende query aan te passen, en dat doe je dan door een WHERE te maken zoals Peter dat al voorstelt.
 
Query Zoekbalk

Ik heb alle foto's van de verschillende tabs even hierin gezet.

Ik denk dat het aardig in de goede richting is, maar ben specifiek naar één functie op zoek.

Ik heb een Tabel Eigenaren met de eigenaren en de nummers.
Ik heb een Query waarin er gezocht kan worden.
Ik heb het eigenschappenvenster van de Query gedeeld.
Tot slot heb ik ook het dropdown menu gedeeld waarin gezocht moet worden.

In dit voorbeeld komen er meerdere nummers voor waar 555 in zit.

Ik wil in de zoekbalk, welke de nummers en de eigenaren laat zien, bijvoorbeeld kunnen zoeken op 555.
Hierin moet de zoekbalk dan alle eigenaren laten zien waarvan het nummer 555 bevat.

Echter, moet deze dus ook de combinaties 55 5 en 5 55 laten zien.

Ik hoop dat ik het hiermee iets duidelijker heb gemaakt.

Alvast bedankt voor de moeite en tijd.
 

Bijlagen

  • Voorbeeld 1.PNG
    Voorbeeld 1.PNG
    8,9 KB · Weergaven: 27
  • Voorbeeld 2.PNG
    Voorbeeld 2.PNG
    12,8 KB · Weergaven: 28
  • Voorbeeld 3.PNG
    Voorbeeld 3.PNG
    12,3 KB · Weergaven: 28
  • Voorbeeld 4.PNG
    Voorbeeld 4.PNG
    10,6 KB · Weergaven: 31
  • Voorbeeld 5.PNG
    Voorbeeld 5.PNG
    22,4 KB · Weergaven: 27
Je kan je query dan toch aanpassen / aanvullen met de suggestie die ik deed? Het enige dat je aan moet passen is dat er geen vaste waarde ("1569") in staat, maar dat je op die plek verwijst naar het veld op het zoekformulier.
 
Query Zoekbalk

Hoe komt de formule er dan uit te zien? Ik heb nooit eerder met dit soort formules gewerkt.

Alvast bedankt!
 
Er zijn meerdere wegen die naar Rome leiden. Ik heb een formulier gemaakt waar je een deel van een nummer in kan geven. Op het formulier staat een subformulier voor de resultaten. Ook staat er een knop om de resultaten in te perken op basis van de ingave:
Code:
Private Sub Zoek_Click()

If IsNull(Me.ZoekTel) Then
    MsgBox "Vul (een deel van) een nummer in", vbCritical, Invullen
Else
    Me.frmZoekResultaat.Form.RecordSource = "SELECT * FROM Eigenaren WHERE InStr(Replace([Nummer 2],' ',''),'" & Me.ZoekTel & "')>0"
End If


End Sub
Ik heb een voorbeelddatabase bijgevoegd.

Nog een tip(je): gebruik bij voorkeur geen veldnamen met spaties of speciale tekens. Dat kan problemen opleveren. Hier moest ik bijvoorbeeld Nummer 2 tussen haken zetten.
 

Bijlagen

  • Zoeken.zip
    29,5 KB · Weergaven: 16
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan