[Access 2003] Zoekknop in een form doormiddel van query.

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

  • MrMartinH
  • Registratie: Juni 2001
  • Laatst online: 29-07-2024
Uhm kweenie of dit goede forum is ander verplaats maar.

Goed ik weet dat dergelijke vragen vaak langs zijn geweest, maar na 2 weken proberen en zoeken op got en google word ik toch een beetje moedeloos.

Goed wat is de bedoelling. Ik ben een datanase aan het maken voor vriendin van mijn moeder waarin personen moeten komen te staan. Ik heb een tabel en een formulier daaraan gekoppelt en ik kan personen toevoegen en evrwijderen, werkt perfect.

Maar ik heb ook een zoek formulier waarin het de bedoelling is dat er personen kunnen worden gezocht op voor en achternaam.

Een pic als verduidelijking:
Afbeeldingslocatie: http://members.chello.nl/~j.halbesma/Crap/data.jpg

Bovenin staat dus voornaam met een knop zoek ernaast. het is de bedoelling als daar een voornaam ingevult word en op de zoekknop geklikt word dat dan in de keuzelijst ernaast de resultaten worden weergegeven. De resultaten haalt hij uit een query genaamt "Persoonsgegevens Query" met darin op volgorde "Achternaam, Vooornaam en Tussenvoegsel" (op de laatste hoeft niet gezocht te worden)

De tekstbox naast 'voornaam' heet "voornaaminvoer" en de zoekknop "zoekvoor" De keuzelist heeft de naam "keuzelijst24" (nog niet hernoemt :P)

Hopelijk duidelijk zo.

Wat ik geprobeerd heb.
In de query een zoekcriteria opgeven (bij Criteria) onder bijvoorbeeld achternaam en een code onder de knop "zoekvoor" (heel haandig maar ben de code kwijt
8)7)

Maar dit is geen optie want dan krijg ik dus een pop-up box bij het openen van dat formulier waar ik de naam in moet vullen en dat is niet de bedoelling. Bovendient werkte het niet zo dat je steeds opnieuw kon zoeken, dan moest je eerst het formulier sluiten en weer openen.

Op internet vond ik deze code,

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option Compare Database
'--------------------------------------------------------------
'Graham Thorpe 25-01-02
'--------------------------------------------------------------
Private Sub cmdSearch_Click()
    Dim strStudentRef As String
    Dim strSearch As String
    
'Check txtSearch for Null value or Nill Entry first.

    If IsNull(Me![txtSearch]) Or (Me![txtSearch]) = "" Then
        MsgBox "Please enter a value!", vbOKOnly, "Invalid Search Criterion!"
        Me![txtSearch].SetFocus
    Exit Sub
End If
'---------------------------------------------------------------
        
'Performs the search using value entered into txtSearch
'and evaluates this against values in strStudentID
        
    DoCmd.ShowAllRecords
    DoCmd.GoToControl ("strStudentID")
    DoCmd.FindRecord Me!txtSearch
        
    strStudentID.SetFocus
    strStudentRef = strStudentID.Text
    txtSearch.SetFocus
    strSearch = txtSearch.Text
        
'If matching record found sets focus in strStudentID and shows msgbox
'and clears search control

    If strStudentRef = strSearch Then
        MsgBox "Match Found For: " & strSearch, , "Congratulations!"
        strStudentID.SetFocus
        txtSearch = ""
        
    'If value not found sets focus back to txtSearch and shows msgbox
        Else
            MsgBox "Match Not Found For: " & strSearch & " - Please Try Again.", _
            , "Invalid Search Criterion!"
            txtSearch.SetFocus
    End If
End Sub


Ik heb hier mijn eigen gegevens ingevuld en heb er wat mee aan lopen prutsen. het werkte maar niet.

verder heb ik gezocht en gezocht maar niks gevonden en ik weet dat zo ik het wil hebben mogelijk is maar ik ben het spoor kwijt. out of options here.

Signature


  • MrMartinH
  • Registratie: Juni 2001
  • Laatst online: 29-07-2024
Code alweer gevonden die ik gebruikte:

code:
1
2
3
4
5
6
7
8
9
Private Sub zoekvoor_Click()

Dim stdocname As String
Dim stlinkcriteria As String

stdocname = "Persoonsgegevens Query"
stlinkcriteria = Keuzelijst24.RowSource

End Sub


Maar goed werkt dus zoals boven beschreven.

Signature


  • Boss
  • Registratie: September 1999
  • Laatst online: 09:20

Boss

+1 Overgewaardeerd

Heb je nou nog een vraag of is het inmiddels opgelost? :?

