1
| SELECT * FROM Tabelnaam WHERE Tabelnaam.Veldnaam=... [AND Tabelnaam.Veldnaam=...]|[OR Tablenaam.Veldnaam=...] [SORT BY Veldnaam] |
kan het hier ook mee?
waarom probeer je het niet gewoon?Op donderdag 22 november 2001 09:25 schreef AdrianP het volgende:
Ik zat aan zoiets te denken:
code:
1 SELECT * FROM Tabelnaam WHERE Tabelnaam.Veldnaam=... [AND Tabelnaam.Veldnaam=...]|[OR Tablenaam.Veldnaam=...] [SORT BY Veldnaam]
kan het hier ook mee?
Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/
1
2
3
4
5
6
7
8
9
10
| Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("d:\databse.mdb")
db.OpenRecordset (SQL$)
prompt$ = "Waarop wilt u zoeken?"
Zoek$ = InputBox(prompt$, Zoeken)
SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE zoek$)" |
Wat is er fout?
Hij zegt, dat ie de invoertabel niet kan vinden...
Zoek$ = InputBox(prompt$, Zoeken)
SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE zoek$)"
Er staat sowieso een ) in die daar niet hoort, maar goed.
Je probeert in de string SQL een stukje tekst te stoppen, + de inhoud van variabele Zoek. Dat gaat zo niet werken. Print (Debug.Print) SQL maar eens en je ziet wel wat ik bedoel.
Spit even in je VB kennis, en bedenk hoe je strings kan samenvoegen.
Daarnaast is het nog een stukje basiskennis sql. Je wilt zoeken op "waar veldnaam lijkt op blah". Blah moet sowieso tussen ' en ' aangezien het om een string veld gaat. En er zal nog een wildcard bij moeten, aangezien je alles wilt waar blah in voorkomt. "Normaal" is een wildcard % maar met DAO zal 't wel een * zijn (kwestie van even proberen). Dus je query zal uiteindelijk iets moeten worden als
SELECT * FROM Tabel WHERE veld LIKE '%blah%'
Die kennis even combineren met je VB kennis en dan moet je er wel uit komen lijkt me.
ps:
nee geen copy-paste antwoord anders weet je nog niet waarom het niet werkte.
Die foutmelding is vrij logisch. In je huidige query zeg je "WHERE veld like zoek$". Aangezien je zoek als tekst meegeeft, en niet de waarde van variabele zoek, zal Access op zoek gaan naar veld "veld" en veld "zoek$". Zoek$ zal geen veld zijn in je database. En tabelnaam moet uiteraard wel een geldige tabelnaam zijn.
Exact expert nodig?
Ik kom net pas kijken hoor dus sorry voor het ongemak.
Maar hoe kan ik nou een waarde geven aan de die wildcard?
Ik wil gewoon dat %zoek% iets is, wat uit een inputbox komt....
SQL$ is dus niet goed?
hij geeft namelijk aan, dat daar de fout zit. Hij ziet SQL$ als SQL$ = ""
tabelnaam is natuurlijk aangepast in de echte versie
Kun je me helpen?
eejOp donderdag 22 november 2001 09:36 schreef AdrianP het volgende:
k heb nu dus dit, maar dat werkt niet.
code:
1 2 3 4 5 6 7 8 9 10Dim db As Database Dim rs As Recordset Set db = OpenDatabase("d:\databse.mdb") db.OpenRecordset (SQL$) prompt$ = "Waarop wilt u zoeken?" Zoek$ = InputBox(prompt$, Zoeken) SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE zoek$)"
Wat is er fout?
Hij zegt, dat ie de invoertabel niet kan vinden...
je moet natuurlijk wel eerst je variabelen aanmaken voor je ze gaat gebruiken.
zo dus:
1
2
3
4
5
6
7
| Dim db As Database
Dim rs As Recordset
prompt$ = "Waarop wilt u zoeken?"
Zoek$ = InputBox(prompt$, Zoeken)
SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE zoek$)"
Set db = OpenDatabase("d:\databse.mdb")
db.OpenRecordset (SQL$) |
Dan nog ff die ) weghalen.
en dan nog ff op msdn.microsoft.com uitzoeken hoe je variabelen in een string gebruikt.
Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/
1
| SQL$ = "SELECT * FROM Container WHERE ((Container.chipsnummer)=(zoek$))" |
Nu krijg ik dat ik te weinig parameters heb
heb je hier al eens gekeken?Op donderdag 22 november 2001 10:21 schreef AdrianP het volgende:
Ik heb nu dit dit geprobeerd.
code:
1 SQL$ = "SELECT * FROM Container WHERE ((Container.chipsnummer)=(zoek$))"
Nu krijg ik dat ik te weinig parameters heb
http://www.w3schools.com/sql/default.asp
?
Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/
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
| Option Explicit
Public DB As Database
Dim WS As Workspace
Public Sub OpenDatabase(DBase As String)
Dim sConnect As String
sConnect = ";DATABASE=" & DBase
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase("", dbDriverNoPrompt, False, sConnect)
End Sub
Public Sub CloseDatabase()
DB.Close
WS.Close
End Sub
Public Function ExecQuery(Query As String, keuze As Integer) As Recordset
On Error Resume Next
Dim QueryDf As QueryDef
Select Case keuze
Case 2
Set QueryDf = DB.CreateQueryDef("", Query)
QueryDf.SQL = Query
QueryDf.Execute
Case Else
Set QueryDf = DB.CreateQueryDef("", Query)
QueryDf.SQL = Query
Set ExecQuery = QueryDf.OpenRecordset
End Select
End Function |
ik heb een module ervoor geschreven omdat ik da makkelijker vind, mischien heb je er iets aan.
je andere code wordt dan een stuk makkelijker
1
2
3
4
5
| opendatabase("databeest.db") 'databeest opene
execquery ('select * from tabel where dit like dat',1) 'standaart query
execquery ("delete from tabel where dit like dat",2)
'2 dus voor speciale query's zoals update en delete en insert
closedatabase |
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
heb ik gekeken jaOp donderdag 22 november 2001 10:25 schreef Tampie2000 het volgende:
[..]
heb je hier al eens gekeken?
http://www.w3schools.com/sql/default.asp
?
Maar daar kan ik weinig relevants vinden.
Ik moet gewoon zoeken in een Access DB vanuit een waarden die de gebruiker opgeeft. En net dat laatste lukt niet, en dat is VB dus helaas heb ik niks aan die link.
Toch bedankt.
SQL is overal min of meer hetzelfde, probeer het volgende eens:Op donderdag 22 november 2001 10:31 schreef AdrianP het volgende:
[..]
heb ik gekeken ja
Maar daar kan ik weinig relevants vinden.
Ik moet gewoon zoeken in een Access DB vanuit een waarden die de gebruiker opgeeft. En net dat laatste lukt niet, en dat is VB dus helaas heb ik niks aan die link.
Toch bedankt.
1
| SQL$ = "SELECT * FROM blaat WHERE blaat LIKE '%" & zoekterm & "%'" |
Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/
1
| execquery("select * from tabel where dir like " & txtzoek.text",1) |
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
Nu doet ie hetOp donderdag 22 november 2001 10:35 schreef Tampie2000 het volgende:
[..]
probeer het volgende eens:
code:
1 SQL$ = "SELECT * FROM blaat WHERE blaat LIKE '%" & zoekterm & "%'"
Mag ik nog 1 ding vragen?
Ik werk dus met text velden, dus als ie iets gevonden heeft, kan ik dat niet zien.
Nu zou ik graag willen, dat als ie iets vind, dat ie dan het zoekresultaat vet weergeeft.
Hoe dat te doen?
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
Ik wil geen meerdere fonts in 1 textbox, ik wil gewoon in bv text1.text wil ik als de waarde die in text1.text staat overeenkomt met de zoek string, dat text1.text dan vet gedrukt komt te staan.Op donderdag 22 november 2001 11:25 schreef Super_ik het volgende:
dn moet je het font aanpassen voor de textbox, als je meerdere fonts in 1 textbox wilt moet je een richtextedit neeme, anders kan da nie
1
| text1.FontBold = True |
tada bold
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
niet zo bij de hand he dames!:)
Dat snap ik ook wel
Ik wil het specifiek als de string gevonden wordt in de database...
Dus als zoek$ gevonden wordt, moet zoek$ bold worden
snaps?
Verwijderd
Verwijderd
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| Sub RecordCountX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
With dbsNorthwind
' Open table-type Recordset and show RecordCount
' property.
Set rstEmployees = .OpenRecordset("Employees")
Debug.Print _
"Table-type recordset from Employees table"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
rstEmployees.Close
' Open dynaset-type Recordset and show RecordCount
' property before populating the Recordset.
Set rstEmployees = .OpenRecordset("Employees", _
dbOpenDynaset)
Debug.Print "Dynaset-type recordset " & _
"from Employees table before MoveLast"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
' Show the RecordCount property after populating the
' Recordset.
rstEmployees.MoveLast
Debug.Print "Dynaset-type recordset " & _
"from Employees table after MoveLast"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
rstEmployees.Close
' Open snapshot-type Recordset and show RecordCount
' property before populating the Recordset.
Set rstEmployees = .OpenRecordset("Employees", _
dbOpenSnapshot)
Debug.Print "Snapshot-type recordset " & _
"from Employees table before MoveLast"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
' Show the RecordCount property after populating the
' Recordset.
rstEmployees.MoveLast
Debug.Print "Snapshot-type recordset " & _
"from Employees table after MoveLast"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
rstEmployees.Close
' Open forward-only-type Recordset and show
' RecordCount property before populating the
' Recordset.
Set rstEmployees = .OpenRecordset("Employees", _
dbOpenForwardOnly)
Debug.Print "Forward-only-type recordset " & _
"from Employees table before MoveLast"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
' Show the RecordCount property after calling the
' MoveNext method.
rstEmployees.MoveNext
Debug.Print "Forward-only-type recordset " & _
"from Employees table after MoveNext"
Debug.Print " RecordCount = " & _
rstEmployees.RecordCount
rstEmployees.Close
.Close
End With
End Sub |
1
2
3
4
| Dim result As Recordset
Set result = ExecQuery("Select * from testvoorraad where Id like " & text1.text , 1)
Me.Caption = result!Merk
If result!Id = Text1.Text Then Text1.FontBold = True |
eventueel aan te vullen met limit 1 maar nie persee nodig
werkt prima
ik dacht wel dat het hoofdletter gevoelig was da achter ! staat
[edit]
die execquery werkt alleen in samewerking met mijn module natuurlijk
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
In ieder geval bedankt allemaal...
ik heb nu nog steeds dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Private Sub Command5_Click()
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("d:\database.mdb")
SQL$ = "SELECT * FROM Container WHERE Container.chipsnummer LIKE '%" & zoek$ & "%'"
db.OpenRecordset (SQL$)
prompt$ = "Waarop wilt u zoeken?"
zoek$ = InputBox(prompt$, "Zoeken") |
Ik weet echt niet hoe ik het dan vet gedrukt krijg.
Heeft iemand misschien een idee hoe ik laten zien, dat SQL iets gevonden heeft...?
Ik ben altijd van mening: zorg eerst dat de code zelf goed werkt, opleukdingetjes als een fontje bold maken is van latere zorg (dat is nl. iets wat je ook volledig los kan testen. Textbox, commandbutton, en in het click event van de button de text bold proberen te maken).
PS1 Wen jezelf eraan om controls nuttigen namen te geven. Bv cmdZoek i.p.v. Command5
PS2 Eerst open je de database, en daarna bouw je de SQL query? of tast de honger (_mijn_ honger
hehe oh nee, eerst bouw je de query, en dan vraag je waar er op gezocht moet worden
Exact expert nodig?
Verwijderd
Moet zijn:SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE zoek$)"
SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE " & zoek$
1
2
3
4
5
6
7
8
9
10
11
12
| Set db = OpenDatabase("d:\database.mdb")
SQL$ = "SELECT * FROM Container WHERE Container.chipsnummer LIKE '%" & zoek$ & "%'"
Set rs = db.OpenRecordset(SQL$)
if rs.EOF then
Msgbox "Geen records gevonden!", vbInformation
else
rs.MoveLast
rs.MoveFirst
Msgbox "Er zijn " & rs.RecordCount & " gevonden.", vbInformation
end if |
F1 helpt ook trouwens...
oogjes open, snaveltjes dicht
Als je nix nuttigs te melden heb, meldt dan nix!Op donderdag 22 november 2001 13:51 schreef Sepans het volgende:
[..]
Moet zijn:
SQL$ = "SELECT * FROM Tabelnaam WHERE tabelnaam.veldnaam LIKE " & zoek$
Dit is pas 20 posts geleden geconstateerd!!
CrazyD, hoe kan ik dat testen?
Als ik deze SQL opdracht start, krijg ik nergens te zien of het lukt, en daarom wil ik dus bold gebruiken.
1
2
| SQL$ = "SELECT * FROM Container WHERE Container.chipsnummer LIKE '%" & zoek$ & "%'" db.OpenRecordset (SQL$) |
als ik eerst de recordset defineer, en dan pas de string defineer, krijg ik een foutmelding
Maar weet je misschien code hoe ik het beter kan doen?
Alvast bedankt!
Verwijderd
gebruik zoiets al dit
1
2
3
4
| dim rs as recordset .. set rs = db.OpenRecordset(SQL$) .. |
Vervolgens kan je met het recordset-object kijken of je iets hebt terug gekregen
Maar je recordset zal ongetwijfeld een EOF property hebben (End of File) waarmee je kan controleren of je recordset EOF is (duh
Exact expert nodig?
Maar hoe kan ik dan zien of ie daadwerkelijk iets vind
(ja ik weet het, ik vraag veel van jullie
ik blijf het nie herhaleOp donderdag 22 november 2001 11:53 schreef Super_ik het volgende:
code:
1 2 3 4Dim result As Recordset Set result = ExecQuery("Select * from testvoorraad where Id like " & text1.text , 1) Me.Caption = result!Merk If result!Id = Text1.Text Then Text1.FontBold = True
eventueel aan te vullen met limit 1 maar nie persee nodig
werkt prima
ik dacht wel dat het hoofdletter gevoelig was da achter ! staat
[edit]
die execquery werkt alleen in samewerking met mijn module natuurlijkmaar het geeft wel een id hoe je het moet oplosse
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
dat schiet niet op.
Weet je de oplossing voor dit probleem, met DAO?
Zie mijn post iets eerder. EOF property dus.Op donderdag 22 november 2001 14:41 schreef AdrianP het volgende:
Heb ik gedaan.
Maar hoe kan ik dan zien of ie daadwerkelijk iets vind
Exact expert nodig?
je kunt toch wel ff kijke wat er in de module staat en dat gebruike, das een algemene manier om sql op acces los te late hoor
8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek
En jouw manier wil ook niet lukken.
Ik weet het niet meer.....
EOF gebruik je als in
' open database
If rs.EOF Then
' niks gevonden
Else
' wel wat gevonden
End If
Exact expert nodig?
Maar dat heb ik dus gebruikt
Maar mocht ie iets vinden, kan ik in principe het nog steeds gaan zoeken waar het staat. Of is daar ook iets voor?
Hmm je bedoelt, waar het de zoekstring staat in de gezochte string? Zie VB help voor de InStr (en andere string) functie(s).Op donderdag 22 november 2001 18:14 schreef AdrianP het volgende:
Maar mocht ie iets vinden, kan ik in principe het nog steeds gaan zoeken waar het staat. Of is daar ook iets voor?
Je query zal alleen die records teruggeven waarbij de zoekstring voorkomt in het zoekveld. Beetje duh antwoord, als ie nog steeds alle records in de db terug zou geven, zou heel de query zinloos zijn
Als je op meerdere velden zoekt, zul je wel even zelf (met oa InStr dus) moeten kijken in welk veld (of velden) de zoekstring voorkomt.
Exact expert nodig?
Ik maak alleen maar gebruik van text1.text om het zo maar te zeggen. Daarom wil ik dat de search um dik gedrukt maakt.
Maar volgens jouw kan ik beter, als ik die zoekopdracht doe, een nieuw venster openen met de zoekresultaten..?
Op vrijdag 23 november 2001 08:49 schreef AdrianP het volgende:
Ik maak alleen maar gebruik van text1.text om het zo maar te zeggen. Daarom wil ik dat de search um dik gedrukt maakt.
Maar volgens jouw kan ik beter, als ik die zoekopdracht doe, een nieuw venster openen met de zoekresultaten..?
Het maakt op zich niet uit hoe en waar je resultaten wil tonen, maar wat ik bedoel, is dat dat van latere zorg is.
Debug.print is best handig, begin maar eens met de query te fixen ed. en dat je door de gevonden records kan loopen (Do While Not rs.EOF... rs.MoveNext...), definitief tonen in je programma is gewoon van latere zorg, dat is "maar" de GUI (zeker niet onbelangrijk, maar in 1e instantie wel).
Al denk ik dat alleen text1 bold maken of niet als er iets gevonden is (of niet..) misschien niet al te duidelijk is, maar dat kan ik niet bepalen voor je
(noem het beesthje trouwens geen Text1 maar iets zinnigs, txtZoek of zo... dan is het over een paar maanden, of als iemand in je code kijkt, wat duidelijker over welk textboxje het gaat en wat het doet... maar da's een beetje offtopic).
Dus vergeet gewoon ff de interface, en doe gewoon in code controlleren, kijken of je records vind ed., als dat goed gaat kun je op je gemakje er een UI omheen bouwen, maar dan werkt de zoekfunctie gewoon, en hoef je daar niet meer over na te denken.
Een nieuw venster zou trouwens wel handig kunnen zijn, als je daarna "iets" met dat zoekresultaat wilt gaan doen. Je zoekopdracht kan meerdere records vinden, met een gewoon textboxje kun je in principe maar 1 ding kwijt. Als je dus meerdere records vind, kan het best handig zijn om een windootje te tonen met de gevonden records, waaruit de gebruiker dan het juiste record wat ie zocht kan kiezen.
Exact expert nodig?