FOK!forum / Digital Corner / voorbeeld van zoekfunctie voor zoeken in database
marc1982woensdag 9 april 2003 @ 11:24
heeft iemand voorbeelden van zoekfuncties in een access database, doormiddel van visual basic, kom er niet echt helemaal uit.
mvtwoensdag 9 april 2003 @ 11:25
Bedoel je niet gewoon een standaard query of een SQL query??
Die maak je over het algemeen niet in VB.
marc1982woensdag 9 april 2003 @ 11:33
nee dat bedoel ik niet, want ik wil op de eerste (paar) letter(s) van een achternaam ofzo kunnen zoeken, en dat kan niet met een query omdat je dan geen gedeeltelijke invoer hebt. of je maakt de keuze al in het maken van de query of je hebt de gehele invoer nodig.
of kan dit wel?
rihagowoensdag 9 april 2003 @ 11:41
quote:
Op woensdag 9 april 2003 11:33 schreef marc1982 het volgende:
nee dat bedoel ik niet, want ik wil op de eerste (paar) letter(s) van een achternaam ofzo kunnen zoeken, en dat kan niet met een query omdat je dan geen gedeeltelijke invoer hebt. of je maakt de keuze al in het maken van de query of je hebt de gehele invoer nodig.
of kan dit wel?
ik zou maar wat meer gaan zoeken en lezen en vooral de SQL taal leren want het kan wel met een SQL Query.
marc1982woensdag 9 april 2003 @ 11:44
hoe dan?
voorbeeld?
thumperwoensdag 9 april 2003 @ 11:47
In Oracle SQL met het LIKE statement, en een % als joker.
Dus
SELECT * FROM tabel WHERE tekstveld LIKE 'Thum%'

zoekt alle records waarvan de inhoud van het veld 'tekstveld' begint met 'Thum'

Voor Access zal er ook wel zoiets zijn...

WheeleEwoensdag 9 april 2003 @ 11:47
quote:
Op woensdag 9 april 2003 11:33 schreef marc1982 het volgende:
nee dat bedoel ik niet, want ik wil op de eerste (paar) letter(s) van een achternaam ofzo kunnen zoeken, en dat kan niet met een query omdat je dan geen gedeeltelijke invoer hebt. of je maakt de keuze al in het maken van de query of je hebt de gehele invoer nodig.
of kan dit wel?
code:
select naam
from <tabelnaam>
where naam like "<zoekveldwaarde>%"

Zoiets zou ongeveer wel moeten werken. Je kan zo zoeken op waarden die beginnen met de waarde die je in het zoekveld hebt ingevuld.
marc1982woensdag 9 april 2003 @ 11:51
quote:
Op woensdag 9 april 2003 11:47 schreef thumper het volgende:
In Oracle SQL met het LIKE statement, en een % als joker.
Dus
SELECT * FROM tabel WHERE tekstveld LIKE 'Thum%'

zoekt alle records waarvan de inhoud van het veld 'tekstveld' begint met 'Thum'

Voor Access zal er ook wel zoiets zijn...


dit snap ik wel, dit werkt ook wel.
alleen wil ik invoer als gebruiker hebben en dus niet telkens m'n query moeten aanpassen
quote:
Op woensdag 9 april 2003 11:47 schreef WheeleE het volgende:

[..]

code:
select naam
from <tabelnaam>
where naam like "<zoekveldwaarde>%"

Zoiets zou ongeveer wel moeten werken. Je kan zo zoeken op waarden die beginnen met de waarde die je in het zoekveld hebt ingevuld.
en wat houd die zoekveldwaarde dan in, wat is dat? hoe moet ik dat zien dan?
thumperwoensdag 9 april 2003 @ 11:59
quote:
Op woensdag 9 april 2003 11:51 schreef marc1982 het volgende:

[..]

dit snap ik wel, dit werkt ook wel.
alleen wil ik invoer als gebruiker hebben en dus niet telkens m'n query moeten aanpassen
[..]

