Toon posts:

[ASP/Access]Zoekfunctie met optionele velden*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben nu met dreamweaver MX (ASP) bezig en ik probeer een zoek functie te maken op een access database de zoek functie zelf lukt wel maar als ik wil zoeken op meerdere velden en een veld blijft leeg dan doettie het niet. ( als ik alle velden waar ik op zoek wel invul werkt het perfect) maar als er een zoek veld niet word in gevuld dan werkt de hele zoek functie niet meer. Klinkt het warrig nou voor mij is het het ook.

VB. Iemand KAN zoeken op naam en achternaam maar als hij enkel in het veld naam iets zet en niets in achteraam en hij zoekt dan vind hij niets.

Ik wil dus een zoek functie die zoekt op verschillende velden maar als er een veld niet word in gevuld dat de functie nog gewoon werkt voor de velden die wel zijn in gevuld.

Zo ik hoop dat iemand het nog snapt en mij hier mee kan helpen.

Alvast bedankt!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Je query dynamisch aanmaken.. .:P

ASP:
1
2
3
4
5
6
Dim sql

SQL = "Select * FROM UserName Where"
If Not Request.Form("Naam") =  "" Then
    SQL = SQL & " naam = '" & Request.Form("Naam") & "'"
End if


't is trouwens vrij brakke code, maar geeft je een idee...

[ Voor 79% gewijzigd door gorgi_19 op 17-06-2003 17:48 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Gebruik een LIKE met een % achter de zoekterm geplakt, dat matcht als het goed is ook lege velden.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Ja dat met % had ik geprobeerd maar dat werkte niet echt lekker maar ik zal het dan toch nog eens proberen!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 17 juni 2003 @ 17:58:
Ja dat met % had ik geprobeerd maar dat werkte niet echt lekker maar ik zal het dan toch nog eens proberen!
Hoezo werkte dat niet echt lekker?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Dreamweaver MX ondersteunt toch zeker ook wel if() statements. Wat zou je nou doen als het veld leeg is? Is het dan niet logisch om het veld dan niet te queryen? :)
Gerco schreef op 17 juni 2003 @ 17:53:
Gebruik een LIKE met een % achter de zoekterm geplakt, dat matcht als het goed is ook lege velden.
Like met een non const is niet in staat om een index te gebruiken. AUB niet gebruiken dus :)

[ Voor 48% gewijzigd door Glimi op 17-06-2003 18:05 ]


  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
Glimi schreef op 17 June 2003 @ 18:03:

Like met een non const is niet in staat om een index te gebruiken. AUB niet gebruiken dus :)
Dit begrijp ik niet helemaal. Kun je dit uitleggen? Ik heb trouwens ongeveer hetzelfde probleem als de topicstarter, maar dan in JSP. Zie dit topic.

  • Folkert
  • Registratie: September 2001
  • Laatst online: 10-07 07:58
Gebruik je wel 'OR' in de query? Als je 2 velden hebt, zoek je, imho, op de voornaam óf de achternaam. Als je voornaam leeg is zal er verder gezocht op de achternaam.
Kan je ff je query plaatsen?

hm, Or levert natuurijk niet het gewenste resultaat... |:(

[ Voor 17% gewijzigd door Folkert op 18-06-2003 09:39 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Folkert schreef op 18 June 2003 @ 09:38:
Gebruik je wel 'OR' in de query? Als je 2 velden hebt, zoek je, imho, op de voornaam óf de achternaam. Als je voornaam leeg is zal er verder gezocht op de achternaam.
Kan je ff je query plaatsen?
Die heeft hij nog niet.. :+
Hij vraagt juist hoe hij hem kan maken.. :P
Glimi schreef op 17 juni 2003 @ 18:03:
Dreamweaver MX ondersteunt toch zeker ook wel if() statements. Wat zou je nou doen als het veld leeg is? Is het dan niet logisch om het veld dan niet te queryen? :)
Dreamweaver kan als ik me goed herinner iets bakken met asp scripts; je komt dan ongeveer op mijn bovenstaande code uit.. :P
Like met een non const is niet in staat om een index te gebruiken. AUB niet gebruiken dus :)
Het nadeel alleen is dat niet iedereen de mogelijkheid heeft om een full text search uit te voeren.. Als je gebonden zit aan een MS Access database, heb je niet veel keus.. :P

