[ darkofdoom83 @ 26.08.2004. 19:59 ] @
Pozdrav!
Radim seminarski rad iz programiranja al sam blokirao.Naime:
Pravim program za rad sa bazom podataka ucenika.Bazu sam napravio
u accessu,a u vb-u radim sa data kontrolom i dbgridom.
Treba mi pomoc kako da resim sledece:
Potrebna mi je opcija PRETRAGA koja ce da pretrazi celu bazu po kriterijumima:
napravio sam znaci prozor,u njemu stoje 4 text boxa (ime,prezime,indeks,smer)
i dbgrid u koji bih zeleo da ispisem rezultat pretrage.
Potrebno je da pretraga radi vec sa jednim unetim podatkom.Znaci ako unesem
samo ime da mi izlista sve ucenike sa zadatim imenom.Ovo i nije problem,resio sam
sa sql komandom
Set data1.Recordset = db.OpenRecordset("SELECT * FROM student WHERE ime ='" & text1.Text & "'")
Ali kako da uradim da mi izvrsi pretragu sa 2 uneta podatka.Recimo ime i prezime.
I onda da mi izlista svakog sa tim imenom i prezimenom,a ne samo da gleda recimo
ime kao u gornjem primeru ???
Probao sam sa sql komandom OR u gornjem primeru ali to nije to,on gleda ili jedno
ili drugo,a ne oba!
Molim vas pomozite!! Rekli su mi da ovo treba uraditi sa dinamicki sql-om,a ja pojma
nemam sta je to,i ovo sto sam dosad odradio sam jedva odradio.

ps.sorry ako bas i nije razumljivo sta trazim,umoran sam,radim vec 9 sati na ovom
seminarskom.
[ Marko_L @ 26.08.2004. 20:19 ] @
Umesto OR stavi AND.Ovako:
Code:
Set data1.Recordset = db.OpenRecordset("SELECT * FROM student WHERE ime = '" & text1.Text & "' AND prezime = '" & Text2.Text & "'")
[ darkofdoom83 @ 26.08.2004. 20:50 ] @
Hvala na brzom odgovoru,ali to nije to na sta sam ja mislio.
Ovako mi ispise podatak iz baze samo kad popunim OBA polja,a fora je u tome
da ova pretraga treba da radi vec i sa jednim podatkom.
Pr.: Za ime unesem Darko. Izlista mi svakog Darka iz baze.
Ocu da preciziram i upisem za prezime Ilic.Izlista mi svakog Darka Ilica iz baze.
Dalje na primer ako ne znam prezime unesem ime i broj indeksa i on mi izbaci
ime tog studenta.

Znaci poenta je da pretraga radi i sa jednim i sa vise podataka.
[ `and @ 26.08.2004. 23:40 ] @
Ja sam imao slican problem pa sam ga resio tako sto sam prvo napravio petlju koja proverava koja polja su uneta pa na osnovu toga zvao funkcije za pronalazenje podataka u bazi . U tvom slucaju bi trebalo da imas tri funkcije : Jednu samo za ime, jednu samo za prezime i jednu za oba ... moze ?
[ vujkev @ 27.08.2004. 07:58 ] @
Code:
Dim strSQL as String
strSQL = "SELECT * FROM student WHERE 1=1"
if text1.Text<>"" then strSQL = strSQL & " and ime = '" & text1.Text & "'"
if text2.Text<>"" then strSQL = strSQL & " and Prezime = '" & text2.Text & "'"

' i sad ovako koliko god imaš polja
' na kraju samo pretražiš 

Set data1.Recordset = db.OpenRecordset(strSQL)

ne znam koliko je ono "1=1" pametno rešenje, ali ne znam kako je najbolje ovo uraditi. Ovako je sigurno najlakše
[ mladenovicz @ 27.08.2004. 09:21 ] @
Citat:
vujkev
ne znam koliko je ono "1=1" pametno rešenje, ali ne znam kako je najbolje ovo uraditi.


Napravi funkciju AddToWhere koja dodaje uslov u WHERE klauzulu. Evo koda, doduse ASP, ali je ideja jasna

Code:

<%
Function AddToWhere(WhereString, Condition, Operand)
    Dim Res
    
    If WhereString = "" Then 
        Res = " WHERE " & Condition
    Else
        Res = WhereString & " " & Operand & " " & Condition
    End If
    
    AddToWhere = Res
End Function
%>


Ova funkcija se po potrebi prosiri. Imao sam negde mnogo vecu funkciju, sa vise featurea (koja ima jos ulaznih parametara, pa dodaje '' za string, ## za date, ...) ali ne mogu sad da nadjem ;)
[ blackman @ 27.08.2004. 09:30 ] @
Probaj ovako:

Code:
Dim strSQL as String
Dim strWhere as String

strSQL = "SELECT * FROM student"
strWhere = ""

if text1.Text<>"" then
   strWhere = strWhere & "Ime = '" & text1.Text & "' and "
end if
if text2.Text<>"" then
   strWhere = strWhere & "Prezime = '" & text2.Text & "' and "
end if

...  // Ovako za svako polje

if strWhere <> "" then    // zavrsava se sa " and " pa treba ovo skinuti
   strWhere = left(strWhere, len(strWhere) - 5)
end if

if strWhere <> "" then  // komletirati SQL upit
   strSQL = strSQL & " WHERE " & strWhere
end if

Set data1.Recordset = db.OpenRecordset(strSQL)


Ovako će raditi i ako nemaš ništa izabrano od uslova.

Pozdrav !!!
[ darkofdoom83 @ 27.08.2004. 12:04 ] @
Hvala blackman,ovaj kod radi bas to sto mi treba! :) :) :)
Hvala i ostalima na idejama!

Nego imao bih jos jedan problem,posto sam ovaj resio.
U tabeli STUDENT imam polje SMER u kome imam tri vrste smera E,I,M .
Trebao bi mi kod sa kojim mogu da promenim ova slova u mala.Znaci u bazi
mi sve stoji sa velikim slovima,i kad recimo odem u meni i izaberem "promeni slova"
onda mi sva ta velika slova promeni u mala,ali ne samo kod ispisa na ekran,vec i u
samoj bazi!
I ovo sam probao da resim ali mi ne ide,programiranje mi nije jaca strana...
[ vujkev @ 27.08.2004. 12:28 ] @
Code:
Update STUDENT set smer = LCase(smer)

tj
Code:
db.execute "Update STUDENT set smer = LCase(smer)"
[ blackman @ 27.08.2004. 12:58 ] @
Još jedna napomena vezana za mala i velika slova.

Ako su ti potrebna samo mala slova u tabeli koja kao takva i prikaziješ,
ograniči unos za to polje u tabeli samo na mala slova kroz KODIRANJE.

Pozdrav !!!
[ darkofdoom83 @ 27.08.2004. 14:56 ] @
VUJKEV hvala ti,to je to ! :)

Hvala i ostalima koji su mi pomogli,ili barem pokusali!
Zavrsio sam seminarski,jos mozda malo proradim na error handlingu...

Blackman : to sam vec odradio,posto su mi bila potrebna velika slova
namestio sam da sva slova koja unese u textbox prebaci prvo u velika
i tako upise u bazu!