en wat houd die zoekveldwaarde dan in, wat is dat? hoe moet ik dat zien dan?


De door de gebruiker ingevoerde waarde komt dus na het LIKE statement, iets als:
... WHERE veld LIKE "hier_het_door_gebruiker_ingevoerde_variabele%"
marc1982woensdag 9 april 2003 @ 12:01
ik denk inderdaad dat dit wel moet werken
de invoer van de gebruiker word dus gezet in een variable?
hoe maak ik deze variable aan?
hoe gebruik ik deze?
en hoe moet deze gelinkt worden?
koboldwoensdag 9 april 2003 @ 12:03
quote:
Op woensdag 9 april 2003 12:01 schreef marc1982 het volgende:
ik denk inderdaad dat dit wel moet werken
de invoer van de gebruiker word dus gezet in een variable?
hoe maak ik deze variable aan?
hoe gebruik ik deze?
en hoe moet deze gelinkt worden?
Ga eerst maar 'es een basiscursus VB volgen...
WheeleEwoensdag 9 april 2003 @ 12:03
quote:
Op woensdag 9 april 2003 11:51 schreef marc1982 het volgende:

[..]

dit snap ik wel, dit werkt ook wel.
alleen wil ik invoer als gebruiker hebben en dus niet telkens m'n query moeten aanpassen
[..]

en wat houd die zoekveldwaarde dan in, wat is dat? hoe moet ik dat zien dan?


Ik ben niet zo bekend met Acces. Je zou even moeten uitzoeken hoe je de waarde van een tekstveld in een variabele kunt krijgen. die variabele kun je dan gebruiken: LIKE "<variabelenaam>%"
SignOTheTimeswoensdag 9 april 2003 @ 12:04
strsql = "select * from tabellete where naam= '" & strNaam & "%'"
marc1982woensdag 9 april 2003 @ 12:06
SELECT klanten.Aanhef, klanten.Achternaam, klanten.Bedrijfsnaam, klanten.Adres, klanten.Postcode, klanten.Woonplaats, klanten.Contactpersoon, klanten.[Telefoon nummer], klanten.[06 nr], klanten.[Fax nr], klanten.[Naam schip], klanten.[Ligplaats schip], klanten.[Email adres], klanten.Referentie, klanten.Datum, klanten.Prijzen, klanten.Extra
FROM klanten
WHERE (klanten.Achternaam)like [achternaam=];
ik heb nu dit?
kunnen jullie hier iets mee?
is er niemand bekend met het declaren van een variable, zodat ik deze bij de invoer kan gebruiken?
thumperwoensdag 9 april 2003 @ 12:07
quote:
Op woensdag 9 april 2003 12:01 schreef marc1982 het volgende:
ik denk inderdaad dat dit wel moet werken
de invoer van de gebruiker word dus gezet in een variable?
hoe maak ik deze variable aan?
hoe gebruik ik deze?
en hoe moet deze gelinkt worden?
Hmmm, leer eerst maar wat VB dan... :| In de Help zal vast wel wat staan...
CreativeMindwoensdag 9 april 2003 @ 12:14
Je stelt in runtime de query samen, dus op zo'n manier:
code:
dim jouwquery as string, zoekwoord as string

'vraag zoekwoord aan gebruiker

jouwquery = "SELECT ..... WHERE ..... = " & zoekwoord & "ORDER BY ....;" (of zoiets)

dim db as database, rst as recordset

set db = currentdb
set rst = db.openrecordset(jouwquery)

'nu kun je met alles wat je in rst vindt op tientallen manieren zoekresultaten outpoepen

rst.close
set db = nothing


marc1982woensdag 9 april 2003 @ 12:17
quote:
Op woensdag 9 april 2003 12:14 schreef CreativeMind het volgende:
Je stelt in runtime de query samen, dus op zo'n manier:
code:
dim jouwquery as string, zoekwoord as string

'vraag zoekwoord aan gebruiker

jouwquery = "SELECT ..... WHERE ..... = " & zoekwoord & "ORDER BY ....;" (of zoiets)