Dat 2e stukje code komt uit een wizard, kan veel korter he!

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • MrMartinH
  • Registratie: Juni 2001
  • Laatst online: 29-07-2024
Uh, mijn vraag staat in mijn eerste post :?. Dus nee ik weet nog steeds niet hoe ik een zoekfunctie moet maken op de manier zo ik het begreep.

Enuhm, dat 2e stukje code had ik zelf geschreven wist niet dat van een wizzard was :). Maar goed ik moet ook toegeven dat ik geen vb expert ben.

Signature


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

OK, er zijn -- grofweg -- twee opties:
Optie 1) maak in code een lijst van je resultaten, en gebruik dit als bron voor je keuzelijst. Dat heeft enkele voor en nadelen. Het belangrijkste voordeel is dat je niet afhankelijk bent van een query die je al moet hebben en die precies de juiste vorm heeft. Je kan eenvoudig de volgorde manipuleren. Het nadeel van die extra controle is dat je wel meer code moet schrijven. Bovendien heeft Access een beperking in de lengte van de properties. Als je heel veel resultaten hebt, kan je dus tegen problemenen oplopen. Ik zou je deze optie dus niet willen aanbevelen...

Optie 2) Definieer de rowsource als een query. Dit is eigenlijk heel eenvoudig, en ook redelijk flexibel. Wat je dus moet doen in code is het formuleren van een query, en die gebruiken als rowsource voor je keuzelijst.

Je hebt een select query nodig voor je keuzelijst, waarbij je voornaaminvoer wil gebruiken als filter. Omdat je niet vertelt hoe je tabellen en de velden daarin heten, gok ik maar wat op dat vlak:
code:
1
2
Dim strFilterQuery As String
strFilterQuery="SELECT * FROM Persoonsgegevens WHERE voornaam='" & strFilterQuery & "'"

Ik ga er dus vanuit dat je gegevens in een tabel of query Persoonsgegevens staan. Dit geeft alleen een exacte match. Als je ook een inexacte match wil laten zien, kan je LIKE gebruiken, eventueel in combinatie met het veranderen van de case (grote letters/kleine letters) om de match ook nog case-insensitive te maken.
Verder is deze query in principe onveilig. Iemand kan in principe door zorgvuldig een string samen te stellen iets heel anders doen dan jij had gewild. Maargoed, omdat Access inherent onveilig is, ga ik er maar van uit dat dat hier geen probleem is.

De tweede stap is eigenlijk nog eenvoudiger: het toekennen van de query aan de listbox:
code:
1
keuzelijst24.RowSource=strFilterQuery

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • MrMartinH
  • Registratie: Juni 2001
  • Laatst online: 29-07-2024
Waarschijnlijk doe ik iets nog fout, maar heb nu de volgende code:

code:
1
2
3
4
5
6
7
8
Private Sub zoekvoor_Click()

Dim strFilterQuery As String

strFilterQuery = "SELECT * FROM Persoonsgegevens.voornaam WHERE voornaaminvoer='" & strFilterQuery & "'"
Keuzelijst24.RowSource = strFilterQuery

End Sub


Nu is het zo dat hij wel zoekt, want in Keuzelijst24 komen wel de (grijzige) onderscheidingsvakjes te staan. Alleen hij laat verder een leeg zoekresultaat zien. Dus in de apparte hokjes geen namen.

Ik heb het ook nog geprobeerd met een focus op voornaaminvoer en dan terug focussen op de keuzelijst maar dat wekt dus helaas ook niet.

Waarschijnlijk is het makkelijker dan het lijkt maar zover kom ik er nog niet uit. In ieder geval bedankt voor je hulp zover.

Signature


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Misschien moet je je toch eens verdiepen in de basiskennis van SQL. Die sql string lijkt namelijk nergens naar. Achter het statement FROM hoort een tabelnaam en een WHERE clausule bestaat in zijn simpele vorm uit [veldnaam] + [operator} + [waarde]
code:
1
2
3
4
5
strFilterQuery=
"SELECT [veld1],[veld2],[veldn]   'haal alleen velden op die je nodig hebt
From Persoonsgegevens             'uit de tabel persoonsgegevens
WHERE [voornaam] = '"             'met alleen records waarvan de voornaam gelijk is ...
& [voornaaminvoer]  & "'"         'aan de waarde die in de textbox voornaaminvoer staat.

En omdat voornaaminvoer tekst is moet dat tussen quotes (').

ZO moet er toch wel uit te komen zijn: :)

[ Voor 11% gewijzigd door Lustucru op 17-04-2004 11:51 ]

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


  • MrMartinH
  • Registratie: Juni 2001
  • Laatst online: 29-07-2024
Hey het werk eindelijk
Thnz

Signature

Pagina: 1