Toon posts:

[Delphi] Probleem met grootte van param in query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een formulier waar de gebruiker een zoek string in kan voeren. Bij ieder karakter dat ingevoerd wordt, wordt de query uitgevoerd en krijg je dus steeds een actueel resultaat te zien. Verder kan de gebruiker ook nog aangeven met een combobox in welke velden gezocht moet worden. (Dus bijv prijs, artikelnaam, afzet, alles, enz...).

Nu heb ik gezien dat delphi voor de parameters kijkt naar de velden. Daar bedoel ik mee, de lengte van het veld. Bijv is het artikelnaam veld van type VARCHAR(10) dan kan je ook geen grotere waarden meegeven bij de param. Opzich wel enigszins logisch maar toch wil ik dat niet.

In mijn query stop ik bij de parameter waarden (dus wat de gebruiker als zoekstring invoert) een % ervoor en er achter. Dus wanneer de gebruiker 9 tekens heeft ingevoerd bij een db veld die gedefineerd is als VARCHAR(10), heb je dus een probleem en zal delphi een foutmelding genereren. De invoer is 9 + 2x een % = 11 tekens.

Nu kan ik wel allerlei testen gaan uitvoeren, maar dat is best veel werk. Het liefst heb ik gewoon dat delphi de grootte van de velden via de metadata gewoon negeerd. Nu dacht ik de propery paramcheck daarvoor te kunnen gebruiken. Maar die wordt helaas niet hiervoor gebruikt.

Heeft iemand anders ook wel eens met dit probleem te maken gehad? Zo ja wat voor oplossing heb je dan gebruikt.

Kijk als het echt niet anders kan, ga ik zelf wel die controles uitvoeren. (Dus wanneer de user input 9 tekens zijn, moet ik dus in where clausule voor dat veld 2 items stoppen ==> where field Like '%abcdefghi' or field Like 'abcdefghi%', enz....)

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 07:15
Misschien kan je beter een filter gebruiken ipv steeds een query uitvoeren.

[ Voor 8% gewijzigd door Just_a_Gamer op 02-04-2004 20:43 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Opzich vind ik het een vreemd probleem wat je beschrijft, maargoed :) Je kan toch ook gewoon geen parameters gebruiken en zelf je query opbouwen?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 02 april 2004 @ 21:22:
Opzich vind ik het een vreemd probleem wat je beschrijft, maargoed :)
En wat vind je er precies vreemd aan, want de manier van zo laten zoeken door de gebruiker komt wel meer voor in andere applicatie's. En door die % tekens te gebruiken, die je dus bij een LIKE wil gebruiken, krijg je deze problemen als je er geen speciale controle in bouwt.
Je kan toch ook gewoon geen parameters gebruiken en zelf je query opbouwen?
Tuurlijk, dat is ook de manier hoe ik het vroeger deed. Echter dat heeft nadelen uiteraard met dingen als quotjes, enz....

Dus dat is dus de rede dat ik gebruik maak van die param.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nee, dat een parameter zich iets aan zou trekken van een lengte vind ik vreemd. Zoals je zelf al zegt moet je zelf weten als je gek wilt doen. :)

Ja, ik weet het voordeel van het gebruik van parameters. Bovendien geef je de RDBMS de kans nog verder te optimalizeren. Maar als het niet lukt is de ouderwetse manier toch ook wel te doen?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ja misschien moet ik dat toch maar weer gaan doen, want anders moet ik echt veel controles gaan doen.

edit:
Toch jammer dat Delphi te netjes is met die controle's :) bij die param

[ Voor 31% gewijzigd door Verwijderd op 02-04-2004 22:08 ]


  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Misschien een dom idee, maar waarom zou je zoekwaardes toelaten die groter zijn dan de Max lengte van het veld? De resultset zal toch leeg zijn...
Dus zou je enerzijds in je GUI de input kunnen beperken, of anderzijds transparant een copy(InputValue,1, maxlength) mee kunnen geven als parameter?
Ik zeg maar wat hoor :)

Verwijderd

Topicstarter
Wezen schreef op 03 april 2004 @ 11:32:
Misschien een dom idee, maar waarom zou je zoekwaardes toelaten die groter zijn dan de Max lengte van het veld? De resultset zal toch leeg zijn...
Omdat de gebruiker kan aangeven dat de zoekstring voor alle velden kan zijn, dus heb je niet 1 bepaalde max lengte. En tevens al zou je de maximale lengte gebruiken dan heb je alsnog het probleem wat ik beschreef.

  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

Jij kan toch nog altijd lengte van die parameters handmatig invullen? Of zeg ik iets geks. Als het goed is doet Delphi het niet meer overschrijven. Hij vult lengte enzo eerste keer zelf in, maar daarna kun je altijd lengte aanpassen naar je wens.
Pagina: 1