dim db as database, rst as recordset

set db = currentdb
set rst = db.openrecordset(jouwquery)

'nu kun je met alles wat je in rst vindt op tientallen manieren zoekresultaten outpoepen

rst.close
set db = nothing



ik zal wel heel dom overkomen, maar runtime???
wat bedoel je hier mee?
waar moet ik deze code nou inzetten?
in sql of in een module ofzo?
CreativeMindwoensdag 9 april 2003 @ 12:20
quote:
Op woensdag 9 april 2003 12:06 schreef marc1982 het volgende:
SELECT klanten.Aanhef, klanten.Achternaam, klanten.Bedrijfsnaam, klanten.Adres, klanten.Postcode, klanten.Woonplaats, klanten.Contactpersoon, klanten.[Telefoon nummer], klanten.[06 nr], klanten.[Fax nr], klanten.[Naam schip], klanten.[Ligplaats schip], klanten.[Email adres], klanten.Referentie, klanten.Datum, klanten.Prijzen, klanten.Extra
FROM klanten
WHERE (klanten.Achternaam)like [achternaam=];
ik heb nu dit?
kunnen jullie hier iets mee?
is er niemand bekend met het declaren van een variable, zodat ik deze bij de invoer kan gebruiken?
Dat gaat dus niet. Je kunt niet vanuit VBA een variabele meegeven aan een query. Je kunt wel in die query gegevens uit een tekstboxje op een formulier halen. Dan vul je gewoon bij Criteria in de query het volgende in:
[Forms]![formuliernaam].[tekstboxnaam]

Maar je kunt het beste de query helemaal binnen VBA houden, zie daarvoor mijn post hierboven.

rihagowoensdag 9 april 2003 @ 12:21
quote:
Op woensdag 9 april 2003 12:17 schreef marc1982 het volgende:

[..]

ik zal wel heel dom overkomen, maar runtime???
wat bedoel je hier mee?
waar moet ik deze code nou inzetten?
in sql of in een module ofzo?


nogmaals.

doe eerst eens wat basis VB dingen voordat je aan de slag gaat met VB->sql/access

CreativeMindwoensdag 9 april 2003 @ 12:24
quote:
Op woensdag 9 april 2003 12:17 schreef marc1982 het volgende:

[..]

ik zal wel heel dom overkomen, maar runtime???
wat bedoel je hier mee?
waar moet ik deze code nou inzetten?
in sql of in een module ofzo?


Als ik je openingspost lees begrijp ik dat je met Visual basic een zoekdingetje wil maken. Dus ja, deze code moet je achter een commandbutton zetten, he.
Met in runtime de SQL query samenstellen bedoel ik dat je een deel van de query hard-code in VBA, en dat je het zoekwoord wat de gebruiker ingeeft er pas aan toevoegt op het moment dat ie op de knop drukt.
marc1982woensdag 9 april 2003 @ 12:39
ik moet dus bijvoorbeeld een formulier maken, hier een invoer vak en knop inzetten, en dan bij de knop die code erin zetten, dat word dus een stuk programmeer code in vb.
klopt dit?
of snap ik er echt geen kloot van?
koboldwoensdag 9 april 2003 @ 12:41
Je begint 't een beetje te snappen, maar je kan dat stukje code er niet rechtsstreeks erin kwakken.
marc1982woensdag 9 april 2003 @ 12:44
nee ik snap dat ik die code moet aanpassen aan mijn tabel, query en veldnamen.
toch?
koboldwoensdag 9 april 2003 @ 12:47
Ok, en deze regel moet je uiteraard ook aanpassen:
code:
'nu kun je met alles wat je in rst vindt op tientallen manieren zoekresultaten outpoepen
Dat wordt denk ik 't moeilijkste voor jou
sopwoensdag 9 april 2003 @ 13:10
quote:
Op woensdag 9 april 2003 12:47 schreef kobold het volgende:
[..]
outpoepen
[..]
CreativeMindwoensdag 9 april 2003 @ 13:13
quote:
Op woensdag 9 april 2003 13:10 schreef sop het volgende:

