[ Sale_123 @ 02.10.2004. 09:28 ] @
Pozdrav svima. Imam jedan problem koji me muci pa bih vas zamolio da pomognete. Evo o cemu se radi:

Zamislimo da imamo jednu tabelu u bazi i da ona sadrzi neko polje "Kolicina" tipa Integer. Ne znamo koja je ni minimlana ni maksimlna vrijednost.

Sada hocu da omogucim da korisnik moze da pretrazuje po "kolicini" tako da moze odrediti granice.

...... WHERE Kolicina BETWEEN @PocetnaVrednost AND @KrajnjaVrednost
...

Sada nije problem ako koisnik unese pocetnu i krajnu vrednost pa pretraga uspije.Ali sta ako korisnik ne unese vrednost nego hoce sve moguce rezulatate da vidi ili unese samo pocetnu ili krajnju vrijdenost, tj. postoji li neki wildcard za brojeve

Unapred hvala.
[ caiser @ 02.10.2004. 09:57 ] @
WHERE Kolicina < "PocetnaVrednost" AND Kolicina > "KrajnjaVrednost"
[ Sale_123 @ 02.10.2004. 10:19 ] @
hvala ali nisam na to mislio. Sto se toci samog Access-a BETWEEN je podrzano.

@PocetnaVrednost i @KrajnjaVrednost su parametri OleDBCOmmande ali sta ako korisnik hoce da vidi sve vrednosti.

Napr. neka imamo u tabeli sledece vrednosti :

1
2
3
4
5

Ako stavimo ..... BETWEEN @PocetnaVrednost AND @KrajnjaVrednost
gdje je :
@PocetnaVrednost=2 i
@KrajnjaVrednost= 5 - u povratku ce mo dobiti 3 i 4.

Ali ako ne navedemo jednu od ovih vrednosti onda ce mo dobiti prazan rezultat.

Problem je u tome da li postoji neki wildcard za brojeve
npr. BETWEEN * AND * (Ove radi sa textom ali ne sa brojevima)
[ gosha @ 03.10.2004. 20:14 ] @
Samo ti pomaže dinamičko kreiranje upita.


Pozdrav Goran.
[ chupcko @ 04.10.2004. 08:00 ] @
Ili neki malo slozeniji upit (proglasis neke vrednosti za "dzokere") i ako taj tvoj SQL radi kondicione AND i OR ... pomuci se malo, eto imas dosta hintova.
[ Sale_123 @ 05.10.2004. 22:39 ] @
Problem i jeste u tome sto ima veliki broj AND i OR upita. Medjutim ako upit kreiram u kodu to nije problem no problem je ako ja taj upit zelim snimiti kao preceduru na sql serveru.

P.S. Trenutno koristim MSDE
[ Zidar @ 06.10.2004. 13:23 ] @
Ako koristis SQL proceduru, napravi da su parametri opcioni, neobavezni. Onda upotrebi IF da razdvojis slucajeve. U primeru koji ti saljem postoje samo dva slucaja - oba parametra su NULL ili nisu NULL. Ti mozes da razmotris sve moguce kombinacije i napises celu gomilu IF naredbi, pa procedura jednostavno odradi sta treba u zavisnosti od trenutne situacije.
Code:

CREATE PROCEDURE procBetween
@PocetnaVrednost int = NULL , @KrajnjaVrednost int = NULL
--- = NULL znaci da su parametri opcioni, nisu obavezni, mogu se preskciti pri pozivu procedure

IF @PocetnaVrednost IS NULL AND @KrajnjaVrednost SI NULL
begin
SELECT X,Y,Z FROM SomeTable
---- ovde nema WHERE, posto nema paramatara,  znaci prikazuju se SVI
end
ELSE  ---- parametri postoje 
begin
SELECT X,Y,Z FROM SomeTable 
WHERE X BETWEEN @PocetnaVrednost AND @KrajnjaVrednost 
GO
/* END of PROC */
end
[ Zidar @ 06.10.2004. 13:25 ] @
Oops, greska u kucanju koda. Treba ovako:
Code:

CREATE PROCEDURE procBetween
@PocetnaVrednost int = NULL , @KrajnjaVrednost int = NULL
--- = NULL znaci da su parametri opcioni, nisu obavezni, mogu se preskciti pri pozivu procedure
AS
IF @PocetnaVrednost IS NULL AND @KrajnjaVrednost SI NULL
begin
SELECT X,Y,Z FROM SomeTable
---- ovde nema WHERE, posto nema paramatara,  znaci prikazuju se SVI
end
ELSE  ---- parametri postoje 
begin
SELECT X,Y,Z FROM SomeTable 
WHERE X BETWEEN @PocetnaVrednost AND @KrajnjaVrednost 
end
GO
/* END of PROC */
[ dotnet @ 06.10.2004. 16:51 ] @
Pozdrav,

Mozes da iskoristis kod koji je napisao Zidar, s tim da u else delu ispitas da li su uneta oba parametra ili samo jedan od njih. Tako da ces tu da imas tri slucaja, vece od pocetne vrednosti, manje od krajnje vrednosti i between.