[Access 2003] zoekfunctie, beginners vraag

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

Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
Beste Tweakers,

Graag zou ik een zoekfunctie in mijn formulier willen. Hoewel ik niet weet op welke criteria ik moet googlen om mijn probleem / oplossing te vinden.

"Zoek op zoekfunctie access en je vind alles!"
Ja, heb ik gedaan (of niet voldoende / of niet gericht) maar ik weet op dit moment even niet waarop ik moet zoeken. Ik heb geprobeerd om in de VB code op "selText" SetFocus en BeforeUpdate te zoeken. Maar daar kom ik niet uit.

"Wat heb je nu?"
Ik heb een formulier met 2 textboxen. TextboxA zit in de formheader en TextboxB zit in de detail gedeelte. TextboxB is een herhalende gedeelte (detailview = continuous form). Data in de tabel wordt onder elkaar getoond in het formulier. Wanneer ik een letter invoer dan rangschikt de lijst op de letter wat ik heb aangegeven. Als ik meer letters wil invoeren dan reset die de zoekactie en zoekt het als het ware op een ander letter. Wanneer ik artikel of naam kopieer in notepad en plak in access dan pakt die wel de hele invoer.

1.
--------------------------------------------------------------------------------------------------------------------------------
TextboxA
____


TextboxB

aap
noot
mies
mega
jan
kees
mark
stoel
moor
henk
mogo

--------------------------------------------------------------------------------------------------------------------------------

2.
--------------------------------------------------------------------------------------------------------------------------------
TextboxA
_m___


TextboxB

mies
mark
mega
moor
mogo

--------------------------------------------------------------------------------------------------------------------------------

"Wat wil je precies?"
Ik wil graag, hoe exacter de invoer in TextboxA wor, hoe nauwkeuriger mijn zoekresultaat word.

3.
--------------------------------------------------------------------------------------------------------------------------------
TextboxA
_mo___


TextboxB

moor
mogo

--------------------------------------------------------------------------------------------------------------------------------

Volgens mij moet dat toch vrij makkelijk gaan? Is het mogelijk dat jullie me kunnen helpen of in ieder geval in de goede richting kunnen sturen? Waar kan ik bijvoorbeeld op googlen?

met vriendelijke groet,
t000j

Acties:
  • 0 Henk 'm!

  • pkemeling
  • Registratie: September 2004
  • Laatst online: 10-07-2022
Volgens mij doet een combobox of "keuzelijst met invoervak" precies wat je wilt. Je vult de combobox van uit de tabel met

aap
noot
mies
mega
jan
kees
mark
stoel
moor
henk
mogo

vervolgens kun je (wanneer je het formulier draait) in het lege vakje, naast het pijltje typen met als resultaat dat de inhoud van de combobox aangepast wordt aan hetgeen je getypt hebt.

_mo___

moor
mogo

Lord Vaiter


Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
pkemeling schreef op maandag 05 november 2007 @ 11:29:
Volgens mij doet een combobox of "keuzelijst met invoervak" precies wat je wilt. Je vult de combobox van uit de tabel met

aap
noot
mies
mega
jan
kees
mark
stoel
moor
henk
mogo

vervolgens kun je (wanneer je het formulier draait) in het lege vakje, naast het pijltje typen met als resultaat dat de inhoud van de combobox aangepast wordt aan hetgeen je getypt hebt.

_mo___

moor
mogo
Wanneer ik veel artikelen of namen heb (laten we zeggen 80.000 ongeveer)
en ik zou gebruik maken van de combobox dan moet je toch heel ver scrollen
om de juiste te vinden?

Ook is het zo dat de artikelen / namen in bepaalde groepen zitten, ze zijn op naam
gesorteerd en ik wil graag met deze zoekfunctie ook snel kunnen zien welke andere
artikelen nog meer in deze range zitten.

mvg,
t000j

[ Voor 12% gewijzigd door Anoniem: 236197 op 05-11-2007 11:46 ]


