Springen naar inhoud


- - - - -

zoek formulier


  • Log in a.u.b. om te beantwoorden
Er zijn 11 reacties in dit onderwerp

#1 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 28 augustus 2011 - 20:02

Hallo

Ik heb een zoek formulier dat werkt opzich goed maar vindt alleen bv een naam als je deze volledig juist intypt.Visual Basic Code:
Private Sub zoek_AfterUpdate()
 Dim strzoek As String
	Dim Mzoek As String
	Dim stLinkCriteria As String
	Dim teller As Integer
	 
	strzoek = Me.zoek
	If strzoek = "" Then
   DoCmd.Close
		DoCmd.OpenForm "Opstart"
		Exit Sub
	End If

	stLinkCriteria = "substring(naam,1, 10) = " & "'" & strzoek & "'"
	DoCmd.Close
	teller = DCount("[naam]", "crm", stLinkCriteria)
	If teller > 0 Then
		DoCmd.OpenForm "Filterklantgegevens-TT", , , stLinkCriteria
		Else
		DoCmd.OpenForm "frmklantkomtvoor"
   
		
	   
	End If
End Sub

nu zou ik graag willen als ik bv lam in typ dat alle namen waarin lam voorkomt gevonden worden weet iemand hoe ik dit aan moet pakken

groet M.Lammerts

#2 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3600 berichten
    Laatst bezocht 06 feb 2020 16:38
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 29 augustus 2011 - 08:55

probeer eens te zoeken op '*lam*'
maw een sterretje voor en achter je strzoek.

#3 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 30 augustus 2011 - 22:09

RedThread zei:

probeer eens te zoeken op '*lam*'
maw een sterretje voor en achter je strzoek.

Hallo

Ik snap niet wat u bedoelt kunt u misschien een voorbeeld geven.

bij voorbaat dank

M.Lammerts

#4 Eviltwin

Eviltwin

    Professional Developer

  • Leden
  • PipPipPipPip
  • 299 berichten
    Laatst bezocht 09 mei 2014 15:22
  • LocatieKampen, Nederland

Geplaatst op 31 augustus 2011 - 08:58

Ik weet zo ook even niet hoe ik de door redthread voorgestelde oplossing in code moet verwerken, maar is de volgende manier ook geen optie??


       Visual Basic Code:
 Dim test As String = "Hier even wat tekst om te testen"
		If test.Contains("testen") Then
			MsgBox("Testen gevonden")

		End If


Ik kan uit je opmerking niet helemaal opmaken of je de code niet weet voor Redthread zijn oplossing of dat je niet begrijpt waar deze heen wil. Vandaar dat ik het even iets uitleg...


Als jij de tekst "lam" wilt zoeken in de string mlammerts, dan zit daar wat de m voor en merts achter. Door de sterretjes te gebruiken (wildcards), maakt het niet uit wat ervoor zet of er achter zit... alles waar het deel lam in voorkomt wordt op deze manier gevonden. Gebruik je geen wildcards, dan moet je dus de hele string correct typen...

Let op dat de functie hoofdletter gevoelig is..... Misschien eerst alles naar lowerCase omzetten.

Groeten,

Eviltwin

#5 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3600 berichten
    Laatst bezocht 06 feb 2020 16:38
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 31 augustus 2011 - 11:57

Visual Basic Code:
stLinkCriteria = "substring(naam,1, 10) = " & "'[b]*[/b]" & strzoek & "[b]*[/b]'"


#6 Herm

Herm

    Junior Developer

  • Leden
  • PipPip
  • 69 berichten
    Laatst bezocht 07 dec 2012 20:03

Geplaatst op 31 augustus 2011 - 20:39

Ik veronderstel dat je je namen selecteert uit een db, maar ook dat je niet onmiddellijk verder werkt met de eerste de beste match maar dat het in eerste instantie de bedoeling is om je zoekopdracht te verfijnen.

Om het me wat gemakkelijker te maken zoekt de code in dit geval in een array.

Instr() helpt je alle matches tov je zoekcriterium te vinden. Instr() zoekt bovendien niet case-sensitive als je het gebruikt in combinatie met compareMethod.Text.

Visual Basic Code:
Private Sub TextBox1_Validated(ByVal sender As Object,
								   ByVal e As System.EventArgs) Handles TextBox1.Validated
		Dim MijnTeDoorzoekenArray() As String =
			{"Lammens", "Peeters", "Lambrechts", "Janssens", "Jansens", "Peetermans",
			 "Naamloos", "O'Reilly"}
		Dim zoekString As String = ""
		Dim aantalMatch As Integer
		Dim i As Integer
		ListBox1.Items.Clear()
		zoekString = TextBox1.Text
		For i = 0 To MijnTeDoorzoekenArray.GetUpperBound(0)
			If InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text) Then
				ListBox1.Items.Add(MijnTeDoorzoekenArray(i).ToString)
			End If
			' Instr() : no_match = 0, match = 1
			aantalMatch += InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text).ToString
		Next i
		TextBox2.Text = aantalMatch.ToString
	End Sub


