[ biske86 @ 19.09.2008. 16:10 ] @
Ovo je logičan nastavak projektovanja informacionog sistema biblioteke koje sam radio u alatima BPwin i ERwin. Tabele i relacije sam generisao iz ERwin-a i napravio sam početnu formu koja mi se pojavljuje kada pokrenem bazu. U attachmentu se nalazi baza koju možete slobodno koristiti za učenje ili komercijalnu upotrebu a od vas očekujem predloge, sugestije i kritike bilo koje vrste..

Odgovarajući BPwin i ERwin fajlovi se nalaze u posebnoj temi u forumu Baze podataka na adresi:
http://www.elitesecurity.org/t...-biblioteke-predlozi-sugestije
[ biske86 @ 20.09.2008. 13:36 ] @
Evo i prvog problema pri izradi aplikacije. Očigledno da još nisam dobro ušao u ovu stvar sa postavljanjem upita i azuriranja tabela. Naime, napravio sam formu 'frmUnosOsnovnihPodatakaOCitaocu' i na njoj se nalaze polja iz upita qryCitalac. Prethodno sam u tabeli 'Citalac' promenio svojstvo polja 'SifraZanimanja' iz Textbox u Combobox na kartici Lookup tako da mi se javlja da umesto unosa sifre imam combobox sa prikazom naziva zanimanja dok se fizički u tabeli upisuje sifrazanimanja (svojstva count column i bound column). Sve to radi ali mi se javlja jedan problem kada počnem da unosim neke podatke na formi 'frmUnosOsnovnihPodatakaOCitaocu' i stignem do polja 'sifrazanimanja' onda ne mogu da ubacim novo zanimanje već mogu samo da izaberem jedno od ponuđenih zanimanja iz liste. Alternativa je da tu negde pored stavim posebno dugme (npr. Unos novih zanimanja) koje otvara tabelu 'Zanimanja' i tu da unesem to novo zanimanje a zatim da se vratim na prethodnu formu i da izaberem iz liste zanimanje koje sam uneo. Međutim, više mi se sviđa da na primer počnem da unosim par slova i ukoliko u listi već postoji zanimanje sa tom kombinacijom reči izaberem ga a ukoliko ne postoji onda nastavim da kucam naziv zanimanja i to bi trebalo da se unese u tabelu 'Zanimanja' i naravno u tabeli 'Citalac'. Pretpostavljam da treba da uradim JOIN ove dve tabele i da onda nekako to odradim..Ovo će mi trebati i kod spajanja drugih tabela pa ukoliko to rešim na ovom primeru onda bi mi kasnije lakše bilo i oko drugih spajanja..Ima li neko iskustva sa ovakvim problemom?

Evo i baze..
[ Getsbi @ 20.09.2008. 15:55 ] @
Za početak, nema potrebe da ti se forma “frmUnosOsnovnihPodatakaOCitaocu” zasniva na query-ju zato što ćeš vući podatake o zanimanjima. Tu formu možeš komotno da zasnuješ na tabeli “Citalac”, a ComboBox “sifrazanimanja”, koji se u toj formi nalazi, zasnuj na tabeli “Zanimanja”. Uvođenje nepotrebnog query-ja se smatra komplikovanjem i to je loša praksa.

Aplikativno modeliranje ima takođe neka svoja pravila. Tabela “Zanimanja” je inače nadređena tabeli “Citaoci” (pogledaj Relationships) i hierarhijski je poželjno da se prekine unos u tabelu “Citaoc” i popuni tabela “Zanimanje” preko njene forme za unos. Prvo je moraš napraviti.

Kad praviš aplikaciju, poželjno je da prvo napraviš (obezbediš) forme za unos takozvanih šifarnika ili neki ih još zovu i kodne tabele. Kod tebe su to: “RadnoMesto”, “PeriodClanarine”, “ISBN”, “Izdavac”, “Autor” i već pomenuto “Zanimanje”.

Nakon zatvaranja forme za unos zanimanja i povratka u formu “frmUnosOsnovnihPodatakaOCitaocu”, potrebno je da osvežiš Combo Box “sifrazanimanja”. To možeš da uradiš na događaj forme On Activate
(kad otvoreni obrazac dobije fokus postajući tako aktivan obrazac)

Me![sifrazanimanja].Requery

Što se tiče automatskog kucanja slova i pronalaženja postojećeg zanimanja u Combo Box-u, to je već obezbeđeno. Kad budeš imao više zapisa u tabeli “Zanimanje”, moći ćeš da isprobaš.

Napomena:
Pre slanja, fajl prvo komprimuj (Tools, Options, General, Compact on Close), a potom spakuj nekim arhiverom .zip ili .rar . Tvoj upload će biti kraći, a i naši downloadi takođe.
[ biske86 @ 20.09.2008. 21:22 ] @
Citat:
Aplikativno modeliranje ima takođe neka svoja pravila. Tabela “Zanimanja” je inače nadređena tabeli “Citaoci” (pogledaj Relationships) i hierarhijski je poželjno da se prekine unos u tabelu “Citaoc” i popuni tabela “Zanimanje” preko njene forme za unos. Prvo je moraš napraviti.

Ovo mi nije problem da napravim i prvo mi je palo na pamet ali sam hteo da napravim efikasnije rešenje.
Da li uopšte postoji način da se uradi kao što sam napisao u prethodnom postu tj. da ako postoji u listi izaberemo vrednost a ako ne onda samo nastavimo da kucamo i da se unese i u sifarniku zanimanja kao i u tabeli citalac? Ukoliko nije onda ću morati da uradim kao što kažeš na drugi način..
[ Scelle @ 20.09.2008. 21:41 ] @
Postoji opcija Limit To List koju mozes postaviti na No i time omoguciti korisniku da unosi proizvoljne vrijednosti u dato polje. Mozes je pronaci klikom na Lookup karticu odgovarajuceg atributa. Ali ovim se takvi podaci ne upisuju u izvornu tabelu, nazalost.

Vjerovatno bi se moglo nesto odraditi pomocu VBA koda, i mislim da ne bi bilo komplikovano.

Mozda na OnUpdate ili nesto slicno da se stavi kod tipa:

Ako podatak ne postoji u izvornoj tabeli
{
Upisi podatak
}


Usput, sjajan model! Svaka cast!
[ Getsbi @ 21.09.2008. 07:29 ] @
Da bi postavio Limit to List na No, mora da u osobini Bound Column bude ona kolona kojom su stvarno “Citalac” i “Zanimanje” povezani, a to je “SifraZanimanja”. Drugi uslov je da ta kolona bude vidljiva u ComboBoxu (popunjena osobina Column Widths) To znači, da ako se kolona “SifraZanimanja” i suzi na 0.01 cm opet će u polju ostajati brojevi, a ne “NazivZanimanja”, što za operatera manje prihvatljivo od logične činjenice da zanimanje prvo treba da postoji u šifarniku da bi ga on mogao upotrebiti.
Ako bi i insistirali na tehnici koju je predložio @biske86 morali bi da u polje upišemo sifru novog zanimanja, a taj broj je AutoNumber u izvornoj tabeli.
Tačno je što kaže @Scelle da se to može prevazići VBA programiranjem, recimo na događaj Before Update polja nad kojim je Combo box, ali je šteta na samom početku opteriti aplikaciju VBA programiranjem u meri koja je neprikladna za ovako dobar model.

Savet svima koji počinju sa Access-om:

Potrebom da se odmah naprave "efikasnija" rešenja, gube se osnovne stvari koje se uče na početnom i srednjem kursu Access-a. Savetujem svakom početniku u Access-u da prođe temu “Brzo učenje Access-a”, kako bi prvo ovladao osnovnim tehnikama. Potom da isčita ostale Top teme, pogotovo temu “Korisni linkovi”, gde se nalaze adrese do dobrih knjiga u elektronskom obliku. Ništa nema bez par pročitanih knjiga iz ove oblasti. Kasnije stečeno znanje koristite za odabir pravih ključnih reči i upotrebljavajte polje “Pretraga” ovog foruma. Kad nakon pretrage ne uspete da nađete adekvatno rešenje, postavite pitanje na forumu. Ozbiljnija VBA programiranja ostavite za kraj kad iscrpite sve mogućnosti drugih automatizacija.
[ biske86 @ 21.09.2008. 10:30 ] @
Mislio sam da neko već ima gotovo rešenje za ovaj tip problema i da ima volje da ostavi kod ovde na forumu..
Znam neke osnove VBE programiranja i evo ovih dana upravo učim dalje, o funkcijama i događajima. Napominjem programirao sam u Paskalu,
C++, pomalo u javi i poznajem principe programiranja. Upravo sam zamislio nešto kao:
Citat:
Scelle
Ako podatak ne postoji u izvornoj tabeli
{
Upisi podatak
}

samo još ne znam dobro sintaksu jezika..
Citat:
Getsbi
Savet svima koji počinju sa Access-om:

Potrebom da se odmah naprave "efikasnija" rešenja, gube se osnovne stvari koje se uče na početnom i srednjem kursu Access-a. Savetujem svakom početniku u Access-u da prođe temu “Brzo učenje Access-a”, kako bi prvo ovladao osnovnim tehnikama. Potom da isčita ostale Top teme, pogotovo temu “Korisni linkovi”, gde se nalaze adrese do dobrih knjiga u elektronskom obliku. Ništa nema bez par pročitanih knjiga iz ove oblasti. Kasnije stečeno znanje koristite za odabir pravih ključnih reči i upotrebljavajte polje “Pretraga” ovog foruma. Kad nakon pretrage ne uspete da nađete adekvatno rešenje, postavite pitanje na forumu. Ozbiljnija VBA programiranja ostavite za kraj kad iscrpite sve mogućnosti drugih automatizacija.

