Citat:
1. Da li se ta forma pravi tako sto izaberem tabele racunZaglavlje i RacunStavke, pa se onda na combobox koji je naziv kupca postavi na dogadjaj afterupdate f-ja koja procita odgovarajuca polja iz tabele kupci na osnovu tog naziva (jedinstven je naravno) i analogno za artikle plus se na polje cena takodje na dogadjaj AfterUpdate postavi odgovarajuca f-ja (f-je mi nije problem da napisem tako da nemojte oko toga da se mucite)? Ili se pravi query na osnovu tih tabela pa ce on sam automatski da za izabrani naziv popuni odgovarajuca polja? (Ovo mi je uspelo kod subforme ali ne i u glavnoj formi). Ili se query pravi samo za izracunavanja, u ovom slucaju da se izracuna ukupna cena?
Mogu da napravim prvo resenje ali me ipak kopka da li je ovo preporuceno ovako da se radi u access-u?
U data setu koji je record source za formu frmRacunZaglavlje, imas polje KupacID. Postavi dva combo boxa na formu, cboKupacID i cboImeKupca. Oba neka imaju data source jednak KupacID.
U cboKupacID stavi record source samo "SELECT KupacID FROM KUpci".
U cboImeKupca, stavi row source "SELECT KupacID, ImeKupca FROM Kupci", Column Count=2, Column Widths: 0,3cm => nece ti se videti KupacID, nego nazivKupca, a kontrola ce u stvari da ima vrednost KupacID.
Kad promenis vrednost jednog kombo boxa, promenice ti se i drugi. Izaberes kupca po imenu => oba kombo boxa imace vrednost KupacID, cboKupacID ce prikazati KupacID, a cboImeKupca ce prikazati ime.
Kako da prikazes/kopiras relevantne vrednosti za kupca iz tabele tblKupci u tabelu tblZaglavljeRAcuna? Imas dve opcije, moze jedan ili druga, a mogu i obe odjednom (najbolje)
Prvi korak: treba ti after update za cboKupacID i cboImeKupca. Kod u oba eventa je isti - dodeljuje drugim kontrolama na formi vrednost iz tabele tblKupci. Ja najcesce koristim Dlookup, na primer
txtAdresa = Dlookup("Adresa","tblKupci","KUpacID=" & form!cboKupacID)
txtTelefon = Dlookup("Telefon","tblKupci","KUpacID=" & form!cboKupacID)
itd.
NA velikim tabelama Dlookup moze biti spor, pa ako ima desetak Dlookup-a, cela forma postaje spora. Onda mozes da otvoris rekordset koji ce ti vratiti sve trazene vrednosti u jednom cugu. Na primer
DIM db as DAO.Database
DIM rs AS DAO.recordset
SET db = currentdb
Set rs = db.openrecordset("SELECT Adresa, telefon, FROM tblKupci WHERE KupacID = " & me!cboKupacID
rs.movefirst
txtAdresa = rs!Adresa
txtTeleforn = rs!Telefon
itd...
Znaci, kad god izaberes kupca, sva relevantna polja na formi se odmah popune. Pozeljno je da ta polja budy read-only (Locked = Yes)
Drugi Korak: Treba ti i kod na Form Before_Update, da proveri da li se sve ovo desilo, pa ako nije, da pokusa da ponovi operaciju ili bar da spreci cuvanje rekorda.
Ako koristis bound formu subformu, ne treba ti nikakvo dugme za snimanje rekorda na glavnoj formi. Kad sa glavne forme predjes na subformu, rekord na glavnoj formi ce se automatski sacuvati. Novajlije to vole, jedna stvar manje da brinu. neki profesionalci vole da imaju vise kontrole nad snimanjem rekorda, pa zato bar na frominom Before Update izvrse sve potrebne konrole.
Drugi nacin je da nemas nista na After Update za kombo boxove, vec da sve uradis na forminom BeforeUpdate, sto se ne preporucuje. ako vec radis za nekog kupca, lepo je da vidis sta si izabrao.
Sto se tice dodavanja nepostojeceg kupca/dobavljaca u letu i to je veoma popularno, ali se meni ne svidja. Unos kupca u bazu podataka je suvise ozbiljna stvar da bi se tek tako na brzinu odradio dok ti stoji otvoren combo box na tamo nekoj formi. Ako kupac/dobavljac ne postoji u bazi, ostavi racun na stranu, ili zatvori formu. Unesi kupca kako treba (ima li neka interna kontrola, da li je kupac dobro unesen, da li se taj kupac/dobavljac mozda nalazi vec u tabeli pod pogresnim imenom i slicno) pa se vrati i razresi doticni racun.
Access je amlo fleksibilniji i aljkaviji nego VB kad se radi o unosu podataka (autmatsko snimanje bez pitanja i slicne stvari) Zato se puno paznje treba pokloniti back endu, jer Access aplikacija ne moze da ti cuva integritet podataka na nacin an koji to mozda moze VB. Zato je brzina nevidjena. Da dobijes aplikaciju koja izgleda kao da radi, to je ocas posla. D.da je utegnes (citaj: sprecis kojekakve Accessove automatizme i aljkavost) treba pet puta vise vremena. Otprilike, 20% vremena da napravis aplikaciju kojaje 80% kompletna i pouzdana. 80% vremena da je doteras do 100% kompletnosti i pouzdanosti.