Acties:
  • 0 Henk 'm!

  • pkemeling
  • Registratie: September 2004
  • Laatst online: 10-07-2022
Ehm, juist, 80.000 records heb ik ook nog nooit in een combobox gehad. In principe zou het moeten werken. Met een continuous form moet je immers ook een heel eind scrollen. Als je in het invoervak maar voldoende typt wordt het eind dat je moet scrollen natuurlijk een stuk kleiner. Om het scrollen wat draaglijker te maken kun je bij de eigenschappen van de combobox het aantal rijen op 25 oid zetten ipv de standaard 8. Dan laat hij in iedergeval een stuk meer records zien.

Lord Vaiter


Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
Ah ok maar is het mogelijk dat ik zoekactie kan uitbreiden zodat ik meer kan invoeren. Nou geeft textboxA maar de mogelijkheid om 1 letter of character tegelijk te zoeken. Hoe is deze beperking op te lossen? Waar kan ik de code aanpassen hiervan?

Acties:
  • 0 Henk 'm!

  • pkemeling
  • Registratie: September 2004
  • Laatst online: 10-07-2022
Ik bedenk me nu pas dat je met een macro ook kunt zoeken in een tabel.
Door naast je eerste textbox een knopje te maken en daar een macro aan te hangen.
Globaal doe je dit:
- In textbox 1 vul je de zoekterm in
- Door op de knop te drukken zet je de macro in werking
- De macro gaat met de actie NaarBesturingselementGaan naar het te doorzoeken veld
- Met de actie RecordZoeken doorzoekt de macro de tabel naar het record wat je in de textbox hebt ingevuld (=[txtZoekveld] oid).

Het is misschien niet zo mooi en zeker niet dynamisch, maar het werkt wel en je hoeft dan geen combobox te gebruiken.

Lord Vaiter


Acties:
  • 0 Henk 'm!

  • pkemeling
  • Registratie: September 2004
  • Laatst online: 10-07-2022
wellicht kun je die macro zelfs aan het typen in het textvak koppelen, zodat elke keer als je een letter typt de tabel wordt doorzocht. Bij de eigenschappen kun je onder het tabblad "Gebeurtenis" acties hangen aan verschillenden gebeurtenissen van de textbox. In dit geval is het waarschijnlijk "Bij wijzigen".
Ik weet niet zeker of dit gaat werken en wat de resultaten van het zoeken zijn, maar het is het proberen waard denk ik.

Ah ok maar is het mogelijk dat ik zoekactie kan uitbreiden zodat ik meer kan invoeren. Nou geeft textboxA maar de mogelijkheid om 1 letter of character tegelijk te zoeken. Hoe is deze beperking op te lossen? Waar kan ik de code aanpassen hiervan?

Bij een combobox kun je zo veel letters typen als je maar wilt, er wordt automatisch de juiste waarde bij gezocht. Met de macro werkt dit als het goed is ook, maar ik weet niet zeker of er meerdere resultaten weer gegeven kunnen worden.

Lord Vaiter


Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
even testen met die combobox bedankt in ieder geval pkemeling

Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
met die combobox lukt het niet, daar krijg ik als ik een waarde invoer 1 resultaat

Acties:
  • 0 Henk 'm!

  • B-Man
  • Registratie: Februari 2000
  • Niet online
Je kunt een form een recordset geven die je opent met custom SQL. Middels die SQL kun je filteren op een bepaalde kolom.

Hmmm, het schiet me nu ook te binnen dat je op een Form volgens mij ook gewoon een property "Filter" hebt die je kunt instellen. Het is alweer jaren geleden dat ik met Access werkte (Access 2000 ;)). Ik zou in ieder geval een stukje VBA code aan het event hangen dat optreed zodra je invoerveld van waarde verandert.

Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
Private Sub Form_Activate()
'zorgt ervoor dat de F_Zoek wordt geopend met de volledige lijst
'plaatst de cursor in het vakje selTxt
'voorkomt dat de requery herhaald wordt na het sluiten van het detail form.

