[ Sole_boy @ 24.02.2002. 13:22 ] @
Postovanje,

poceo sam da radim neki program za cd klub
i imam sledece baze podataka:

1. Filmovi.db (Paradox)
2. Zanrovi.db (Paradox)

kreirao sam jedan datamodule gde su mi smestene sve baze podataka
e sada u Filmovi.db sam dodao jedan FLookUp na Zarnovi.db tj.
na naziv zanra u zanrovi.db tako da kada korisnik unosi nove filmove
u bazu samo selektuje zanr a ostalo unosi normalno!
Posto sam to zavrsio i sve radi kako treba. Hteo sam da uradim
pretragu diskova po zanru. Dodao sam u datamodule jedan Query
u koji sam smestio sva polja iz Filmovi.db
u SQL sam stavio: SELECT * FROM FILMOVI

napravio sam novu formu u kojoj sam stavio jedan DbLookUpComboBox koji pointuje
na sve zanrove znaci tu mi on izlista sve zanrove i to je OK
e sada meni treba jedan upit na koji ce kada ja selektujem recimo zanr AKCIJA
da izlista u GridBox sve filmove sa tim zanrom?

Zahvaljujem se unapred!
[ Makojdis @ 24.02.2002. 18:02 ] @
Upit izgleda ovako
Code:

select *
from filmovi
where zanr = :zanr

ovo :zanr je parametar

to upises u query>>strings
delphi 5 (predpostavljam da to koristis) ti sam generise parametar 'zanr'

onda pritiskom na dugme izvrsis ovo:
Code:

Query.Close;
Query.ParamByName('zanr').AsString:=combobox.text
Query.Open;
[ Sole_boy @ 25.02.2002. 08:53 ] @
Postovanje,

ovaj upit i code sto si mi napisao nazalost ne radi bas najbolje :(

a error je sledeci:

Query : parametar 'zanr' not found

mozda nisi razumeo pitanje, znaci imam dve baze podataka

filmovi.db | zanrovi.db
--------------------------
Rb Rb
Naziv Zanr
Zanr
G_glmc
- New field (zanr3-Lookup) na zanrovi.db(zanr)
--------------------------------------------------------------
meni treba kada korisnik hoce sve filmove po zanru (Akcija) npr.
da on izlista, mozda je sada malo jasnije!
[ Sole_boy @ 25.02.2002. 09:04 ] @
Zaboravih, a u query sam dodao sva polja iz filmovi.db
izuzev lookup-a
[ Sole_boy @ 25.02.2002. 09:59 ] @
Sredio sam :)

Code:

 dm.query.close;
       Dm.query.Sql.Clear;
       dm.query.Sql.Add ('select * from filmovi');
       dm.query.Sql.Add ('where Filmovi.zanr = "' +IntToStr(Dm.ZanrfRb.AsInteger)   
       +'"' + 'ORDER BY Naziv');
       dm.query.open;


E sada imam jos jedan problem, svaki clan cd kluba
treba da ima svoju malu bazu podataka, gde ce biti unoseni
podaci koje je diskove uzimao, kako to da odradim?
[ overflow @ 25.02.2002. 11:00 ] @
Citat:
Sole_boy:
E sada imam jos jedan problem, svaki clan cd kluba
treba da ima svoju malu bazu podataka, gde ce biti unoseni
podaci koje je diskove uzimao, kako to da odradim?


Napravi novu tabelu u sklopu te tvoje baze u okviru koje ces unositi podatke kad god se iznajmi neki CD, i to:

red.br
sifra/imeclana
sifradiska
datumnajma
datumvracanja (koji punis tek posto korisnik vrati cd)
zarada (koju izracunavas na osnovu neke fiksne cene*broj dana)

Kasnije odgovarajucim SQL upitima vracas sve diskove koje je iznajmio jedan korisnik i sl.


Mada, mozes i za svakog korisnika da kreiras tabelu u okviru koje ces unositi koje diskove je iznajmio ....
[ Riste Pejov @ 26.02.2002. 01:52 ] @
dobro bi ti doslo malo vise znanja o relacionih bazama.
To sto ti trazis bi se uradilo od prilike ovako:
prvo:
tabela za clanove sa sledece podatke (clan) :