Ipak ću poslušati ovaj savet i ne komplikovati model i napraviću dugme pored ComboBoxa gde se može otići do šifarnika zanimanja i tamo je moguće uneti novo zanimanje. Ipak nemam mnogo vremena jer moram da odradim aplikaciju i odgovarajuću dokumentaciju za nekih dvadesetak dana..
Svima hvala na komentarima..
[ Scelle @ 21.09.2008. 21:26 ] @
Kad vec radis tako, sto je i po meni sasvim prihvatljivo rjesenje, moram da napomenem da Access ne osvjezava padajuce liste (ComboBox) automatski. Tako da, kada korisnik unese novo zanimanje, ono nece biti prikazano u listi nakon zatvaranja forme za unos. Da bi ovo sprijecio, potrebno je da na odgovarajuci dogadjaj (mozda na OnClick) osvjezis Combo Box tako sto ces poslati Accessu F9 komandu. Ovo mozes pomocu funkcije Send Keys, pogledaj help za detalje.

Ovo sam procitao na sjajnom sajtu www.praktikum.co.yu u odeljku za Access, gdje sam nasao i rjesenje na tvoje pitanje. Vrlo je jednostavno i efektno, koliko sam ja moga oprocijeniti. Izvolite: http://www.praktikum.co.yu/office/access/acc_100.asp
[ biske86 @ 21.09.2008. 21:50 ] @
Ne znam da li je to ono što mi treba, pogledaću sutra pa ako uspem da ubacim u svoju bazu da funkcioniše javiću..
[ biske86 @ 29.09.2008. 11:02 ] @
Napravio sam dosta izmena u bazi pa evo pogledajte i dajte predloge. Ukoliko imate neko konkretno rešenje (čitaj kod) koji provereno radi kod vas postujte na forumu. Ograničen sam sa vremenom jer moram da završim aplikaciju najkasnije za nedelju dana tako da ne mogu da dodajem neke nove funkcionalnosti ovoj bazi.
Potrebno je da uradim da pretrage rade na odgovarajućim formama i da se vrednosti automatski unose u određena polja. Forme sam napravio ali još ne rade, treba za iskodiram u VBA pa ću postovati kad budem napravio. Izveštaje još nisam napravio to ću na kraju uraditi.

Imam problem da povežem formu frmKnjiga i podformu subfrmIzdanje. Dok sam na formi frmKnjige vukao samo podatke iz tabele Knjiga sve je bilo OK. Međutim posle sam promenio pa mi vuče podatke iz upita qryKnjigaNapisao da bi unosio i autora mi se javlja problem povezivanja sa podformom. Kada hoću da otvorim formu frmKnjiga pojavi mi se prozorčić koji trazi da unesem vrednost za atribut SifraKnjige. Pretpostavljam da je to atribut u podformi subfrmIzdanje. Kada vam se ovo pojavi unesite 1 da bi se prikazala podforma. Podformu sufrmIzdanje sam dobro povezao sa subfrmPrimerakSkladisniProstor i tu je sve u redu jer imam LinkMasterFilds i LinkChildFilds ali na frmKnjiga to nemam. Pomagajte.
Evo i baze u attachmentu (kompresovane naravno).

[ Getsbi @ 29.09.2008. 12:44 ] @
Ne valja ti upit qryKnjigaNapisao na kojem zasnivaš glavnu formu frmKnjiga. Takvi upiti sa zvezdicom za pojavljivanje svih polja pogodni su za prikaze ali nisu pogodni za Record Source forme koja treba da ima LinkMasterFilds i LinkChildFilds. Navedi sva polja u qveriju poimence i promeni sve k.SifraKnjige i slično gde god ih imaš i proradiće. Kod mene radi.
[ biske86 @ 30.09.2008. 10:46 ] @
Možda nisam baš najbolje razumeo šta treba da uradim ali nešto mi i dalje ne radi. Evo i SQL-a od qryKnjigaNapisao:

Code:
SELECT k.SifraKnjige, k.Naziv, k.SifraTipa, k.SifraGrupe, n.SifraKnjige, n.SifraAutora
FROM Knjiga AS k LEFT JOIN Napisao AS n ON k.SifraKnjige=n.SifraKnjige;


Možeš li da mi tačno kažeš šta si uradio pa kod tebe radi dobro?

Imam još par pitanja. Krenimo redom:

1. Pogledajte kako sam uradio formu za unos članarine citaoca (kada odete na glavnu formu i kliknete Čitaoci, zatim na Članarina čitaoca). Napravio sam upit qryVazeciPeriodClanarine koji mi vraća period članarine koji važi za period koji obuhvata današnji datum. Postoji li način da ograničim bibliotekara da ne unosi članarinu za dva perioda koji se poklapaju. Na primer, unesem članarinu za ovu godinu ali pri kraju godine hoćemo da unesemo članarinu za narednu godinu ali bibliotekar slučajno unese u atributu DatumVazenjaOd stavimo recimo 25 decembar 2007 a prethodna članarina je važila od 1 januara 2007 do 1 januara 2008. Onda će mi upit u vremenskom intervalu od 25 decembra 2007 do 1 januara 2008 vraćati dve vrednosti što je pogrešno.

2. Pretpostavljam da može ali ne znam kako da napravim da kad otvorim neku formu da mi se otvori prazan red tj. da forma bude spremna za unos novih vrednosti.

3. Mislio sam da bi bilo bolje da imam jedan option group (kao na formi koja se dobija kada kliknemo na Čitaoci na glavnoj formi) sa dve vrednosti Muški ili Ženski gde bi se na neki način to ubacivalo u bazu umesto da korisnik unosi pol kao slovo m ili M ili Ž ili ž.
[ biske86 @ 01.10.2008. 17:55 ] @
Ima li kakvih naznaka, bilo kakve ideje?
[ Getsbi @ 01.10.2008. 18:54 ] @
Izgubio sam ovaj tvoj post iz vida, zato tek sad odgovaram. Na ostala pitanja kasnije, jer sam nešto u žurbi.
Evo to što sam prepravio u vezi glavne forme "frmKnjiga" pa uporedi sa svojim.
[ Getsbi @ 01.10.2008. 19:39 ] @
Odgovor na pitanja:

1. Ovo za periode članarine mi se ne sviđa. I sam kažeš „...članarina je važila od 1 januara 2007 do 1 januara 2008..... “ Znači dovoljno je bilo u tabeli „Clanarina“ držati kolona „Godina“ Number; Long Integer, bez tabele „PeriodClanarine“, koju bih ja izbacio da se pitam, a kolona „Iznos“ se može prebaciti u tabelu „Clanarina“. To sa preklapanjem datuma je suviše veliki zalogaj za jedan bibliotečki program, a i za tebe kao početnika u Access-u.

2. Na događaj On Open forme napiši:

Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec
End Sub

3. Mnogo jednostavnija varijanta je da od text boxa “Pol” napraviš Combo Box. U Row Source Type odabereš Value List, a u Row Source upišeš: M;Z . To je minut posla, nema VBA koda, a efikasno koliko i Option Group.
[ biske86 @ 01.10.2008. 21:05 ] @
1. Konsultovacu se sa profesorom pa cu videti sta on kaze na ovo. Problem je ako biblioteka ima clanarine za tromesecja ili za pola godine onda bi moralo da se radi na drugaciji nacin od ovog sto si predlozio. Ja sam samo naveo primer da clanarina vazi od 1.1.2007. do 1.1.2008. godine.
2. Pre nego sto si odgovorio malo sam Googlao i nasao isti ovaj odgovor. U svakom slucaju hvala..
3. Ovo resenje je sjajna stvar. Uneo sam i ogranicenje u svojstv Validation Rule tako da super radi. Hteo sam na neki nacin da ogranicim korisnika na unos odredjene vrednosti i ovo je pravo resenje..


[ Getsbi @ 01.10.2008. 21:25 ] @
Citat:
biske86: ...... Problem je ako biblioteka ima clanarine za tromesecja ili za pola godine onda bi moralo da se radi na drugaciji nacin od ovog sto si predlozio......


U tom slučaju umesto godina vodiš kvartale: 2008/1 za prvi kvartal, 2008/2 za drugi kvartal i tako redom, s tim što bi polje bilo tekstualnog tipa.
[ drzga @ 01.10.2008. 22:35 ] @
Nisam bas neki debeli poznanik accessa ali misli da ce ti ovo rijesit problem koji imas sa unosom novih zanimanja, evo potrudio sam se napravit i malu bazu da ti bude jasnije,
nadam se da je to ono sto trazis
[ drzga @ 01.10.2008. 22:47 ] @
Probao sam ovo primjenit i u tvoj bazi i radi ko svicarski sat samo sto ti jednu od linija coda moras drugacije upisat



strSQL = "Insert Into ime tbl ([ime polja]) values ('" & NewData & "')"



u mene se tabla zove "zanimanje" a i polje unutar table je "zanimanje"

a kod tebe je "zanimanje" "nazivzanimanja"
[ biske86 @ 02.10.2008. 08:01 ] @
Razmisliću o ovim predlozima pa ću javiti šta sam uradio.
[ biske86 @ 03.10.2008. 12:02 ] @
Evo prepravio sam formu za unos knjiga. Imam tu jedan mali problem. Naime, kada kliknem na dugme "Unesi poziciju" otvara mi se novi prozor i namestio sam da mi se automatski unosi SifraIzdanja. To radi lepo. To sam odradio tako što sam na događaj OnClick dodao sledeću liniju koda:
Code:
Forms!frmSkladisniProstor.SifraIzdanja = Me.SifraIzdanja