Static eerste As Integer
If eerste = False Then
Me.Requery
eerste = True
End If
Me!selTxt.SetFocus
End Sub

Private Sub Form_Click()
On Error GoTo Err_Form_Click
'opent het detailform van de geselecteerde record

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "F_ZoekDetail"

stLinkCriteria = "[tb1_sap]=" & Me![tb1_sap]
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Form_Click:
Exit Sub

Err_Form_Click:
MsgBox Err.Description
Resume Exit_Form_Click

End Sub

Private Sub Form_Load()
'zet de datum van vandaag in het selDat tekstvakje

Me![selDat] = Format$(Now, "dd-mm-yyyy")
End Sub

Private Sub Formulierkoptekst_Click()

End Sub

Private Sub Knop8_Click()
On Error GoTo Err_Knop8_Click
'sluit de form

DoCmd.Close

Exit_Knop8_Click:
Exit Sub

Err_Knop8_Click:
MsgBox Err.Description
Resume Exit_Knop8_Click

End Sub

Private Sub selTxt_BeforeUpdate(Cancel As Integer)

End Sub

Private Sub selTxt_KeyUp(KeyCode As Integer, Shift As Integer)
'zorgt ervoor dat bij het invoeren van de eerste letter meteen de lijst wordt ingekort
'tot alle namen die met de ingevoerde letter beginnen en verder bij elke volgende
'ingevoerde letter. Denk er om dat de instelling van Access
'Extra-Opties-Toetsenbord-Cursor naar einde veld' wordt ingesteld.

Me.Requery
Me!selTxt.SetFocus

End Sub
Dit is een stukje voorbeeld van het formulier en hieronder:
Private Sub selTxt_KeyUp(KeyCode As Integer, Shift As Integer)
'zorgt ervoor dat bij het invoeren van de eerste letter meteen de lijst wordt ingekort
'tot alle namen die met de ingevoerde letter beginnen en verder bij elke volgende
'ingevoerde letter. Denk er om dat de instelling van Access
'Extra-Opties-Toetsenbord-Cursor naar einde veld' wordt ingesteld.

Me.Requery
Me!selTxt.SetFocus

End Sub
Ik begrijp de uitleg maar ik begrijp niet waar het stukje "zorgt ervoor dat bij het invoeren van de eerste letter meteen de lijst wordt ingekort" code staat

[ Voor 4% gewijzigd door Anoniem: 236197 op 05-11-2007 16:27 ]


Acties:
  • 0 Henk 'm!

Anoniem: 236197

Topicstarter
het is gelukt

ik heb toch maar een listbox gebruikt in plaats van de optie "Doorlopend formulier"!

dus:

een zoekveld verwijzen naar de listbox
Private Sub zoekveldNaarArtikelnummer_Change()
Call vulListBox(True)
End Sub
en voor de listbox heb ik deze code gebruikt
Private Sub vulListBox(blnSel As Boolean)
On Error GoTo err_vulListBox

Dim strSQL As String
strSQL = "SELECT * FROM query1 "
If blnSel = True Then
strSQL = strSQL & "WHERE artikelnummer LIKE '" & Me.zoekveldNaarArtikelnummer.Text & "*'"
End If
Me.listBox.RowSource = strSQL

Exit Sub

err_vulListBox:
MsgBox Err.Description
Exit Sub

End Sub
Hoe heb ik dit kunnen fixen. Een voorbeeld zoekfunctie gepakt en alles gestript. Een voor een functie toevoegen en kijken wat het doet. Gebeurde er niks of ik snapte het niet, ben ik gwoon verder gaan zoeken. Ik had vooral problemen met het plaatsen van de code, hoe de code gebruikt moest worden.

Maar tweakers bedankt in ieder geval!
Pagina: 1