Is je zoekcriterium bv 'lam' dan zal je Lammens en Lambrechts vinden, zoek je naar 's' dan vindt je 7 van de 8 namen enz.
Wil je de code effectief runnen heb je op je form een listbox1 en textbox1 en textbox2 nodig. In textbox1 geef je je zoekcriterium in en na het verlaten van de textbox zie je alle matches in de listbox en het aantal matches in textbox2.

#7 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 31 augustus 2011 - 20:47

RedThread zei:

Visual Basic Code:
stLinkCriteria = "substring(naam,1, 10) = " & "'[b]*[/b]" & strzoek & "[b]*[/b]'"

Ik heb je voorbeeld toegepast maar dan wordt er helemaal niets gevonden.

Groetjes M.Lammerts

#8 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 31 augustus 2011 - 20:49

Eviltwin zei:

Ik weet zo ook even niet hoe ik de door redthread voorgestelde oplossing in code moet verwerken, maar is de volgende manier ook geen optie??


       Visual Basic Code:
 Dim test As String = "Hier even wat tekst om te testen"
		If test.Contains("testen") Then
			MsgBox("Testen gevonden")

		End If


Ik kan uit je opmerking niet helemaal opmaken of je de code niet weet voor Redthread zijn oplossing of dat je niet begrijpt waar deze heen wil. Vandaar dat ik het even iets uitleg...


Als jij de tekst "lam" wilt zoeken in de string mlammerts, dan zit daar wat de m voor en merts achter. Door de sterretjes te gebruiken (wildcards), maakt het niet uit wat ervoor zet of er achter zit... alles waar het deel lam in voorkomt wordt op deze manier gevonden. Gebruik je geen wildcards, dan moet je dus de hele string correct typen...

Let op dat de functie hoofdletter gevoelig is..... Misschien eerst alles naar lowerCase omzetten.

Groeten,

Eviltwin

Hallo

Ik ben nog maar een beginner dus ik weet er niet heel veel van dus alles wat jij vermeld is voor mij bla bla.

groetjes m.lammerts

#9 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 31 augustus 2011 - 20:55

Herm zei:

Ik veronderstel dat je je namen selecteert uit een db, maar ook dat je niet onmiddellijk verder werkt met de eerste de beste match maar dat het in eerste instantie de bedoeling is om je zoekopdracht te verfijnen.

Om het me wat gemakkelijker te maken zoekt de code in dit geval in een array.

Instr() helpt je alle matches tov je zoekcriterium te vinden. Instr() zoekt bovendien niet case-sensitive als je het gebruikt in combinatie met compareMethod.Text.

Visual Basic Code:
Private Sub TextBox1_Validated(ByVal sender As Object,
								   ByVal e As System.EventArgs) Handles TextBox1.Validated
		Dim MijnTeDoorzoekenArray() As String =
			{"Lammens", "Peeters", "Lambrechts", "Janssens", "Jansens", "Peetermans",
			 "Naamloos", "O'Reilly"}
		Dim zoekString As String = ""
		Dim aantalMatch As Integer
		Dim i As Integer
		ListBox1.Items.Clear()
		zoekString = TextBox1.Text
		For i = 0 To MijnTeDoorzoekenArray.GetUpperBound(0)
			If InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text) Then
				ListBox1.Items.Add(MijnTeDoorzoekenArray(i).ToString)
			End If
			' Instr() : no_match = 0, match = 1
			aantalMatch += InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text).ToString
		Next i
		TextBox2.Text = aantalMatch.ToString
	End Sub


Is je zoekcriterium bv 'lam' dan zal je Lammens en Lambrechts vinden, zoek je naar 's' dan vindt je 7 van de 8 namen enz.
Wil je de code effectief runnen heb je op je form een listbox1 en textbox1 en textbox2 nodig. In textbox1 geef je je zoekcriterium in en na het verlaten van de textbox zie je alle matches in de listbox en het aantal matches in textbox2.

Hallo

De tabel die ik hier voor aanspreek is de tabel CRM en deze staat op een sql sever deze zijn gelinkt aan een access 2003 database.

zou jou code hiervoor ook kunnen  werken ??

Groetje M.Lammerts

#10 Herm

Herm

    Junior Developer

  • Leden
  • PipPip
  • 69 berichten
    Laatst bezocht 07 dec 2012 20:03

Geplaatst op 01 september 2011 - 07:44

Of je nu een beginneling bent of niet speelt geen rol, zolang je maar openstaat voor de goede raad die alle gebruikers hier op het forum je willen geven.

Instr() is echt een heel eenvoudige functie en het enige wat ze doet is een 0 of een 1 als return geven al naargelang er niet of wel een match is. Bijkomend voordeel : het zoeken geschiedt onafhankelijk van hoofd- of kleine letters door het gebruik van compareText.Method.

Vanwaar de gegevens komen spelen evenmin een rol, of dat nu uit access is of uit een array.

In veronderstel dat je al je namen inleest uit access. Je zou dus na het inlezen je namenreeks kunnen doorlopen met Instr() en alle matches kunnen toevoegen aan een listbox. Nadien maak je de definitieve keuze van de naam waarmee je wil werken uit de listbox. Zolang dat geen duizenden namen zijn speelt het gebruik van de 'If' in de lus geen rol. Ben er trouwens overtuigd van dat er nog veel betere oplossingen bestaan.