Međutim kada sam pokušao da napravim da mi se automatski unese i RedniBrojPrimerka uneo sam ispod ove linije istu liniju samo sa probenjenim poljima ali mi prijavljuje grešku. Kako da napravim da mi se unosi automatski i ovo polje?
[ drzga @ 03.10.2008. 14:31 ] @
Jesi li probao ovo sto sam ti postavio NIJE U LISTI da se rijesis onih dugmica oko combobox-ova, fazon je da ti ovaj cod upise novi podatak ali ne zatvara ti trenutnu formu, a ako hoces posaljem ti i cod da ti izbaci poruku "nn nije u listi" i ponudi ti da li zelis editirat ti kazes yes i on ti otvori formu za unos te nakon njenog zatvaranja uradi refresh
[ biske86 @ 03.10.2008. 14:51 ] @
Naravno, posalji mi, ali nemam vremena da implementiram to u model sad posto najkasnije za deset dana treba da napravim kompletan model da bih ga odbramio. Kod cu implementirati u doradjenoj verziji koju cu uraditi kad odbranim ovaj zavrsni rad..
Upravo za ovo sam pitao na pocetku teme i da sam tad imao ovaj kod implementirao bih ga, ovako posalji mi pa neka saceka novu verziju..Txnks
[ drzga @ 03.10.2008. 15:07 ] @
Postavio sam ga na tvoju formu frmUnosOsnovnihPodatakaOCitaocu na combo sifrazanimanje pod event "on not in list"
[ biske86 @ 04.10.2008. 20:06 ] @
Upravo sam pogledao ovo što si mi poslao ovaj kod i ovo je super stvar sigurno ću ugraditi ovo u kod ali sad nemam vremena. Hvala još jednom, probaću da proanaliziram kod jer ga ne razumem u potpunosti..
[ biske86 @ 09.10.2008. 10:04 ] @
Dodao sam na formi frmUnosOsnovnihPodatakaOCitaocu podformu koja prikazuje sve članarine koje je uplatio određeni čitalac.
Prepravio sam i formu za iznajmljivanje knjiga a takođe i tabelu iznajmljivanje knjiga. Nju sam podelio na dva dela tj. neke atribute iz tabele sam izneo u drugu tabelu i izmestio neka polja su u zaglavlju da ih ne bi unosili više puta ako iznajmljujemo više knjiga odjednom.
Imam nekoliko problema koje ne mogu da rešim i ukoliko neko može da mi pomogne bio bih mu zahvlan.

1. Kada na glavnoj formi kliknem na izdavanje knjige otvori mi se forma i ako želim da prepravim određeni slog (ukoliko sam umesto hari poter 2 pogrešno upisao hari poter 3) pritisnem Pretraga izdavanja... otvori mi se prozor sa poljima za pretragu. Pored svakog sam stavio malo dugme koje poništava određeno polje. To je stavljeno zbog situacije koja može da nastupi kada popunimo sva četiti polja za pretragu i predomislimo se i nećemo da pretražujemo po jednom od njih. Ukoliko pritisnemo dugme Poništi izbrisaće se sve u ova četiti polja i moraćemo da unosimo ponovo tri polja. Zato umesto da pritisnemo Poništi pritisnemo x pored polja i poništi se samo željeno polje. Problem je što ova forma ne radi pretragu kako valja.

2. Na istoj formi kada pritisnem dugme Prikaži on mi na formi prikazuje odgovarajući slog koji sam pretražio i to slog čija je sifraizdavanja iz izabranog sloga (klikom na odgovarajući slog na podformi polja sifraizdavanja i sifraiznajmljivanja se popunjavaju u polja pored dugmeta Prikaži). Probao sam da izmenim ovaj kod da mi prikazuje ne po polju sifraizdavanja već po polju sifraiznajmljivanja ali mi pravi neku grešku. Naravno polja pored dugmeta prikaži neće biti vidljiva.


Može li neko da mi pomogne da ovo proradi..
Baš mi je bitnno..
[ biske86 @ 09.10.2008. 21:54 ] @
Moze li neko da pomogne?


[ Getsbi @ 10.10.2008. 05:06 ] @
Mislim da ti dugmići pored Text Box-ova ne trebaju i da je dobar način onaj sa: ... If Not IsNull.... sa kojim si počeo. Pogledaj primer koji je ostavio Trtko pre jedno godinu ipo. http://www.elitesecurity.org/t258894-0#1561403
[ dsivic @ 21.10.2008. 15:01 ] @
Imam jedno pitanje.

Zar nije bilo bolje sastaviti tabele: Autor, Biblioteka, Radnik, Citalac u jednu tabelu i u nju dodati kolone (Da/Ne): citalac, radnik, autor,....

jer manje je formulara i tabela naravno.
[ biske86 @ 25.10.2008. 16:33 ] @
Najpre izvinjavam se što se nisam dugo javljao, puno sam radio. Evo u prilogu baze podataka. Pregledajte pa dajte komentare, bio bih zahvalan.

Citat:
dsivic: Imam jedno pitanje.

Zar nije bilo bolje sastaviti tabele: Autor, Biblioteka, Radnik, Citalac u jednu tabelu i u nju dodati kolone (Da/Ne): citalac, radnik, autor,....

jer manje je formulara i tabela naravno.



Koliko kontam, razmisljas na objektno orijentisam nacin, ali ovo je relacijska baza. Na pocetku sam i ja tako razmisljao.. Nista ne gubimo ako radnika i citaoca stavimo u razlicite tabele..Sta vise dobijamo..Zamisli da u biblioteci imam 10 000 citalaca i 10 bibliotekara. Ukoliko treba da napravim izvestaj o svim radnicima onda moram da napravim i query tj. upit sa uslovom where radnik=yes koji ce morati da prodje kroz 10 010 slogova sto bi potrajalo..
Drugo, ove dve tabele nemaju isti broj atributa tj. polja ..Sta tek reci za tabelu biblioteka koja nema ni jedno zajednicko polje sa dva pomenuta entiteta..
Ne vidim problem ako imamo vise tabela..
Uzmi neku literaturu koja govori o teoriji baza podataka i probaj da shvatis zasto se ne stavlja ovako kako si ti zamislio..Ima dosta literature na tu temu i na srpskom jeziku..Sta vise probaj da napravis neku tabelu po ovoj zamisli i isprobaj kako to funkcionise..
Pored toga bi trebalo da imas problema sa definisanjem kljuceva a javljala bi ti se redundansa ukoliko bi napravio jednu veliku tabelu ili vise velikih tabela..U svakom slucaju predlazem da otvoris novu temu i da se tu ukljuce ostali clanovi koji su kompetentni da diskutuju o ovoj temi..
[ biske86 @ 26.10.2008. 19:08 ] @
Može li neko da mi pomogne da napravim upit za deset najaktivnijih čitaoca. Probao sam ali nešto ne ide. Upit bi sadržao ime, prezime i broj iznajmljivanje čitaoca. Najaktivniji je čitalac koji ima najviše redova u tabeli "IznajmljeneKnjige". Da ne postujem sliku, imate relacije i tabele u bazi koju sam uploadovao u postu iznad.
[ dsivic @ 26.10.2008. 19:22 ] @
Code:

SELECT 
Citalac.RedniBrojCitaoca, 
Citalac.Ime, Citalac.Prezime, 
Count(IznajmljeneKnjige.SifraIznajmljivanja) AS CountOfSifraIznajmljivanja
FROM 
Citalac 
INNER JOIN (IzdavanjeKnjige INNER JOIN IznajmljeneKnjige ON IzdavanjeKnjige.SifraIzdavanja = IznajmljeneKnjige.SifraIzdavanja) 
ON Citalac.RedniBrojCitaoca = IzdavanjeKnjige.RedniBrojCitaoca
GROUP BY Citalac.RedniBrojCitaoca, Citalac.Ime, Citalac.Prezime
ORDER BY Count(IznajmljeneKnjige.SifraIznajmljivanja) DESC;



Jedino sto ne znam u accessu ima li nekakav nacin limitiranja

[Ovu poruku je menjao dsivic dana 27.10.2008. u 10:48 GMT+1]
[ Getsbi @ 27.10.2008. 04:55 ] @
Citat:
dsivic:Jedino sto me znam u accessu ima li nekakav nacin limitiranja


Ima. Koristi klauzule TOP n i TOP n PERCENT.
[ biske86 @ 27.10.2008. 15:22 ] @
Citat:
Getsbi: Ima. Koristi klauzule TOP n i TOP n PERCENT.


Pretpostavljam da je potrebno da stavim naredbu TOP 3 iza SELECT naredbe. Kada tako uradim opet mi daje isti broj čitaoca..Gde grešim?
[ dsivic @ 27.10.2008. 16:38 ] @
Code:

SELECT 
top 2 
Citalac.RedniBrojCitaoca, 
Citalac.Ime, 
Citalac.Prezime, 
Count(IznajmljeneKnjige.SifraIznajmljivanja) AS CountOfSifraIznajmljivanja
FROM 
(Citalac INNER JOIN IzdavanjeKnjige ON Citalac.RedniBrojCitaoca = IzdavanjeKnjige.RedniBrojCitaoca) 
INNER JOIN IznajmljeneKnjige ON IzdavanjeKnjige.SifraIzdavanja = IznajmljeneKnjige.SifraIzdavanja
GROUP BY Citalac.RedniBrojCitaoca, Citalac.Ime, Citalac.Prezime
ORDER BY Count(IznajmljeneKnjige.SifraIznajmljivanja) DESC;


Kod mene ovako radi.
[ Zidar @ 27.10.2008. 20:24 ] @
Prvo prebrojis ko je koliko knjiga uzeo, poredjas po velicini od veceg ka manjem i uzmes prvih 10 po tom redosledu
Code:

SELECT   TOP 10 izdavanjeknjige.rednibrojcitaoca, 
                COUNT(iznajmljeneknjige.sifraiznajmljivanja)  AS countofsifraiznajmljivanja 
FROM     izdavanjeknjige 
         INNER JOIN iznajmljeneknjige 
           ON izdavanjeknjige.sifraizdavanja = iznajmljeneknjige.sifraizdavanja 
GROUP BY izdavanjeknjige.rednibrojcitaoca 
ORDER BY COUNT(iznajmljeneknjige.sifraiznajmljivanja) DESC; 

Odavde sad mozes da ides dalje i da dodas ime, prezime i slicno. dsivic ti je dao lep kveri.
Unesi malo vise podataka, bice lakse da se probaju stvari.

Ovde ima jedna zanimljiva primedba: sta ako imas vise ljudi koji zadovoljavaju kriterijum. Neka trazimo TOP 5, da se lakse pise:

Ime BrojKnjiga
Pera 20
Laza 20
Mika 15
Steva 17
Zorica 17
Milica 17