clan_ID,
ime,
prezime,
adresa,
.. i tako dalje

vtoro:
baza za uzetih filmova (uzeti_filmovi):

clan_ID,
film_ID,
data,
... i jos sta ti treba

trece:
baza filmova (filmovi) :

film_ID
naslov,
zanr,
glumac,
.....

e sad tri tabele spojis, to se u SQL zove join, da ti ne objasnjavam joinove i tako dalje, evo ti mali SQL code koji vraca samo imena uzetih filmova za odredzenog clana, i data kad je film uzet:

SELECT clan.ime,clan.prezime,uzeti_filmovi.data,filmovi.naslov FROM
clan,filmovi,uzeti_filmovi WHERE (clan.clan_ID=uzeti_filmovi.clan_ID) AND
(uzeti_filmovi.film_ID=filmovi.film_ID)

kad se ovaj upit izvrsi onda dobijes ovakav recorset:

Igor Stojanovic RamboIII 22.02.2001
Igor Stojanovic Karate Kid 22.02.2001
Petar Stanojevic RamboIII 12.01.2002


ako hoces da recordset vraca samo podatke za odredjenog clana onda postavis jos jedan uslov: clan_ID=broj_clana_kog_trazis

primer, ako trazis sve uzete filmove za clan broj 34 onda bi to izgledalo ovako

SELECT clan.ime,clan.prezime,uzeti_filmovi.data,filmovi.naslov FROM
clan,filmovi,uzeti_filmovi WHERE (clan.clan_ID=uzeti_filmovi.clan_ID) AND
(uzeti_filmovi.film_ID=filmovi.film_ID) AND (clan.clan_ID=34)

za ovo da da se izvrsava vecom brzinom VAZNO je indeksirati tabele
tabela clanove bi imala primary key (clan_ID)
tabela uzetih filmova bi imala primary key (clan_ID,film_ID)
tabela filmova bi imala primary key (film_ID)

RDBMS su mnogo velika tema da bi se tek tako objasnilo sve ovo .....

keep hope alive


[ Makojdis @ 26.02.2002. 07:13 ] @
Citat:
Sole_boy:
Postovanje,

ovaj upit i code sto si mi napisao nazalost ne radi bas najbolje :(

a error je sledeci:

Query : parametar 'zanr' not found

mozda nisi razumeo pitanje, znaci imam dve baze podataka




Ovaj kod 100% radi
moras da napises ovako ... = :zanr ... dve tacke moraju da budu uz zanr(:zanr)
a ne =: zanr sto naravno ne radi
[ Sole_boy @ 26.02.2002. 09:12 ] @
Riste Pejov:
Hvala na odgovorima, pokusacu da uradim tako kako si rekao

Makojdis:
Probacu jos jednom da uradim ali sada nije ni vazno to sam sredio, u svakom slucaju hvala.

Nov problem :)
Dakle na onoj formu gde radim pretragu diskova po zanrovima imam DbLookUpComboBox ili kako se vec zove :) on je linkovan sa zanrovi.db
polje naziv_zanra i to sve radi OK. A problem je sledeci
kada radim pretragu recimo na AKCIJE on meni izlista sve AKCIJE i kada zatvorim formu i odem na formu za azuriranje filmova meni je prvi film AKCIJA a bio je recimo KOMEDIJA? Nadam se da sam bio jasan
[ Riste Pejov @ 26.02.2002. 14:07 ] @
Po meni, sve te DB aware kontrole ubrzavaju rad, ali ipak kao sto vidis
nemas totalnu kontrolu.
Ja licno praktikujem da koriscenje standardnih ( non DB aware ) kontrola
i normalno prezentiras ono sta zelis i kako zelis uz nekoliko SQL upita.

Ja bih ovo sa komboa uradio ovako:

prvo uzmi imena svih filmova, onda na query komponentu postavljaj
filter za svaki zanr, a redni broj filma (ono sto sam nazvao film_ID), skladiras u
neki TStringList i kad je film izbran onda iz liste izbacis film_ID i ubacujes red
za uzetog filma u tabelu.

Pozdrav