[access97] query probleem (SQL)

Pagina: 1
Acties:

  • efan
  • Registratie: Januari 2001
  • Niet online
ik heb database (in access 97) die 1 tabel bevat, met de volgende items:
boek-id
titel
auteur
uitgever
jaar van uitgave
soort materiaal
lokatie
vindplaats
trefwoord1
trefwoord2

dan nog een formulier met een tekstvak. en door middel van de opdrachtknop "Zoeken" wordt de query "Zoektrefwoorden" uitgevoerd die er dus als volgt uitziet:
code:
1
2
3
SELECT *
FROM Boek
WHERE (Boek.Trefwoord1) AND (Boek.Trefwoord2) LIKE "*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*";

volgens mij zou die nu toch de invoer van het tekstvak "Tekst0" en woorden die er op lijken moeten vinden in boeken.trefwoord1 en boeken.trefwoord2, maar als ik dus een zoekterm opgeef die 2 items zou moeten opleveren, dan geeft ie er maar 1 weer.
kan iemand mij zeggen wat er fout is aan deze SQL code?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

trefwoord1 and trefwoord2 like "%xxx%" :?
Een and operatie tussen 2 strings :?

bedoel je niet bijvoorbeeld: (trefwoord1 like "%xxx%") or (trefwoord2 like "%xxx%")

Who is John Galt?


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
Kun je wat voorbeeldgegevens en resultaten kunnen geven? Het is mij niet helemaal duidelijk. Ik heb even in verglijkbare SQL in een van mijn db's gekeken en ik zag dat ik ' ipv " had gebruikt.

Probeer het eens om de eerste en laatste " door een ' te vervangen. Als je snapt wat ik bedoel.

[edit]
Dit dus;

code:
1
Like '*" & Me!zoekond & "*'


[edit2]
En wat justmental zegt is ook helemaal waar. Bij jouw SQL moet je zoekcriteria bij beide velden voorkomen.