Pera i Laza su uzeli po 20 knjiga, Mika 15. To je 3 citaoca. Treba nam jos 2. E kako sad da odaberemo kad Steva, Zorica i Milica svi imaju po 17 knjiga?
Problem nije u kveriju, problem je u pitanju. Ovakva pitanja moraju da se definisu bolje. Kad ti neko trazi ovako nesto, postavi mu kontra pitanje. I bices miran sledece dve nedelje :-)

Ali, ako ti kaze na primer: Pokazi prvih deset, pa ako deseta pozicija ima konkurente sa istim brojem uzetih knjiga, prikazi i njih, onda se kveri komplikuje, posebno u Accessu :-)

A mogu da kazu: daj mi 10 najvecih prebrojavanja i pokazi sve ljude koji su uzeli toliko knjiga. Onda bi spisak koji sam dao bio duzi, jer imamo samo vrednosti 20,15,17.

Eto ti materijala za vezbanje i mozganje :-)
[ biske86 @ 30.10.2008. 11:25 ] @
Imam nekoliko problema, pa molim iskusnije korisnike da pomognu ako mogu. Evo i pitanja:

1. Kako da napravim da mi dugme izaberi knjigu bude nedostupno ukoliko se datum izdavanja (iz tabele "IznajmljeneKnjige" ne poklapa sa trenutnim datumom? Ovo se nalazi na formi frmIznajmljivanjeKnjige.

2. Šta treba da stavim na događaj OnCurrent da bi omogućio enable/disable dugmeta "Unesi oštećenja"?
Ovo se nalazi na formi frmIznajmljivanjeKnjige.

3. Mogu li preko DAO recordset da proverim da li je za određeni primerak uneta pozicija knjige. Na primer da unesem kod za dugme "unesi poziciju" na formi frmKnjiga, da stavim if naredbu koja ispituje da li u tabeli "skladisniprostor" postoji slog koji u poljima "sifraizdanja" i "rednibrojprimerka" ima vrednosti kao primerak koji smo uneli na formi frmKnjiga. Ukoliko u tabeli "skladisniprostor" postoji takav slog onda bi obezbedio poruku da knjiga već ima unetu poziciju, u suprotnom bi otvorio formu frmSkladisniProstor.

4. Na formi frmIzvestaji imam jedno skriveno polje cboMesec i ono postaje vidljivo kada izaberemo "Izveštaj o prihodima od članarina", zatim "Mesečni prihodi". Kako da napravim ovaj kombo box da biram ili upisujem vrednosti januar, februar, mart,... a da u imam i drugo polje 1,2,3,...? Onda bi mogao da u parametarskom upitu stavim uslov:
WHERE month(clanarina.datumuplate)=[forms]![frmIzvestaji]![cboMesec]

Pretpostavljam da ima ljudi koji ovo zna da uradi, ja ću onda proanalizirati ovaj primer i probati da primenim u drugim delovima aplikacije gde mi je potrebno.
[ Zidar @ 30.10.2008. 16:03 ] @
Ako ti je ovo skolski zadatak ili diplomski rad, dovoljno je dobar ovakav kakav je. Nema potrebe da dalje komplikujes.

Ako je profesionalni rad, onda aplikacija nije bas najbolje zamisljena. Pomoglo bi ako bi dao kartu procesa da bi dosao do bolje slike o tome sta to program treba da radi u odredjenim situacijama. Iz toga mozes da vidis da li si dobro zamislio aplikaciju.

Na primer, za ong ko radi u biblioteci moze biti potrebno sledece:
- unos novokupljenih knjiga u bazu
- zavodjenje u bazu podataka da je korisnik prilikom jedne posete uzoe N knjiga
- prijem knjiga kad se vrate (tu bi dosla provera ostevecenja?)
- pregled istorije korisnika
- pronalazenje onih koji su zakasnili sa vracanjem
- naplata kazne
- pronalazenje onih koji duguju nocvac jer nisu platili kaznu (knjigu su mozda vratili a mozda i nisu)

A za clana biblioteke, moze biti potrebno sledece::
- pretrazivanje naslova koje biblioteka ima
- rezervisanje zeljenih naslova
- pregled liste cekanja, gde je stigla knjiga koju sam narucio, ali je trenutno kod nekog drugog
- pregeld stanja - sta imam i kada treba to da vratim, imam li neplacenih kazni

Sve ovo mzoe tvoja baza da podrzi. A aplikacija ili aplikacije? E to je druga prica. Treba ti plan ali i neka ideja kako se grade Access aplikacije

Ne valja samo da sedns i da iskucas forme i dugmice na osnovu ideje koju imas u glavi. Projektovanje baze je jedna stavr, a projektovanje aplikacije ili sistema je nesto drugo. Jedno se na drugo naslanja, ali nije isto. Cele tema se bavila bazom podataka i to si odlicno obavio. Programiranje je malo razlicito od toga, pogotovo u Accessu. Mozda nova tema, cisto da bude lakse da se prati?

:-)
[ biske86 @ 31.10.2008. 16:21 ] @
Ovo je završni rad za sticanje bachelor diplome, nije profesionalni rad. Ovo su neke od poslednjih izmena koje planiram da uradim na modelu pre nego što branim završni rad. Super bi bilo ako bi mi neko od vas pomogao ovo da napravim jer sam na primer viđao da je moguće izvršiti SQL upit iz VBA. Ono što mene muči je dobro poznati princip kako naci pravu informaciju u moru svakojakih, za ovo rešenje nebitnih stvari. Drugačije rečeno nemam vremena da pročitam dvesta stranica u knjizi koje pišu o ovome jer sam deficitaran sa vremenom. Ukoliko mi neko pomogne da rešim ovo ja bih proanalizirao tu stvar i za kraće vreme bi skontao i onda bih primenio u ostalim delovima aplikacije gde mi je potrebno.

@Zidar
Verovatno si u pravu kada kažeš da nisam dobro osmislio aplikaciju, ali ja sam položio predmet baze podataka kao i predmet informacioni sistemi. Ne znam da li ima literature koja detaljnije objašnjava postupke koji se moraju poštovati pri pravljenju aplikacije. Ovo pravljenje baze (i aplikacije) je za mene prvo i ujedno ogromno iskustvo jer ranije nisam radio neku konkretnu stvar već je to bila samo teorija. Međutim sad sam uvideo zašto ljudi kažu da su teorija i praksa dve različite stvari.

Očekujem vašu pomoć oko gore navedenih problema. Unapred hvala.
[ Zidar @ 31.10.2008. 18:07 ] @
Uradio si odlican posao sto se tice anlize i modela baze podataka. Za nivo diplomskog rada, aplikacija je absolutno bez greske. Tvoja poslednja pitanja se odnose na finese programiranja u Accessu, sto verovatno nije bila tema rada. Zato kazem da ne diras vise, rad je odlican. Nece ti niko zameriti ako nisi dugme ucinio nevidljivim. To je nebitno u celoj slici. Kako s eizvrsava SQL upit iz Accessa, to je vec ozbiljnija stvar i lepo je znati. iako, opet ponavlajm, to je usko vezano za Access, u drugim programskim okruzenjima to moze i drugacije.

Moze ovako:

sub Dugme_OnClick()

Dim strSQL AS String
Dim db as DAO.database

strSQL = "SELECT Naslov FROM Knjige WHERE ID = 315"

set db = currentdb

db.Exceute strsql

set db = nothing

end sub

Verujem da si vec uocio postupak:
1) definises neki SQL izraz (moze i UPDATE/DELETE/INSERT)
2) otvoris konekciju na bazu iz programa (set db=currentdb)
3) posaljes strSQL na izvrsavanje

U praksi, stos je da se sagradi strSQL. strSQL se obicno gradi na osnovu necega sto pokupis sa forme. To nije uvek najlakse, ali steci ces iskustvo vremenom.
Moras na primer da vodis racuna kad gradis WHERE za kolone koje su text tipa. WHERE Oznaka = 'ABC205' niej isto sto i WHERE OZnaka = ABC205 nedostaju znakovi navoda u drugom slucaju i kveri nece proci.

Nemam vremena vise sada. Pledaj u TOP tememe korisne linkove, naci ces nesto sto nije knjiga od 500 strana. Imas tamo i 'tehnike programiranaj' gde je lepo objasnjeno kako se na primer radi sa rekordsetima.