[..]


Met dank aan jou, Sop, want jij hebt mij een tijd terug een eind op gang geholpen met Access/VBA
sopwoensdag 9 april 2003 @ 15:05
quote:
Op woensdag 9 april 2003 13:13 schreef CreativeMind het volgende:

[..]

Met dank aan jou, Sop, want jij hebt mij een tijd terug een eind op gang geholpen met Access/VBA


Echt waar? Sorry.
marc1982woensdag 9 april 2003 @ 15:55
kan iemand mij, stukjes van, deze source uitleggen?


Private Sub Knop_Zoeken_Click()



Dim mijnsql As String, MijnCriteria As String, mijnrecordbron As String
Dim AantalArg As Integer
Dim Tdl As Variant
Dim ContactStr As String
Dim I As Integer

AantalArg = 0
MijnCriteria = ""
WaaraanToevoegen [Achternaam], "Klanten.Achternaam", MijnCriteria, AantalArg
WaaraanToevoegen [postcode], "Klanten.postcode", MijnCriteria, AantalArg
WaaraanToevoegen [Telefoon], "Klanten.bedrijfsnaam", MijnCriteria, AantalArg

If MijnCriteria = "" Then
MijnCriteria = "True"
End If


mijnsql = "SELECT * FROM Klanten WHERE "

mijnrecordbron = mijnsql & MijnCriteria & " ORDER BY Klanten.Achternaam"

Debug.Print mijnrecordbron


Me![klantenzoeken_sub].Form.RecordSource = mijnrecordbron

If Me![klantenzoeken_sub].Form.RecordsetClone.RecordCount = 0 Then
MsgBox "Er zijn geen klanten gevonden, voer de gegevens van de nieuwe klant in.", 48, "Geen klant gevonden."
Else
Me![klantenzoeken_sub].SetFocus
End If

End Sub
Private Sub WaaraanToevoegen(veldwaarde As Variant, VeldNaam As String, MijnCriteria As String, AantalArg As Integer)


If veldwaarde <> "" Then
' "And" toevoegen als er een ander criterium is.
If AantalArg > 0 Then
MijnCriteria = MijnCriteria & " And "
End If

' Het criterium toevoegen aan de bestaande criteria.
' VeldWaarde en sterretje tussen aanhalingstekens plaatsen.
MijnCriteria = (MijnCriteria & VeldNaam & " Like " & Chr(39) & Chr(42) & veldwaarde & Chr(42) & Chr(39))

' Aantal argumenten verhogen.
AantalArg = AantalArg + 1
End If

End Sub

rihagowoensdag 9 april 2003 @ 16:02
ik mis zowieso een connectie met de DB.

waar doe je dat??

marc1982woensdag 9 april 2003 @ 16:07
moet je de hele code hebben?
mail me op marciemarc1982@hotmail.com
dan mail ik de code wel

[Dit bericht is gewijzigd door marc1982 op 09-04-2003 16:19]

Roonaanwoensdag 9 april 2003 @ 16:27
quote:
Op woensdag 9 april 2003 16:07 schreef marc1982 het volgende:
moet je de hele code hebben?
mail me op marciemarc1982@hotmail.com
dan mail ik de code wel
Hoever is jouw bieb?
marc1982woensdag 9 april 2003 @ 16:40
quote:
Op woensdag 9 april 2003 16:27 schreef Roonaan het volgende:

[..]

Hoever is jouw bieb?


hoe bedoel je?
sopwoensdag 9 april 2003 @ 17:01
quote:
Op woensdag 9 april 2003 16:40 schreef marc1982 het volgende:

[..]

hoe bedoel je?


Wat denk je?
Dat je hier geen online cursus krijgt, maar dat we je helpen als je met een dingetje vastzit.
We gaan niet helpen (tenminste ik iig niet) om jouw knip en plak werk werkend te krijgen.