[ Voor 37% gewijzigd door Masch op 20-07-2004 15:56 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
masch: als ik die aanhalingstekens verander, dan werkt de query niet meer. krijg dan helemaal niks meer terug.

en justmental: als ik die OR functie gebruik dan pakt ie van 2 items toch ook maar 1 item? en bij AND allebei?

aha... ik hij doet het al! was alleen nog de AND vergeten te veranderen in OR. stom... hardstikke bedankt voor het helpen
en voor de mensen die dit topic later bekijken, dit moest het dus worden:
code:
1
2
3
SELECT *
FROM Boek
WHERE (Boek.Trefwoord1 LIKE "*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*") OR (Boek.Trefwoord2 LIKE "*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*");

[ Voor 57% gewijzigd door efan op 20-07-2004 16:03 ]


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
ido schreef op 20 juli 2004 @ 15:58:
masch: als ik die aanhalingstekens verander, dan werkt de query niet meer. krijg dan helemaal niks meer terug.

en justmental: als ik die OR functie gebruik dan pakt ie van 2 items toch ook maar 1 item? en bij AND allebei?

aha... ik hij doet het al! was alleen nog de AND vergeten te veranderen in OR. stom... hardstikke bedankt voor het helpen
en voor de mensen die dit topic later bekijken, dit moest het dus worden:

knip enzo
Even een vraag voor mijzelf. Werkt het niet met de qoutes zoals ik aangaf in Access '97?? In 2000 werkt dit namelijk wel. Kun je even testen of deze werkt?

code:
1
2
3
4
SELECT *
FROM Boek
WHERE (Boek.Trefwoord1 LIKE '*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*') 
OR (Boek.Trefwoord2 LIKE '*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*');

[ Voor 17% gewijzigd door Masch op 20-07-2004 16:05 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
masch: even geprobeerd, maar in 97 werkt dit blijkbaar niet. krijg dan helemaal geen resultaten terug

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
ido schreef op 20 juli 2004 @ 16:10:
masch: even geprobeerd, maar in 97 werkt dit blijkbaar niet. krijg dan helemaal geen resultaten terug
Vreemd. Access is met dit soort dingetjes echt ontzettend onbetrouwbaar imo. Ik kan me herinneren dat ik hier al veel vaker mee heb zitten ouwehoeren.

In ieder geval bedankt voor het uitproberen.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • BovenHond
  • Registratie: Februari 2002
  • Laatst online: 17:42
Ik liep tegen eenzelfde soort probleem op. Ik heb het zo opgelost. Je zoekt waarschijnlijk toch in een formulier.

formuliernaam.VeldNaamResultaat.SetFocus

DoCmd.FindRecord "*" & formuliernaam.VeldNaamZoek & "*", , False, acSearchAll, False, acCurrent, False

  • efan
  • Registratie: Januari 2001
  • Niet online
ehm nou voor mij is het al opgelost, en ik zocht dus via een formulier met tekstbox (die gekoppeld was aan een query) in een tabel (back-end bestand, want de database is gesplitst). ik moet nu alleen nog uitzoeken hoe ik items uit een rapport kan "weg" filteren...

[ Voor 19% gewijzigd door efan op 20-07-2004 19:01 ]


  • efan
  • Registratie: Januari 2001
  • Niet online
nog even een aanvullend vraagje: zoals hierboven staat, kan ik dus inderdaad een trefwoord opgeven om te zoeken, die vervolgens wordt gezocht in de items trefwoord1 en trefwoord2. maar hoe kan ik nu 2 trefwoorden achter elkaar typen (bijv. grote database) en hierop gaan zoeken? want nu kan ik alleen op "grote" of "database" zoeken en niet twee tegelijk.

  • efan
  • Registratie: Januari 2001
  • Niet online
*kick*

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
Ik heb het zelf nooit gedaan. Ik zou zelf dmv VBA proberen om de waarde die in de textbox staat te ontleden. Dwz kijken of er spaties in zitten, en er dus meerdere waardes uithalen. Aan de hand van deze waardes zou ik dan een dynamische query op gaan bouwen. Enige probleem is dat je dus niet weet hoeveel spaties er in het tekstbox staan, dus je weet ook niet hoeveel waardes je kunt verwachten. Hier kun je volgens mij wel iets voor bedenken.

Ik weet het, het klinkt allemaal nogal abstract, maar het moet wel kunnen. Ik probeer zelf altijd eerst in mijn hoofd na te gaan wat je precies wilt dat er gebeurd, daarna schrijf ik dit simpel op, om aan de hand daarvan de code te schrijven.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
nou het is de bedoeling dat er maar maximaal 2 trefwoorden achter elkaar worden opgegeven dus je hebt maar te maken met 1 spatie (die je er mischien uit kunt filteren?).
de code die ik nu heb staat hierboven al genoemd. volgens mij moet je met een soort null functie i.c.m. AND toch mogelijk zijn? iemand ervaring met zoiets?

[ Voor 12% gewijzigd door efan op 22-07-2004 14:27 ]


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
Ik zou het persoonlijk niet in SQL op proberen te lossen, maar in VBA. Je moet die waarde in de tekstbox namelijk omzetten naar 2 strings. Aan de hand van die strings kun je dan je query gaan maken. Dit moet dan dynamisch, omdta je een of 2 strings kunt hebben (1 of 2 waardes)

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
heb je hier mischien een voorbeeldje van? ik kom er namelijk niet uit. en via google kom ik niet verder dan query by forms e.d., gewoon met 1 trefwoord...

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
[rml][ SQL] Rottige Where voorwaarde[/rml]

Dankzij dit topic heb ik heel wat geleerd mbt dynamische query's.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
Masch schreef op 22 juli 2004 @ 15:53:
[rml][ SQL] Rottige Where voorwaarde[/rml]

Dankzij dit topic heb ik heel wat geleerd mbt dynamische query's.
ik zal het eens bekijken. bedankt voor de tip :)

  • efan
  • Registratie: Januari 2001
  • Niet online
dit is volgens mij de code die ik inderdaad ook nodig heb (zoeken op meer items):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim db As Database
Dim objQuery As QueryDef
Dim strSQL, strWhere, strQuery As String

Set db = CurrentDb
strSQL = "Select * from Boek AS O"
strWhere = ""

If Not IsNull(Me![tekst0]) And Not IsNull(Me![tekst1]) Then
    strWhere = " where O.[datum in] between " & Me![BDI] & "and " & Me![EDI] & " "

ElseIf IsNull(Me![tekst0]) And Not IsNull(Me![tekst1]) Then
    strWhere = " where O.[datum in] between #1-1-1900# and " & Me![EDI] & " "

ElseIf Not IsNull(Me![tekst0]) And IsNull(Me![tekst1]) Then
    strWhere = " where O.[datum in] between #" & Me![BDI] & "# and #31-12-2999# "
End If

strQuery = strSQL + strWhere

Set objQuery = db.CreateQueryDef("Gevonden titels", strQuery)


maar nu snap ik de regel strSQL = "Select * from Boek AS O" niet, omdat ik niet weet wat er na die AS moet komen i.p.v. AS 0.
en tevens de regel die achter de strWhere's moeten komen.

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
Het stukje Boek AS O zegt alleen maar dat de tabel boek in de rest van de query als O aangemerkt kan worden. In de string strWhere staat alles wat er in je where statement moet komen.

edit:
WHERE (Boek.Trefwoord1) AND (Boek.Trefwoord2) LIKE "*" & [Formulieren]![Zoek op trefwoorden]![Tekst0] & "*";

Dat stukje dus. Of uitgebreider, wat jij wilt, dit kun je laten afhangen van wat de gebruiker heeft ingevoerd.

[ Voor 40% gewijzigd door Masch op 22-07-2004 16:18 ]

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
dus waar ik nu Boek.titel heb, kan ik nu bij de strwhere 0.[titel] gebruiken?

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 22-05 12:04
ido schreef op 22 juli 2004 @ 16:18:
dus waar ik nu Boek.titel heb, kan ik nu bij de strwhere 0.[titel] gebruiken?
Yep.

Probeer maar eens uit zou ik zeggen. ;)

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • efan
  • Registratie: Januari 2001
  • Niet online