Srecno
[ biske86 @ 31.10.2008. 20:09 ] @
Hvala za jednostavan odgovor.
Provalio sam resenje za pitanje pod 4. tako da sam uspeo da napravim upit qryMesecneClanarine.
Probacu da resim ostala pitanja pa javljam uskoro sta sam uradio.
[ Zidar @ 03.11.2008. 14:43 ] @
Citat:
1. Kako da napravim da mi dugme izaberi knjigu bude nedostupno ukoliko se datum izdavanja (iz tabele "IznajmljeneKnjige" ne poklapa sa trenutnim datumom? Ovo se nalazi na formi frmIznajmljivanjeKnjige.

Na formin OnCurrent stavis nesto kao:

IF me!datumIzdavanja = date() then
me!DugmeIZaberiKnjigu.enabled = FALSE
ELSE
me!DugmeIZaberiKnjigu.enabled = TRUE
END IF

Ovo moze i u ejdnom redu da se napise, ali je ovako ajsnije sta se desava, a Accesu je ionako svejedno

Citat:

2. Šta treba da stavim na događaj OnCurrent da bi omogućio enable/disable dugmeta "Unesi oštećenja"?
Ovo se nalazi na formi frmIznajmljivanjeKnjige.

Ti sam znas koji je uslov za pojavljivanje dugmeta. Ostalo je kao u prethodniom pitanju

Citat:

3. Mogu li preko DAO recordset da proverim da li je za određeni primerak uneta pozicija knjige. Na primer da unesem kod za dugme "unesi poziciju" na formi frmKnjiga, da stavim if naredbu koja ispituje da li u tabeli "skladisniprostor" postoji slog koji u poljima "sifraizdanja" i "rednibrojprimerka" ima vrednosti kao primerak koji smo uneli na formi frmKnjiga. Ukoliko u tabeli "skladisniprostor" postoji takav slog onda bi obezbedio poruku da knjiga već ima unetu poziciju, u suprotnom bi otvorio formu frmSkladisniProstor.

Naravno da moze ali ne mora i ne treba to da se radi. Slucaju biblioteke, verovatno se ne bi osetila razlika, ali generalno razlika postoji, i to znacajna. O cemu se radi? Ti zelis da postignes ovo:
1. korisnik unese podatak
2. na BeforeUpdate za formu otvoris rekordset za "SELECT <nesto> FROM <tvoja tabela> WHERE <primary key> = <ono sto si uneso>"
3. Ako dobijes za recordset rs.count = 0 onda znaci da to sto si uneo u formu ne psotoji u tabeli
4. ako dobije sda rs.RecordCount <>0 onda znaci da podatak vec postoji u tabeli i onda treb da uradis Cancel = TRUE
Cancel je parametar za sub Form_BeforeUpdate i kad ga postavis na TRUE Access nece dozvoliti da se podatak posalje u tabelu.
5. ne zaboravi da zatvoris rekordset na kraju

Zasto ovo nije dovoljno dobro? Otvaranje rekorseta je skupa operacija, pogotovo na mrezi. AKo je verovatnoca da ce korisnik ukucati duplikat mala, onda nepotrebno proveravas svaki put i maltretiras i Access i mrezu. Sat te briga za Access i mrezu, mozes da kazes. jeste, ali to usporava rad. Uz to, mnogo ljudi zaborave da zatvore rekordset tako da konekcija ostaje otvorena i akd izadjes iz procedure. Pa za sledeci unos opet nova konekcija. U jednom momentu se Access zagusi. Za biblioteku ovo verovatno nije bitno, unos nije masovan i ti si pedantan decko tako da neces ostaviti otvoren rekordset. Medjutim, zamisli 10 kasa u samousluzi koje unos vrse skeniranjem. Tu se lako postizu brzine od 2-3 unosa po sekundi po masini, tako da se moze desiti d au jednom moment imas i 30 unosa u sekundi. E, sad Acces treba da otvori 30 konekciaj u sekundi i da ih zatvori. Tu se aplikacija zaglavi.

Sta da se radi? Da se ne proverava uopte dupliakt. Ako si lepo projektovao bazu, a jesi, onda imas PK na tabeli. PK znaci da tabela nece primiti duplikat, ma kako ga gurao kroz aplikaciju. Korisnik ce dobiti poruku na engleskom ili vec koji je jezik na inzstalaciji bio 'pokusavas d auneses duplikat u tabelu, to ne moze....' Ako poruka na tvom jeziku, posao je gotov, nsita ne moras da radis. na obuci im samo kazes 'ako pokusate da unesete duplikat, dobicete ovakvu poruku....' Ako dobijas poruku na jeziku koji korisnik en razume, ili ti se ne dopada poruka, onda poruku promenis. Kako? Za formu iams Form_Error event, U helpu za verzije Accessa do 2003 imas perfektan primer, koji upravo taj slucaj obradjuje - izmena poruke o duplikatu. Zasto Form_Error ebvent, a ne On Erro u recimo Form_BeforeUpdate. Zato sto pokusaj unosa duplikata u tabelu kroz formu nije run-time error, pa ga errro kod na formi nece ni huvatiti. To je vsie kao neka sistemsak greska, na visem nivou od forme, an nivou baze podataka. E neko je bio pametan dovoljno u timi a Access da nam omoguci hvatanje tih gresaka.

Iam i kombinovana situacija. nekad ti treba da znas gde je 'prva kopija' kad ti s pojavi duplikat na unosu. Sta onda radis? Na form_Error eventu uhvatis ovu gresku. Ako si uhvatio gresku, onda u tom istom form_error odradis pretrazivanje, kako smo gore opisali. ili pretrazivanje radis u nekoj funkciji koju pozoves iz Form_error, pa ti funkcija vrati vise popdataka, ne samo 'ovo je duplikat' nego 'ovaj podatak unesen je dana tog i tog u toliko i toliko sati na masini ...'

Komplikovano? Naravno d ajeste. Nisam uzalud upotrebio rec 'finese programiranaj u Accessu' Imas o ovome u Bazi znanja. Potrazi na forumu teme koje se bave Access greskama, nesto ce se pojaviti vec.



[ biske86 @ 03.11.2008. 15:40 ] @
Pretekao si me u pisanju odgovora, zamalo :)
Već sam rešio ove probleme.

Evo mog odgovora.

Hvala još jednom na pomoći, uspeo sam da odradim ono što mi je trebalo pomoću recordset. To mi je trebalo za dugme "Unesi poziciju" na formi frmKnjiga da proverim da li je već uneta pozicija za primerak koji sam označio na formi. To dobro radi. Stavio sam kod na događaj OnClick. Sličnu sam stvar uradio i sa dugmetom "Unesi oštećenje".
Uneo sam određena ograničenja tako da se ne može desiti da na primer radnik hoće da iznajmi knjigu i unese podatke "radnik koji je izdao" i "čitalac" a da ne unese knjigu. Ili na primer ukoliko čitalac dođe da sa zahtevom da iznajmi knjigu dana 27.10.2008. knjigu ne možemo uneti u slogu na kome je datum na primer 26.10.2008. Ovakva situacija se može desiti na primer ukoliko je čitalac Nikola Nikolić poslednji iznajmio knjigu dana 26.10.2008. a dan nakon toga je prvi, ujuto, došao da iznajmi knjigu. Pošto sam stavio da se pri otvaranju ove forme automatski pozicioniramo na poslednji slog (docmd.gotorecord,,acLast na događaj forme OnOpen) i da nema ovog ograničenja bibliotekar bi mogao slučajno, ne gledajući polje "datumizdavanja" da izda čitaocu knjigu na taj datum što je pogrešno. Tu su još neka ograničenja koje sam stavljao na dugmićima za navigaciju, ali evo pogledajte bazu u prilogu..

Pojavila su mi se dva problema koja ne mogu da rešim. Evo o čemu se radi:

1. Potrebno je da ograničim čitaoca koji je uzeo tri knjige i hoće da iznajmi još knjiga, da ne može više da pozajmljuje knjige dok ne vrati tri knjige koje je uzeo. Kada bibliotekar na formi frmIznajmljivanjeKnjige klikne na "Pretraga izdavanja..." i u prozoru koji se pojavi izabere čitaoca i klikne na dugme "Prikaži" potrebno je ne da se unese čitalac već da se prikaže poruka da je on iznajmio već tri knjige. Ovde mi je potrebno da upotrebim Recordset čiji je parametar upit "qryBrojIznajmljivanjaCitaoca" da bi video koliko nevraćenih knjiga čitalac ima. Da Recordset kupi podatke sa forme to ne bi bio problem, to znam da uradim, već imam ovakav primer u aplikaciji. Međutim ne mogu da dobijem informaciju o broju nevraćenih knjiga za određenog čitaoca sa forme frmIznajmljivanjeKnjige zato što treba da spojim tabele IzdavanjeKnjige i IznajmljeneKnjige. Može li neko da mi napiše primer kako da Recordset bude iz upita? Na nekom primeru, pa ću ja primeniti na moju situaciju.
2. Još jedan problem koji mi se javlja na formi frmNapisao. Naime, probam da unesem autora i ukoliko ga nema na listi hoću da kliknem na dugme "Novi autor" javlja mi grešku. Ukoliko sam počeo unos nekog imena koje nije u listi javlja mi grešku da vrednost koju unosim nije u listi. Ukoliko izbrišem vrednost i ponovo probam da kliknem na dugme "Novi autor" ponovo mi javlja grešku, ovoga puta da polje ne može da sadrži Null vrednost (pošto je ovo primarni ključ). Ima li načina da se prevari Access i da odem na formu gde unesem novog autora koga nema u listi i onda se vratim i naravno unesem ga u kombo boxu na formi frmNapisao?


Probaću naravno i sam ukoliko budem naleteo na neki trag kako se ovo radi ali ukoliko neko već zna neka pomogne..
Pozz


[Ovu poruku je menjao biske86 dana 04.11.2008. u 10:33 GMT+1]
[ Zidar @ 03.11.2008. 18:21 ] @
Ti bas resio da dobijes 10+
Neka, i treba.

Za prvo pitanje
Citat:
1. Potrebno je da ograničim čitaoca koji je uzeo tri knjige i hoće da iznajmi još knjiga, da ne može više da pozajmljuje knjige dok ne vrati tri knjige koje je uzeo. Kada bibliotekar na formi frmIznajmljivanjeKnjige klikne na "Pretraga izdavanja..." i u prozoru koji se pojavi izabere čitaoca i klikne na dugme "Prikaži" potrebno je ne da se unese čitalac već da se prikaže poruka da je on iznajmio već tri knjige. Ovde mi je potrebno da upotrebim Recordset čiji je parametar upit "qryBrojIznajmljivanjaCitaoca" da bi video koliko nevraćenih knjiga čitalac ima. Da Recordset kupi podatke sa forme to ne bi bio problem, to znam da uradim, već imam ovakav primer u aplikaciji. Međutim ne mogu da dobijem informaciju o broju nevraćenih knjiga za određenog čitaoca sa forme frmIznajmljivanjeKnjige zato što treba da spojim tabele IzdavanjeKnjige i IznajmljeneKnjige. Može li neko da mi napiše primer kako da Recordset bude iz upita? Na nekom primeru, pa ću ja primeniti na moju situaciju.

Ti hoces da sprecis da bilo ko iu jednom momentu drzi vise od tri knjige. Zahtev nije fer ali je SQL problem interesantan, pa evo:
Od tvog kverija qryBrojIznajmljivanjaCitaoca napravio sam ovo, recimo da ga zovemo qryBrojNevracenihKnjiga
Code:

SELECT i.rednibrojcitaoca, Count(i.SifraIzdavanja) AS CountOfSifraIzdavanja
FROM IzdavanjeKnjige AS i 
INNER JOIN IznajmljeneKnjige AS iz 
ON i.SifraIzdavanja = iz.SifraIzdavanja
WHERE (((iz.datumvracanja) Is Null))
GROUP BY i.rednibrojcitaoca;


Ne beforeUpdate na formi za izdavanje knjiga treba staviti

IF nz(dlookup('CountOfSifraIzdavanja','qryBrojNevracenihKnjiga','rednibrojcitaoca = " & cstr(me.rednibrojcitaoca)),0) > 3 then
cancel = true
msgbox "Ovaj citalac vec ima tri knjige koje nije vratio! Ne moze se izdati vise od 3 knjige!"
END IF

Ovo je pocetnicko i amatersko resenje. Zasto? Zato sto je ogranicenje za broj knjiga kodirano u programu. Sta ce biti ako dodje novi direktor i kaze 'Novo ogranicenje je 5 knjiga'. Da ne bi menjao kod kad god se promeni neko poslovno pravilo, mozes da imas jednu tabelu gde cuvas recimo MaxBrojUzetihKnjiga i da citas odatle (ponovo imas Dlookup....). recimo, nazoves tabelu tblLocalDefaults i tamo imas kolone "ImeBiblioteke","MaxBrojUzetihKnjiga ","MaxDuzinaZadrzavanjaKnjigeKodCitaoca" i slicne stvari. Tako rade profesionalci.

Jos nesto, kveri qryBrojIznajmljivanjaCitaoca ima parametar koji se uzima sa forme. Zbog toga je kveri potpuno beskorisan za bilo sta drugo osim da sluzi toj formi. Paremetre na kveriju izbegavaj, sve se to isto moze postici na bezbroj drugih nacina. Ovako upotrebljeni parametri su amaterska stvar, ti si iznasd tog nivoa.

Ono drugo, bilo je na forumu mnogo puta, a verovatno ekipa Getsbi/Trtko/domaci_a_nas/ZXZ ima gotov kod koji to odradjuje. ja to nikad ne koristim, pa me mrzi da sad iz glave pisem nesto da te zbunim. Msilim da postoji NotInlist even za combo box, pa odatle verovatno otvaras pop-up formicu gde dodas novi podatak u parent tabelu itd, itd. Opasna praksa, jer se lako gresi u brzini. sta covek radic - procesira novu knjigu, ili unosi novog autora u registar autora. Ivo ANdric ce ocas posla posatti Ivica Andric i naravno taj Ivica ce napisati Na Drini cupriju.....


[ biske86 @ 04.11.2008. 00:26 ] @
Provalio sam nekako ovo sa brojem iznajmljivanja i to preko DAO Recordset. Postovacu sutra ujutu resenje, posto sad pisem sa telefona.
Sto se tice ovog problema sa unosom autora, u nekom prethodnih postova mi je neko predlozio da probam sa onim kodom &#39;nije u listi&#39; koji dodaje vrednost ukoliko nije u listi, ali kao sto i sam kazes (a i profesor mi je to rekao) da se mogu desiti nezeljene stvari da je na primer Iva Andric napisao Na Drini cuprija. Ima li neko ideju kako da ovo resim?
[ Trtko @ 04.11.2008. 07:21 ] @
1. Baza ti raste, pa sam stavio na on cloce da naprvi compact
2. On Not in List na eventu komboboksa postavio kod koji ti javlja poruku da ne postoji autor,
pogledaj , a možeš i tu staviti da ti otvori formu za unos novog autora.
3. Maknuo sam ti iz Control source sifruautora, jel je direktno vezan za tablicu a ona ne dozvoljava da je NULL unos, zato ti je i javljalo onu drugu gresku


eto toliko

Pozdrav
[ Zidar @ 04.11.2008. 13:37 ] @
Biske, pazi da te sad sve ovo o programiranju ne zbuni debelo. Nema sanse da kroz jedan rad naucis kako se razvijaju apliakcije u Accessu. namerno ne koristim rec 'programiranje' nego 'razvoj aplikacija'. Ovo sto ti se sad desava jke isto kao ucenje matematike po zdacima. Kao da ti ti niko ne predaje osnove nekakve matematicke teorije, nego te bombarduju zadacima i ucis da resavas jedan po jedan. To ti se sada desava. Ides od problema do problema i mi ti kao pomognemo da resis pojedinacne probleme. Medjutim, to te nece dovesti do 'znanja'.

Ako mislis da se bavis Accesom, pronadji kako znas i umes knjigu 'Essential Access 95', autor Alen Browne i Alison Balter. Ako ne to, onda bilo koja knjiga od Alison Balter. Alen je bolji majstor, ali je napisao jednu jedinu knjigu koju je nazalost tesko naci, ali koaj tuce sve ostale knjige napisane o Accesu. Alen Browne ima odlican web sajt koji je 100% posvecen Accesu. Alison je napisala po knjigu za svaku verziju Accesa, pocev od 97 pa naovamo. Sve su slicne, jer su verzije Accesa bile slicne. Napisala je i jednu o verziji 2007. Ostali autori vredni paznje su Ken Getz, Paul Litwin, Greg Reddick, Stan Lezsinski, Roger Jennings, Scot Barker. Autor koga treba izbegavati je Carry Prague (nazalost jedini koji je preveden na srpski, jer se setio da knjigu nazove Access Bible). U knjizi Access Bible nema nista pogresno ali je starsno nekompletna, nema nista osim 'bare minimum'. Moze da se iskoristi u nuzdi, ali treba teziti necem boljem.

[ biske86 @ 05.11.2008. 11:07 ] @
Citat:
Zidar
Ovo je pocetnicko i amatersko resenje. Zasto? Zato sto je ogranicenje za broj knjiga kodirano u programu. Sta ce biti ako dodje novi direktor i kaze 'Novo ogranicenje je 5 knjiga'. Da ne bi menjao kod kad god se promeni neko poslovno pravilo, mozes da imas jednu tabelu gde cuvas recimo MaxBrojUzetihKnjiga i da citas odatle (ponovo imas Dlookup....). recimo, nazoves tabelu tblLocalDefaults i tamo imas kolone "ImeBiblioteke","MaxBrojUzetihKnjiga ","MaxDuzinaZadrzavanjaKnjigeKodCitaoca" i slicne stvari. Tako rade profesionalci.

Već imam tu tabelu i ona se zove "Biblioteka". Ima atribute "Naziv", "BrojTelefona", "Adresa" i "MaksimalniBrojUzetihKnjiga".
Citat:
Zidar
Jos nesto, kveri qryBrojIznajmljivanjaCitaoca ima parametar koji se uzima sa forme. Zbog toga je kveri potpuno beskorisan za bilo sta drugo osim da sluzi toj formi. Paremetre na kveriju izbegavaj, sve se to isto moze postici na bezbroj drugih nacina. Ovako upotrebljeni parametri su amaterska stvar, ti si iznasd tog nivoa.

Uzeo sam parametar sa forme da bi bi za tačno određenog čitaoca (čiji redni broj kupim sa forme) prebrojao koliko knjiga nije vratio. Nisam razmišljao za druge načine, ovako mi je najlakše neka ostane kako jeste, pošto radi, a sad nemam vremena da tražim alternativne načine.
Citat:
Trtko
3. Maknuo sam ti iz Control source sifruautora, jel je direktno vezan za tablicu a ona ne dozvoljava da je NULL unos, zato ti je i javljalo onu drugu gresku

Nije mi jasno nešto ovde. Ukoliko sklonimo iz Control Source sifraautora gde će zapisivati šifru autora. Kako kažemo bazi da treba da zapiše u neko polje!?
Citat:
Zidar
Biske, pazi da te sad sve ovo o programiranju ne zbuni debelo. Nema sanse da kroz jedan rad naucis kako se razvijaju apliakcije u Accessu. namerno ne koristim rec 'programiranje' nego 'razvoj aplikacija'. Ovo sto ti se sad desava jke isto kao ucenje matematike po zdacima. Kao da ti ti niko ne predaje osnove nekakve matematicke teorije, nego te bombarduju zadacima i ucis da resavas jedan po jedan. To ti se sada desava. Ides od problema do problema i mi ti kao pomognemo da resis pojedinacne probleme. Medjutim, to te nece dovesti do 'znanja'.

Naravno da neću da uzletim visoko, zato što sam ja po prirodi perfekcionista i nikad u potpunosti zadovoljan svojim radom zato što mislim da uvek može bolje. Ova aplikacija je daleko od dobre ali nije loša za završni rad.
Citat:
Ovo sto ti se sad desava jke isto kao ucenje matematike po zdacima. Kao da ti ti niko ne predaje osnove nekakve matematicke teorije, nego te bombarduju zadacima i ucis da resavas jedan po jedan. To ti se sada desava. Ides od problema do problema i mi ti kao pomognemo da resis pojedinacne probleme. Medjutim, to te nece dovesti do 'znanja'.

Ako mislis da se bavis Accesom, pronadji kako znas i umes knjigu 'Essential Access 95', autor Alen Browne i Alison Balter. Ako ne to, onda bilo koja knjiga od Alison Balter. Alen je bolji majstor, ali je napisao jednu jedinu knjigu koju je nazalost tesko naci, ali koaj tuce sve ostale knjige napisane o Accesu. Alen Browne ima odlican web sajt koji je 100% posvecen Accesu. Alison je napisala po knjigu za svaku verziju Accesa, pocev od 97 pa naovamo. Sve su slicne, jer su verzije Accesa bile slicne. Napisala je i jednu o verziji 2007. Ostali autori vredni paznje su Ken Getz, Paul Litwin, Greg Reddick, Stan Lezsinski, Roger Jennings, Scot Barker. Autor koga treba izbegavati je Carry Prague (nazalost jedini koji je preveden na srpski, jer se setio da knjigu nazove Access Bible). U knjizi Access Bible nema nista pogresno ali je starsno nekompletna, nema nista osim 'bare minimum'. Moze da se iskoristi u nuzdi, ali treba teziti necem boljem.

Nisam baš teorijski nepotkovan, zato što skupljanja znanja sa foruma tj. vaša iskustva a koristim maksimalno i našeg prijatelja Google. Pored toga imam knjigu od Alison Balter "Microsoft Office Access 2003 bez tajni" u izdanju Kompjuter biblioteke iz Čačka. Ima 1418 stranica i piše na njoj da je za srednji i napredni kurs. Dosta sam je odradio ali nisam baš zalazio u napredne tehnike kao što su tehnologija ActiveX, optimimizovanje aplikacije, višekorisničke aplikacije, eksploatacija Windows API-ja, pravljenje biblioteka, napredne tehnike bezbednosti itd..
To mi ne treba trenutno a i nemam vremena.
Citat:
Zidar
Ako mislis da se bavis Accesom..

Ne znam tačno čime ću se baviti pošto još studiram, a i generalno više mi se sviđa C++ nego Access. Imam osećaj da su mi za neke stvari u Accessu vezane ruke (Ili je to do mog nedovoljnog poznavanja VBA) mada mi u poslednje vreme bolje ide pošto sam pohvatao neke stvari. Došao sam do nekog nivoa, gde imam osećaj da mi tek sad neke stvari postaju jasnije i gde sa malo truda i isčitavanja knjige od Alison mogu doći do pravog rezultata. Mada ne znam da li vredi ulagati trud za neko napredno znanje Access-a pošto se profesionalne/veće aplikacije ne rade u Access-u. U ovom semestru imam predmet Baze podataka 2 gde učimo Oracle 10g istaliranog na RHEL4 tako da jedva čekam da završim ovo i da pređem na Oracle.

[ Zidar @ 05.11.2008. 16:07 ] @
Situacija je bolja nego sto sam mislio
Uzivaj i uci sta ti se dopada, radi i ne sekiraj se.

Sve najbolje na ispitu i ubuduce u zivotu i radu
[ biske86 @ 16.11.2008. 14:17 ] @
Probao sam da ograničim bibliotekara da mora da unese ime i prezime u polje Bibliotekar primio na subfrmIznajmljeneKnjige. Najpre kada izdam nekom čitaocu knjigu i hoću da ga onda razdužim tj. kada on dođe da vrati knjigu samo odem do sloga na podformi i kliknem na dugme "Vrati knjigu" i automatski se unosi tekući datum i prebacuje se kontrola na polje "radnikprimio". Sve je to u redu ali kada pritisnem strelicu na gore ili dole onda aplikacija dozvoljava da se ode na prethodno polje ili na slog ispod. Probao sam da unesem na događaj onexit polja "radnikprimio" kod da bi izdao poruku i da me vrati na polje tako da ne mogu da izdađem odavde dok ne unesem ovo polje. Evo koda:

Code:

Private Sub RadnikPrimio_Exit(Cancel As Integer)
    If IsNull(Me.radnikprimio.Value) Then
    MsgBox "niste uneli radnika koji je razdužio knjigu"
    DoCmd.GoToControl Forms!frmIznajmljivanjeknjige!subfrmIznajmljeneKnjige.Name
    DoCmd.GoToControl Forms!frmIznajmljivanjeknjige!subfrmIznajmljeneKnjige!radnikprimio.Name
    End If
End Sub


Očigledno nešto grešim pa ako neko već ima slično iskustvo neka pomogne. Pretpostavljam da postoji neka caka i da nije mnogo teško ali trenutno ne mogu ovo sam da rešim.
[ Getsbi @ 16.11.2008. 15:12 ] @
Mislim da će ti ovo pomoći. Probaj na događaj forme "BeforeUpdate" da uneseš kod sličan ovom:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull([TvojePolje]) Then
zxzBox "Morate uneti radnika koji je razdužio knjigu", vbCritical, "Pažnja"
Cancel = True
Me![TvojePolje].SetFocus
Exit Sub
End If
End Sub
[ biske86 @ 16.11.2008. 18:18 ] @
Citat:
Getsbi: Mislim da će ti ovo pomoći. Probaj na događaj forme "BeforeUpdate" da uneseš kod sličan ovom:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull([TvojePolje]) Then
zxzBox "Morate uneti radnika koji je razdužio knjigu", vbCritical, "Pažnja"
Cancel = True
Me![TvojePolje].SetFocus
Exit Sub
End If
End Sub


Ovaj kod radi kada probam da unesem neko ime a onda ga izbrišem. Ukoliko ne unesem ništa onda jednostavno prelazi na drugi slog i ništa se ne dešava kao da nema koda. To sam rešio tako što sam dodao u If uslovu još jedan ulov (Me.radnikprimio.Value = ""), tako da sada kod ima izgled:

Code:

Private Sub RadnikPrimio_BeforeUpdate(Cancel As Integer)
    If IsNull(Me.radnikprimio.Value) Or Me.radnikprimio.Value = "" Then
    MsgBox "Morate uneti radnika koji je razdužio knjigu", vbCritical, "Pažnja"
    Cancel = True
    Me!radnikprimio.SetFocus
Exit Sub
End If
End Sub


Međutim ovde mi javlja sledeću grešku:

Run-time error '2108'

You must save the field before you execute the GoToControl action, the GoToControl method or the SetFocus method.
O čemu se radi?
[ Getsbi @ 16.11.2008. 20:21 ] @
Blokiraj SetFocus, pa probaj ponovo.
[ biske86 @ 16.11.2008. 20:29 ] @
Ukoliko izbrišem naredbu setfocus onda jednostavno ukoliko hoću da pređem na sledeći slog to mi se i dozvoljava, a što ne bi trebalo.
[ Getsbi @ 16.11.2008. 21:14 ] @
SetFocus metoda radi korektno kad je uključena samo DAO standard. Za ADO se ne saćam da li pravi problem. U svakom slučaju ako ne koristiš eksplicitno ADO standard probaj da ga isključiš u VBA referencama i odblokiraš red:
Me!radnikprimio.SetFocus
Možda će da prpradi.
[ biske86 @ 16.11.2008. 21:39 ] @
Nisam baš razumeo kako da ga isključim u referencama. Možeš li nešto konkretnije?
[ Getsbi @ 17.11.2008. 03:59 ] @
VBA editor, Tolls, References.
Probaj taj zadnji da isključiš, snimiš i kompajliraš svoj projekat.
[ biske86 @ 17.11.2008. 13:07 ] @
Probao sam ali ne ide. Prelazi na sledeći slog i ne prijavljuje grešku. Evo i baze ukoliko zatreba jer sam pravio neke izmene.
[ Getsbi @ 17.11.2008. 15:12 ] @
A da li je bolja varijanta da napravš formu za logovanje, zapamtiš prijavljenog bibliotekara u globalnu varijablu koja je dostupna za vreme cele sesije (od prijavljivanja do izlaska iz programa) i onda u proceduri za vraćanje knjige upišeš automatski tog bibliotekara. Tako izbegavaš da bibliotekari jedan drugom podmeću klipove.
[ biske86 @ 17.11.2008. 15:31 ] @
Razmišljao sam o tome ranije ali se nisam usudio da krenem da pravim da mi se stvari dodatno ne iskomplikuju.
Kad smo već kod toga imaš li već u nekoj svojoj aplikaciji primer koji bih ja prepravio i ubacio u svoju bazu? Baš sam u frci sa vremenom, verovatno za tri ili najkasnije četiri dana branim završni rad pa nemam vremena za veće intervencije. Trenutno kucam tekstualni deo završnog rada i mislio sam samo još ovo sa unosom radnika da prepravim usput. Ovo što si predložio je super ideja. Ukoliko neko od korisnika ima ovu formu odrađenu neka pošalje rešenje.
[ Getsbi @ 17.11.2008. 19:51 ] @
Evo odavde: http://www.elitesecurity.org/t343015-0#2100163
skini LOZINKA.zip. Ostalo je samo da zapamtiš prilikom logovanja vrednost IDKorisnika u javnu varijablu. U nekom objektu tipa modules napiši:
Global bibliotekar As Long ' pošto je IDKorisnika u primeru AutoNumber
a potom tu varijablu bibliotekar prilikom logovanja napuni sa IDKorisnika. Ostalo si već radio.
[ biske86 @ 25.11.2008. 13:31 ] @
Citat:
Getsbi: Evo odavde: http://www.elitesecurity.org/t343015-0#2100163
skini LOZINKA.zip. Ostalo je samo da zapamtiš prilikom logovanja vrednost IDKorisnika u javnu varijablu. U nekom objektu tipa modules napiši:
Global bibliotekar As Long ' pošto je IDKorisnika u primeru AutoNumber
a potom tu varijablu bibliotekar prilikom logovanja napuni sa IDKorisnika. Ostalo si već radio.

Skinuo sam ovo i super je resenje ali ne odovara mi zbog toga sto ima i administratorski nalog tako da bi komisija mogla da me pita sta ako se ulogujem kao administrator. Onda bi morao da stavljam forme koje se otvaraju kada sam administrator a ako je ulogovan bibliotekar onda imamo drugacije forme. Zato sam stavio combobox koji filtrira radnike koji su bibliotekari na formi prijavljivanje i tu se radnik loguje. Na osnovu toga mi se automatski unose polja bibliotekar izdao i kada kliknem na dugme vrati knjigu unose se danasnji datum i radnik koji je razduzio knjigu. Promenljiva koja se cuva prilikom prijavljivanja na sistem se cuva u promenljivoj koja se nalazi u modulu tipa Standard a i promenljiva je Public a ne Global. Poslednju verziju baze kao i dokumentaciju tj. tekstualni deo zavrsnog rada uskoro cu okaciti. Interesuje me jos samo kako da ispraznim bazu. Mislim da u njoj nema podataka.
[ Getsbi @ 25.11.2008. 18:57 ] @
Deklarisanje javne varijable sa Global ili Public, sve jedno. Probaj da izvršiš program i u prvom i drugom slučaju. Kad startuješ varijablu u Immediate Window VBA editora dobićeš isto. Samo napiši: ? ImeJavneVarijable, a potom pritisni Enter.

Da bi ispraznio bazu od podataka, moraćeš svaku pojedinačnu tabelu da otvoriš, da slektuješ zapise i obrišeš ih. Moglo bi pisanjem VBA koda ali nema svrhe kad je jednokratna akcija u pitanju.

Kad završiš program okačićemo ga u TOP: Gotovi programi članova foruma.
[ zagorecForEver @ 03.12.2008. 11:48 ] @
Samo da pohvalim ovaj rad i kompletnu "raspravu" jer rezultat je jaaaakooooo vrijedan i poučan za nas ostale koji nismo tako dobri u access i još uvijek učimo... učimo... Zuper ste!!! Najbolji forum na našem jeziku kojeg sam pronašel gdje človek stvarno more nekaj naučiti!!!

ZagorecForEver
[ biske86 @ 06.12.2008. 12:47 ] @
Hvala na komplimentima. Odbranio sam završni rad i dobio desetku. Hvala još jednom svim ljudima koji su mi pomogli, ne bih nikog da izdvajam da ne zaboravim nekog da se ne naljuti. Vaša pomoć mi je mnogo značila.
Evo u attachmentu se nalazi konačna baza podataka kao i odgovarajuća dokumentacija tj. tekstualni deo mog diplomskog rada u .pdf formatu. Pored toga na linku http://www.elitesecurity.org/t...-biblioteke-predlozi-sugestije možete naći i modele u BPwinu i ERwinu za ovaj informacioni sistem..
PoZZ
[ Getsbi @ 06.12.2008. 14:29 ] @
Čestitam na uspehu .

Ako pročitaš, zakači fajl konačne baze pa da ga uvrstimo u gotove programe kako smo obećali.
[ biske86 @ 06.12.2008. 15:30 ] @
Hvala još jednom.. Možeš da kačiš u TOP evo attachmenta..
U attachmentu se nalazi samo baza a dokumentaciju nisam mogao da uploadujem jer ima 1.75MB tako da sam je okačio na svom sajtu biske.sitesled.com

PoZZ

[Ovu poruku je menjao biske86 dana 06.12.2008. u 16:40 GMT+1]
[ Meoowth @ 10.09.2009. 17:11 ] @
Kakva je sansa da dobijem ovaj rad?? Posto mi je potrebna baza podataka za seminarski uradjena u Erwin-u, BpWin-u i Accesu!!!
Unaprijed zahvaljujem
[ Getsbi @ 10.09.2009. 17:26 ] @
Počni da čitaš temu od početka. Na prvoj strani, u prvoj poruci je link ka forumu baze podataka gde se nalaze fajlovi tipa .bp1 i .er1 koji ti trebaju. Na ovoj temi ćeš naći Access-ov .mdb fajl.
[ biske86 @ 10.09.2009. 19:33 ] @
Ostavi mail poslaću ti sa sve dokumentacijom tj. mojim diplomskim radom.
[ Meoowth @ 10.09.2009. 19:46 ] @
Posto ne mogu poslati email, postivicu ga ovde!

******

Hvala puno!!!

[Ovu poruku je menjao Meoowth dana 11.09.2009. u 20:15 GMT+1]
[ marsovac100 @ 09.12.2010. 01:44 ] @
Da li ti je problem da mi posaljes dokumentaciju ukoliko je mogu dobiti. Hvala
[ biske86 @ 09.12.2010. 02:31 ] @
Nije problem, samo daj mi mejl adresu pošto je fajl veliki da bi mogao ovde da ga okačim. Pdf format ima oko 11MB, .doc ima oko 2MB, a .docx oko 1.4MB. Moj mejl je [email protected]
[ marsovac100 @ 11.12.2010. 14:46 ] @
Moj mail je [email protected]
[ anjapetar @ 17.03.2011. 21:57 ] @
Cestitam, dobra aplikacija. Moze dosta da se nauci i iskoristi.
[ banem @ 17.03.2011. 22:43 ] @
Vidim neko pre reče da su Global i Public deklaracije potpuno jednake. Skoro...

Global is not allowed in form or report modules. In those modules, Public has module-scope.
[ biske86 @ 18.03.2011. 00:52 ] @
Hvala. Meni je ovo bio prvi samostalni projekat i mnogo sam naučio od kolega sa foruma, velika zasluga ide njima.
U međuvremenu nisam radio ovakav neki veći projekat u Aksesu već sam se prebacio na MySQL i Oracle (ovaj prvi malo više) i naučio Javu. Nikako nemam vremena da uradim ovu biblioteku kao višeslojnu aplikaciju a ako nađem vremena da tako nešto napravim planiram da to bude u Javi ili eventualno PHP-u. Okačiću izvorni kod na nekom serveru npr. github-u pa možemo aplikaciju zajedno da razvijamo i zajedno da učimo. Baza bi mogla da bude MySQL. Ako je neko zainteresovan a zna pomenute tehnologije neka se javi. Nije mi cilj da ovako nešto komercijalizujemo već da se neštko nauči na konkretnom primeru..

Pozdrav za sve forumaše
[ Zidar @ 18.03.2011. 13:29 ] @
@biske: pazi, ako sad igramo zaozbiljno, moracemo da budemo znatno stroziji. Ako je rad bio odlican kao diplomski, kao sto i jeste, ne znaci da je dovoljno dobar za praksu, ko sto i nije. Za praksu - moze da prodje, ako svesno preskocimo neka pitanja, od analize procesa pa sve do strukture baze. Za sada toliko, deataljnije ako i kada zapocne 'ozbiljan' posao.

[ biske86 @ 18.03.2011. 14:52 ] @
U potpunosti se slažem sa tobom. Ima dosta stvari koje treba prepraviti, prva koja je najuočljivija je da je biblioteka koncipirana da čuva informacije o knjigama umesto da posmatra knjigu samo kao jednu vrstu bibliotečke građe. Ili npr. ne postoji mogućnost da se napiše originalni naziv dela (ukoliko je to prevod neke knjige), itd. Znači svestan sam da postoji još dosta potencijalnih unapređenja ali ovo je tad bilo odlična praska za mene.
[ Zidar @ 18.03.2011. 16:40 ] @
Biske, ti si uradio odlican posao. ad sam ja profesor i pojavimi se takav rad, opet bih ga ocenio sa 10. Tacka. U momentu u kome je rad radjen, uzevsi u obzir znaje, iskustvo i vreme koje si imao na na raspolaganju, ti si zivukao maksimum i to je ono sto se ceni i ocenjuje.

Tek kad provedes meses-dva dana radeci u biblioteci i koristeci sopstveni sistem, tek onda mozes da dobijes pravu sliku o tome sta u stavri treba da se uradi, pod pretpostavkom da znas i kako da to izvedes. Naravno da neces raditi u biblioteci, ali ces dobiti neki feed-back, koji ce ti pomoci da sledeci put, na nekom drugom projektu, budes malo bolji u otkrivanju onoga sta treba da se uradi. Usput postanes bolji i u onom delu 'kako da to izvedem' i to se zove iskustvo i minuli rad.

Sto se tice konkretnog zadatka, biblioteke, stvar je mnogo komplikovanija nego na primer maloprodaja robe u samousluzi. Ono sto znamo o bazama podataka (normalizacija, strani kljucevi, relacije) nije dovoljno da pokrije sva ogranicenja koaj se namecu u jednom takvom istemu. Ne bihisao u detalje, spremma se da napsiem jedan clanak ne nekom od foruma , ili blog entry na http://www.baze-podataka.net/, o pracenju promena u poslovnim sisteminma, polse toga bi trebalo da bude lakse da razuemo sta se desava.

Jedno pitanje za razmisljanje (ne treba da postavis odgovor, samo pogledaj sistem i razmisli), cuvaj odgovor za kad pocne 'pravi posao' na ovu temu). Pitanje: "Kako garantovati da se jedan isti primerak knjige ne moze izdati dvojici clanova u isto vreme? Drugim recima, ako je knjiga vec izdata, ne moze se izdati dok se ne vrati." Probao sam direktnim unosom u tabele, probao sam kroz aplikaciju - i uspelo je. Istu knjigu sam izdao trojici u istom momentu. Nemoj da zuris sa odgovorom, samo prouci prolem i razmisli.

[ biske86 @ 18.03.2011. 18:00 ] @
Sad si mi zagolicao maštu. Nisam znao da može preko aplikacije da se izda jedna ista knjiga u isto vreme.

Nisam bio svestan ovog konkretnog problema ali sam svestan da nijedan softver ne može da bude kompletan pre nego što se izvrši implementacija i testiranje. Znam da to nisam uradio pošto je ovo zadovoljavalo kriterijume završnog rada a kasnije nisam nikako imao vremena da probam da testiram aplikaciju iako sam imao volje..
[ biske86 @ 19.06.2012. 21:19 ] @
Pozdrav svima. Dosta ljudi mi se javlja sa zahtevom da im pošaljem biblioteku pa sam rešio da je postavim na svom blogu. Na adresi http://biske.rs/projekti/biblioteka/ se nalazi kratak opis, par slika, kao veza za preuzimanje modela procesa, modela podataka, same baze kao i dokumentacije tj. mog završnog rada.
[ biske86 @ 09.11.2024. 17:31 ] @
Link ka blogu više ne radi. Javite mi se na mejl ukoliko vam je potrebna baza podataka.

Pored toga razmišljam ovih dana da napravim unapređenu verziju Biblioteke koja ne bi bila Akses baza podataka već napravljena korišćenjem modernih alata. Konkretno platforma bi bila veb (React za frontend i Ruby on Rails za bekend i Postgres za bazu).

Moglo bi da joj se pristupa preko interneta ali ako neko ima zahtev moguće je instalirati u privatnoj mreži.
Verzija 2.0 neće biti beplatna, ali nisam još razradio model.


Želim i da vidim da li postoji interesovanje, zato molim da popunite ovu formu (ne traži više od 1 minuta): https://forms.gle/TCsAKZLToMLHxvW37