[ Voor 49% gewijzigd door gorgi_19 op 18-06-2003 09:41 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Dit begrijp ik niet helemaal. Kun je dit uitleggen?
Glimi bedoeld dat wanneer je gebruik maakt van het LIKE statement er geen gebruik kan worden gemaakt van eventueel aangemaakte indices, en dit komt de performance dus niet ten goede.
SQL:
1
2
3
4
5
6
SELECT FROM tabel
 WHERE naam='" & naam & "'"


SELECT FROM tabel
 WHERE naam LIKE '%" & naam & "%'"

De eerste manier is dus beter aangezien hier gebruik kan worden gemaakt van een eventuele index op het veld "naam" ;)

[ Voor 27% gewijzigd door DeverauX op 18-06-2003 09:41 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

DeverauX schreef op 18 June 2003 @ 09:40:
SQL:
1
2
3
4
5
6
SELECT FROM tabel
 WHERE naam='" & naam & "'"


SELECT FROM tabel
 WHERE naam LIKE '%" & naam & "%'"
Waarbij wel het verschil tussen de 1e en de 2e is, dat de eerste je de veldwaarde inhoudelijk volledig moet matchen, en het tweede het gedeelte in de veldwaarde moet voorkomen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
Ok, dank. Dat is duidelijk.

  • Folkert
  • Registratie: September 2001
  • Laatst online: 10-07 07:58
Wat is eigenlijk je default waarde. Ik weet dat een query, gemaakt in DWMX altijd werkt met een default waarde op het moment dat je geen waarde doorgeeft.

Je moet denk ik een query maken die alle waarden retourneert indien een veld leeg is. Zoek je op achternaam, pakt hij iig alle voornamen + de betreffende achternaam.

DWMX maakt deze code aan voor de default waarde:
ASP:
1
2
3
4
5
<%
Dim RS_IcoonResult__varKey
RS_IcoonResult__varKey = "%"
if (Request("keyword")  <> "") then RS_IcoonResult__varKey = Request("keyword") 
%>


en deze code voor je SQL:
ASP:
1
2
3
4
5
6
7
8
9
<%
set RS_IcoonResult = Server.CreateObject("ADODB.Recordset")
RS_IcoonResult.ActiveConnection = MM_Icoon_STRING
RS_IcoonResult.Source = "SELECT *  FROM Icoon  
WHERE keywords LIKE '%" + Replace(RS_IcoonResult__varKey, "'", "''") + "%'
AND land = 'nl'  
ORDER BY Categorie"
etc....
%>


Deze heb ik zelf ooit een keer gemaakt. Hij kijkt naar de waarde van een keyword. Als deze niet wordt ingevuld, vervangt hij de waarde van het veld door '%', een wildcard...

En dan wordt je query iets van:
SQL:
1
2
3
SELECT * FROM adressen 
WHERE voornaam LIKE '%VarVoornaam%' 
AND achternaam LIKE '%varAchternaam%'


Bij je variabelen vul je beide variabelen in (varVoornaam en varAchternaam), je geeft ze een standaard waarde van '%' mee. En verder krijgen ze de waarde van de form elementen...

[ Voor 41% gewijzigd door Folkert op 18-06-2003 09:57 ]


  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
Dank je, het is gelukt!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
MySQL also uses indexes for LIKE comparisons if the argument to LIKE is a constant string that doesn't start with a wildcard character. For example, the following SELECT statements use indexes:

mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Patrick%";
mysql> SELECT * FROM tbl_name WHERE key_col LIKE "Pat%_ck%";

In the first statement, only rows with "Patrick" <= key_col < "Patricl" are considered. In the second statement, only rows with "Pat" <= key_col < "Pau" are considered.

The following SELECT statements will not use indexes:

mysql> SELECT * FROM tbl_name WHERE key_col LIKE "%Patrick%";
mysql> SELECT * FROM tbl_name WHERE key_col LIKE other_col;

In the first statement, the LIKE value begins with a wildcard character. In the second statement, the LIKE value is not a constant.
Dat is wat MySQL er van bakt. Als ik het correct had werkt MSSQL ook op deze manier. Access weet ik zo net niet eigenlijk :)
Pagina: 1