oke, ik heb nu een formulier gemaakt in ontwerpweergave met 2 tekstvakken genaamd tekst0 en tekst4 en een opdrachtknop genaamd knop6, waarachter ik de volgende code heb geplaatst:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim db As Database
Dim objQuery As QueryDef
Dim strSQL, strWhere, strQuery As String

Set db = CurrentDb
strSQL = "Select * from Boek AS O"
strWhere = ""

If Not IsNull(Me![Tekst0]) And Not IsNull(Me![Tekst2]) Then
    strWhere = " where O.[trefwoord1] LIKE " * " & [Formulieren]![Formulier1]![Tekst0] & " * " OR where O.[trefwoord2] LIKE " * " & [Formulieren]![Formulier1]![Tekst2] & " * ""

ElseIf IsNull(Me![Tekst0]) And Not IsNull(Me![Tekst2]) Then
    strWhere = " where O.[trefwoord2] LIKE " * " & [Formulieren]![Formulier1]![Tekst2] & " * ""

ElseIf Not IsNull(Me![Tekst0]) And IsNull(Me![Tekst2]) Then
    strWhere = " where O.[trefwoord1] LIKE " * " & [Formulieren]![Formulier1]![Tekst0] & " * ""
End If

strQuery = strSQL + strWhere

Set objQuery = db.CreateQueryDef("Trefwoorden", strQuery)

maar als ik nu dus het formulier open en bijv. in het eerste tekstvak (tekst0) wil zoeken naar "groot" dan krijg ik een fout 13: typen komen niet overeen. ook bij andere zoekopdrachten in bijv. tekst2, tekst1 en tekst2 dan krijg ik deze melding.
en zowiezo als het al zou werken dan is het nog niet echt optimaal volgens mij, want als je bij trefwoord2 iets invult, wat in de tabel bij trefwoord2 staat dan vind hij nog niks.
Pagina: 1