Het tweede stuk van de For-Next lus heb je niet nodig. Ik heb die aantalMatch maar toegevoegd om aan te tonen dat je hiermee ook een statistiek kunt maken. Ik moet me trouwens verontschuldigen hiervoor want door een verkeerde plaatsing in de lus werkt het tellen niet altijd correct. Het is wel correct als je stukken van woorden of namen intikt maar als je bv enkel een 's' intikt krijg je als resultaat '50'. Dat is niet de bedoeling, sorry.

Ik zie ook dat je Substring() gebruik. Hou er rekening mee dat de startwaarde in Substring() zero.based is, dwz dat de eerste letter op positie 0 staat.

Succes ermee.

#11 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 01 september 2011 - 20:55

mlammerts zei:

Herm zei:

Ik veronderstel dat je je namen selecteert uit een db, maar ook dat je niet onmiddellijk verder werkt met de eerste de beste match maar dat het in eerste instantie de bedoeling is om je zoekopdracht te verfijnen.

Om het me wat gemakkelijker te maken zoekt de code in dit geval in een array.

Instr() helpt je alle matches tov je zoekcriterium te vinden. Instr() zoekt bovendien niet case-sensitive als je het gebruikt in combinatie met compareMethod.Text.

Visual Basic Code:
Private Sub TextBox1_Validated(ByVal sender As Object,
								   ByVal e As System.EventArgs) Handles TextBox1.Validated
		Dim MijnTeDoorzoekenArray() As String =
			{"Lammens", "Peeters", "Lambrechts", "Janssens", "Jansens", "Peetermans",
			 "Naamloos", "O'Reilly"}
		Dim zoekString As String = ""
		Dim aantalMatch As Integer
		Dim i As Integer
		ListBox1.Items.Clear()
		zoekString = TextBox1.Text
		For i = 0 To MijnTeDoorzoekenArray.GetUpperBound(0)
			If InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text) Then
				ListBox1.Items.Add(MijnTeDoorzoekenArray(i).ToString)
			End If
			' Instr() : no_match = 0, match = 1
			aantalMatch += InStr(MijnTeDoorzoekenArray(i), zoekString, CompareMethod.Text).ToString
		Next i
		TextBox2.Text = aantalMatch.ToString
	End Sub


Is je zoekcriterium bv 'lam' dan zal je Lammens en Lambrechts vinden, zoek je naar 's' dan vindt je 7 van de 8 namen enz.
Wil je de code effectief runnen heb je op je form een listbox1 en textbox1 en textbox2 nodig. In textbox1 geef je je zoekcriterium in en na het verlaten van de textbox zie je alle matches in de listbox en het aantal matches in textbox2.

Hallo

De tabel die ik hier voor aanspreek is de tabel CRM en deze staat op een sql sever deze zijn gelinkt aan een access 2003 database.

zou jou code hiervoor ook kunnen  werken ??

Groetje M.Lammerts


#12 mlammerts

mlammerts

    Starting Developer

  • Leden
  • 17 berichten
    Laatst bezocht 29 jan 2012 14:28

Geplaatst op 01 september 2011 - 20:57

Herm zei:

Of je nu een beginneling bent of niet speelt geen rol, zolang je maar openstaat voor de goede raad die alle gebruikers hier op het forum je willen geven.

Instr() is echt een heel eenvoudige functie en het enige wat ze doet is een 0 of een 1 als return geven al naargelang er niet of wel een match is. Bijkomend voordeel : het zoeken geschiedt onafhankelijk van hoofd- of kleine letters door het gebruik van compareText.Method.

Vanwaar de gegevens komen spelen evenmin een rol, of dat nu uit access is of uit een array.

In veronderstel dat je al je namen inleest uit access. Je zou dus na het inlezen je namenreeks kunnen doorlopen met Instr() en alle matches kunnen toevoegen aan een listbox. Nadien maak je de definitieve keuze van de naam waarmee je wil werken uit de listbox. Zolang dat geen duizenden namen zijn speelt het gebruik van de 'If' in de lus geen rol. Ben er trouwens overtuigd van dat er nog veel betere oplossingen bestaan.

Het tweede stuk van de For-Next lus heb je niet nodig. Ik heb die aantalMatch maar toegevoegd om aan te tonen dat je hiermee ook een statistiek kunt maken. Ik moet me trouwens verontschuldigen hiervoor want door een verkeerde plaatsing in de lus werkt het tellen niet altijd correct. Het is wel correct als je stukken van woorden of namen intikt maar als je bv enkel een 's' intikt krijg je als resultaat '50'. Dat is niet de bedoeling, sorry.

Ik zie ook dat je Substring() gebruik. Hou er rekening mee dat de startwaarde in Substring() zero.based is, dwz dat de eerste letter op positie 0 staat.

Succes ermee.

Hallo

bedankt voor je antwoord en ja ik sta zeker open voor de input die ik uit het forum haal

ik ga met je voorstel aan de slag en laat je weten of het me gelukt is

groetjes m.lammerts :lol:




0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)