[ dzaga29 @ 27.02.2019. 07:34 ] @
Imam problem kako povezati tablice u Accessu pošto importirane tablice nemaju nikakvo ID polje!!!
U firmi u kojoj radim daljinski očitavamo vodomjere i trebao bi sam kreirati izvješća i upite na bazu. Kada sam u Access importirao backup dobio sam 6 tablica sa podacima ali niti jedna tablica nema ID polje kako to funkcionira u Accessu. Tablicu RadioMeter koja ima 3768 zapisa ne mogu povezati sa tablicom Customer kojih ima 3587. Razlik između broja zapisa dešava se jednostavno iz razloga što na jednog kupca može ići više vodomjera i obratno na jedan vodomjer može ići više kupaca. U programu za daljinsko očitanje Kupci i Vodomjeri povezani su sa Brojem vodomjera u tablici CustomerRadioMeter, ali osim ovog polja nema ničega.
Osim navedenih tablica još imam tablice RadioTour u kojoj su navedeni obilasci za očitanja; tablicu RadioTourMeter u kojoj je naveden vodomjer po rednom broju u obilasku i tablicu RadioReadout koja sadrži očitanja.
Ako se netko susreo sa sličnim problemom molim za pomoć.
[ BiloKoje @ 28.02.2019. 06:00 ] @
Naravno, XML ne daje vezu među podacima u tabelama, samo prenosi podatke, pojednostavljeno rečeno. Vezu moraš postaviti sam.
Teško je pohvatati relacije kada nisam upoznat sa konkretnim zadatkom, ali mi se čini da bi relacija mogla da se postavi na sledeći način. Rekao bih da svako brojilo ima svoj jedinstvenio broj, to bi bio ID brojila, potošači imaju svoje šifre koje dobiju kad zakljulče ugovor, uđu u sistem. Neka tabela u kojoj se obračunava potrošnja sadrži broj brojila, šifru kupca, potrošnju, cenu ukupno zaduženje. Prilikom unosa očitanih podataka, količine se odnose na brojilo, ako jedno brojilo plaća više kupaca to se može "ručno uneti, ili automatizovati ako postoji poznat postotak za svakog potrošača, t akođe, ako jedan kupac uma više brojila, uneće se onoliko stavki koliko ima brojila. Kad se radi račun, podaci se grupišu premo kupcu, ukoliko kupac treba da dobije jedan račun za sve utroške. Imaće, na primer, celokupnu potrošnju sa dva bojila, polovinu sa jednog i trećinu sa još jednog brojila, ukupno četiri stavke.
[ dusans @ 28.02.2019. 09:20 ] @
Ne vidim šta su tu problemi?
Xml nije nešto što eksplicitno sadrži informacije o ključevima i vezama,
ali sam pogled na strukturu i podatke veoma jasno pokazuje kako je šta
povezano i šta bi bili ključevi u relacionom modelu.

Ključevi su:
Code:

RadioMeter.MeterNumber (PK)

Customer.AccountNumber (PK)

CustomerRadioMeter.AccountNumber (PK + FK na Customer.AccountNumber)
CustomerRadioMeter.MeterNumber (PK + FK na RadioMeter.MeterNumber)

RadioTour.Name (PK)

RadioTourMeter.TourName (PK + FK na RadioTour.Name)
RadioTourMeter.MeterNumber (PK + FK na RadioMeter.MeterNumber)
RadioTourMeter.Order (PK)
* mislim da ti za RadioTourMeter i ne treba PK al' ajde

RadioReadout.TourName (FK na RadioTour.Name)
RadioReadout.MeterNumber (FK na RadioMeter.MeterNumber)


Kako ćeš da napraviš izveštaje, to su već drugi problemi...
Čak i da ne definišeš primarne/strane ključeve mogao bi da spajaš podatke
po ključnim poljima - to je valjda i bilo pitanje - preko kojih polja se šta spaja.

[Ovu poruku je menjao dusans dana 28.02.2019. u 10:33 GMT+1]
[ dzaga29 @ 28.02.2019. 12:07 ] @
Zahvaljujem na odgovorima, ali jednostavno sam XML datoteke učitao u Excel i onda ih ubacio u tablice u Access. Na taj način sam u Tablici Obilasci dobio i broj vodomjera po kupcima. Meni ovaj program prvenstveno treba da bi vodio evidenciju o ugradnji vodomjera, pravovremenoj izmjeni istih i sl. Bilo bi dobro da se i očitava potrošnja, ali naplate ionako idu preko računovodstva. Bojim se da nisam dobro povezao tablice da bi mogao kreirati željene upite kao npr. Koliko kupaca ima više od jednog vodomjera i obratno na koliko vodomjera ima više od jednog potrošaća.
U prilogu je ono što sam napravio!
Zahvaljujem...
[ bokinet @ 28.02.2019. 12:36 ] @
Napraviti u MS Access f-ju tj. kod koji vrsi importovanje podataka iz XML u bazu tj. iz tabela gde se smestaju uvozni podaci.

Sutra moze da se desi da nema MS Excela na racunaru i onda nema uvoza na opisani nacin ili bilo koji drugi.

Drugo, glupo je da se koristi vise aplikacija za neki proces ako to bas nije izricito zahtevano, posbno zbog krajnjeg korisnika aplikacije ali i samnjivanja mogucnosti za pojavom greske od strane ljudskog faktora.

Logika dodeljivanja ID-ova za svaku vezu medju podacima takodje odraditi kroz proces uvoza podataka kao i pretrazivanje nad postojecim podacima i vracanje samog ID ako je potrebno recimo dodavati podatke za vec postojic zapis u bazi (recimo za isto klijenta/potrosaca).

Znaci tkz. presipanje podataka iz jednog oblika u drugi gde se ujedno radi formatiranje podataka shodno potrebama na drugom kraju gde se isti novi beleze u tabele ide iz kod koji vrsi uvoz (import) podataka iz xml u ms access.

Takodje u VBA se moze vrsiti parosvanje XML file-ova.

Da ne duljim mnogo evo par linkova sa web-a gde se moze videti primer kako to moze da se odradi (a tice se parsovanja i citanja podataka iz XML)

VBA XML Parser info


Pored toga za svaki xml file se moze napraviti klasa tj. objekat koji ustvari odgovara strukturi podataka iz xml.
Nakon toga se odradi ucitavanje podataka iz xml u kolekciju objekata (te klase) i onda se posle vrsi spajanje podataka i dodatno ubacivanje u bazu.

customers.xml -> kolekcija objekata klase customer
meters.xml -> kolekcija objekata klase meters
readouts.xml -> kolekcija objekata klase readout
tours.xml ->kolekcija tours

Ovo bi vam olaksalo posao za sve sutra.
[ dzaga29 @ 28.02.2019. 14:02 ] @
Prvo trebam složiti bazu da funkcionira, a za punjenje ću se snaći!
[ dusans @ 28.02.2019. 14:36 ] @
Šta fali organizaciji kakva je data u xml fajlovima?

Velika je greška što bežiš od input strukture koja je dobra,
dakle po xml-ovima imaš vezu više-na-više između vodomera i potrošača
a u tvojoj bazi koju si okačio takva veza ne postoji već postoji samo
jedan-na-više između vodomera i potrošača (Potrošači.Vodomjer), ali fali ti i obrnuto.

Pošto nemaš obrnute veze (jedan potrošač kod tebe u bazi ne može imati više vodomera),
onda updaš u probleme i pokušavaš da zbrajaš broj vodomera po potrošaču verovatno tako
što analiziraš operativne podatke obilazaka, čime ulaziš u još veće probleme.

upite kao npr. Koliko kupaca ima više od jednog vodomjera i obratno na koliko vodomjera ima više od jednog potrošača
bi dobio vrlo lako da postoji tabela koja gradi vezu više-na-više između vodomera i potrošača

Ne moraš da uzimaš sve živo iz xml-ova ali strukturu i kardinalitete bi trebao da ispoštuješ.
[ bokinet @ 28.02.2019. 14:56 ] @
Jedan dodatak kao propratni prilog na @dusanns

Da se pojednostavi a sto se strukture DBMS tice:

napraviti/formirati:

- tabelu klijenti gde svaki klijent ima svoj jedinstveni broj/sifru kao PK

- tabelu vodomeri gde svaki vodomer tj. uredjaj ima svoj jedinstveni broj/sifru PK ali i pored istog (posto je to interni broj u DBMS) i recimo serijski broj istog. Moze se dodati pomocna tabela gde bi se relaciono takodje odredi i sam tip vodomore ako postoje - recimo glavni vodomor, individualni za stanove, individualni za kuce i sl.;

- tabelu gde se definise odnos izmedju svakog zapisa u tabeli klijenti i tabeli vodomeri, gde svaki klijent moze da ima jedan ili vise vodomera tj. uredjaja, odnosno ni jedan vodomor;

- tabelu gde se cuvaju vrednosti sa terena odnos sam izvestaj koji dolazi po vodomeru a gde se definise tako sto se uzima dodeljen jedinstveni broj na relaciji korisnik-vodomor (PK iz trece tabele) tj. tabele gde je definisana relacija i pripadnost/vlasnistvo koje je trenutno. Sutra taj vodomor moze da se skine i odnese kod nekog drugog korisnika, na primer.

Razmotriti i dodavanje statusa u samoj relaciji u trecoj tabeli gde se definise odnos gde bi status predstavljao recimo da li je vodomor aktivan kod tog korisnika i njime se koristi ili ne.

i tako redom.

Nakon toga, napraviti f-ju koja uvozi podatke iz xml i iz istih uzima potrebne vrednosti za gore opisanu bazu.


[ dzaga29 @ 28.02.2019. 18:20 ] @
Citat:
dusans:
Šta fali organizaciji kakva je data u xml fajlovima?
Velika je greška što bežiš od input strukture koja je dobra,
dakle po xml-ovima imaš vezu više-na-više između vodomera i potrošača
a u tvojoj bazi koju si okačio takva veza ne postoji već postoji samo
jedan-na-više između vodomera i potrošača (Potrošači.Vodomjer), ali fali ti i obrnuto.

Pošto nemaš obrnute veze (jedan potrošač kod tebe u bazi ne može imati više vodomera),
onda updaš u probleme i pokušavaš da zbrajaš broj vodomera po potrošaču verovatno tako
što analiziraš operativne podatke obilazaka, čime ulaziš u još veće probleme.

Jednostavno kada koristim XML datoteke ne znam povezati tablicu kupci i vodomjeri. Pokušavam ali ne ide!!!
Da li trebam ubaciti nova polja sa primarnim ključevima ili što???
[ Getsbi @ 28.02.2019. 19:28 ] @
Prvo moraš da isprazniš sve tri tabele i povežeš ih ovako kako sam ti povezao. Kad budeš siguran da ti je prazna baza korektna, tek onda razmišljaj o uvozu podataka. Za to će ti trebati programski VBA kôd koji će da ih napuni iz .xml datoteka.Upravo ono što ti je rekao Bokinet.
[ dzaga29 @ 28.02.2019. 23:30 ] @
Zahvaljujem Getsbi - ovo sada sve funkcionira, ali isprobao sam samo tablice Kupci i vodomjeri, a obilaske i očitanja ću isprobati nakon spavanja. Ideja koju je napisao bokinet mi se veoma sviđa.

Citat:
Moze se dodati pomocna tabela gde bi se relaciono takodje odredi i sam tip vodomore ako postoje - recimo glavni vodomor, individualni za stanove, individualni za kuce i sl.;

- tabelu gde se definise odnos izmedju svakog zapisa u tabeli klijenti i tabeli vodomeri, gde svaki klijent moze da ima jedan ili vise vodomera tj. uredjaja, odnosno ni jedan vodomor;

- tabelu gde se cuvaju vrednosti sa terena odnos sam izvestaj koji dolazi po vodomeru a gde se definise tako sto se uzima dodeljen jedinstveni broj na relaciji korisnik-vodomor (PK iz trece tabele) tj. tabele gde je definisana relacija i pripadnost/vlasnistvo koje je trenutno. Sutra taj vodomor moze da se skine i odnese kod nekog drugog korisnika, na primer.

Razmotriti i dodavanje statusa u samoj relaciji u trecoj tabeli gde se definise odnos gde bi status predstavljao recimo da li je vodomor aktivan kod tog korisnika i njime se koristi ili ne.

Jedino se bojim da si ne zakompliciram prilikom uvoza podataka iz .xml datoteka.
Pozdrav!
[ dzaga29 @ 01.03.2019. 07:52 ] @
Ponovno problem! Malo sam raširio model sa tablicama za Izmjene vodomjera i tablicom Tip vodomjera koju punim iz popisa sa mogućnošću višestrukih unosa, ali kada u tablici vodomjeri želim unjeti tip vodomjera dobijem poruku greške. U čemu sada griješim ???
[ Getsbi @ 01.03.2019. 10:01 ] @
Zaboravi na forme i upite dogod ne naučiš kako da kreiraš bazu podataka koja će odgovarati podacima.
Ne puni podacima tabele dogod nisi siguran u dobru povezanost tabela.
Ne koristi višeznačna polja u koja ćeš da smeštaš istovremeno podatke u jedno polje, tipa: glavni;daljinski i slično.
Tip vodomera nema razloga da bude numerik, čak i ako žarko želiš da ti Access pomaže u dodeljivanju vrednosti. Za to postoje bolji načini. Sa tipom vodomera nećeš ništa da računaš, te nema razloga da bude numerik.
Dodao sam ti tabelu TipVodomera. Pogledaj sada Relationship i probaj da uneseš zapise ručno u te dve tabel, bez formi ili upita.
Tabela TipVodomera je roditelj za tabelu Vodomeri, te stoga zapis u prvoj mora da postoji da bi ga koristio u drugoj.
[ Getsbi @ 01.03.2019. 10:10 ] @
Sudeći po donjem linku, čini mi se da si ranije više znao. Pogledaj sliku od pre 6 godina.
http://www.elitesecurity.org/t460336-0#3228788

[ dzaga29 @ 01.03.2019. 13:47 ] @
Citat:
Sudeći po donjem linku, čini mi se da si ranije više znao. Pogledaj sliku od pre 6 godina.
http://www.elitesecurity.org/t460336-0#3228788


Obzirom da već godinama nisam ništa radio treba mi malo duže da se podsjetim.
Mislim da sam uspio razraditi bazu i da bi sada trebala funkcionirati. U prilogu šaljem sliku ralacije i bazu. Jedino kod tablice Izmjene vodomjera ne znam da li sam dobro uradio ili sam u tablicu Kupci_Vodomjeri mogao samo dodati zapis IDIzmjene.
[ Getsbi @ 01.03.2019. 14:31 ] @
Ako se jedan vodomer očitava više puta, što je vrlo berovatno, trebalo bi povezati tabele Vodomer i Radio očitavanja. Toj tabeli bih dodao Autonumber ključ IDRadioOcitanje. Tu Autonumber ima logike.
Ovo oko bilaska vodomera mi nije baš najasnije. Možda bi moglo da se reši jedniom tabelom ako bi mi pojasnio kardinalnost (koliko čega se sadrži u onom drugom). Verovatno postoji razlika oko očitavanja i samo obilaženja vodomera zbog pregleda tehničke ispravnosti.
Takođe bi verovatno tabela KupciVodomeri mogla da sadrži IDDetalja, čime bi se eliminisala potreba za tabelom IzmeneVodomera. Tada bi model baze izgledao kao na slici. Ostaje još desna strana da se definiše.
[ dzaga29 @ 01.03.2019. 15:13 ] @
Što se tiče očitavanja vodomjera to se vrši mjesečno tako da radnici prolaze po Obilascima sa dlanovnikom u koji se prethodno unesu vodomjeri koje treba očitati. Ovisi da li očitava Poduzeća, kućanstva i dr. Ako se nebi kreirao obilazak sa određenim vodomjerima onda bi očitao sve pa čak i vodomjere koji su u skladištu u firmi. Doseg modula je da u krugu 300 m očita vodomjere. Kada završi očitavanje pomoću PC-a se prebaci u bazu kao XML datoteka i to u računovodstvo i program za daljinsko očitavanje (MSCentar). Očitana XML datoteka ima samo 2 podatka (očitanje i broj vodomjera), ali kada se učita u MSCentar onda iz tog centra ja napravim bekap datoteke sa ažuriranim podacima (customers, meters, readouts i tours) sa kojima sam i započeo. Normalno je da će trebati povezati tabele očitanja i vodomjera, ali ne znam da li treba spremati prethodna očitanja mada bi bilo dobro zbog arhiviranja. Ako se spremaju očitanja da li će program bitiprevelik jer se radi o cca 20.000 vodomjera i korisnika, a očitavanja su mjesečna.
Izmjene vodomjera moraju se zakonski obaviti u 5 godina i tada izmjenjeni vodomjer dajemo na servisiranje a mi ugrađujemo novi. Tvrtka koja servisira vodomjere to obavlja za sve komunalne firme i velika je vjerojatnost da taj vodomjer više nikada ne dobijemo iako i možemo pa bi bilo pametno da se skinuti vodomjer može izbrisati iz baze.
Pozdrav!
[ Getsbi @ 01.03.2019. 16:53 ] @
Što se tiče broja od 20.000 vodomera i korisnika, te mesečnih očitavanja, može se u nekom trenutku ukazati potreba da se podaci drže na MS SQL serveru. Tada bi i dalje front-end ili interface bio u MS Access-u. Arhiviranje bi bilo češće, a sa njim i pražnjenje pojedinih tabela. MS Access . accdb fajl ima ograničenje do 2GB. SQL Server fajlovi tipa . mdf i .ldb nemaju ograničenja za veličinu.

Za predviđanje povodom MS Access fajla, može se reći da je prosečnoj tabeli sa 10 tekstualnih kolona potrebno oko 5 miliona zapisa da dostigne ograničenje od 2GB. Tako da za sada ne moraš da brineš.

Što se tiče veza, neka za sada ostanu takve, pa ćeš videti koje ćeš tabele i kojim tempom morati da arhiviraš i prazniš.
Sad bi ti trebala pomoć nekog (a to nisam ja) ko ima dovoljno vremena i znanja da napravi VBA kôd u funkciji koja će da napuni tabele iz tvojih .xml datoteka, vodeći računa o popunjavanju polja primarnih i prenesenih ključeva. Tek nakon toga možeš da se pozabaviš drugim objektima tipa: forme, upiti izveštaji i slično.
[ dzaga29 @ 01.03.2019. 18:18 ] @
Citat:

Sad bi ti trebala pomoć nekog (a to nisam ja) ko ima dovoljno vremena i znanja da napravi VBA kôd u funkciji koja će da napuni tabele iz tvojih .xml datoteka, vodeći računa o popunjavanju polja primarnih i prenesenih ključeva. Tek nakon toga možeš da se pozabaviš drugim objektima tipa: forme, upiti izveštaji i slično.


Sada se bojim da će biti problema jer je ne znam na koji način riješiti VBA funkciju za punjenje tabela iz .xml datoteka.
Dok čekam da se netko eventualno javi napravit ću beckap baze i pokušati ga napuniti preko Excela iako sam zakomplicirao i sa promjenom datumskih formata ( u tablicama je kratki datum a u .xml datoteci text format). Ali idem probati...
Pozdrav do daljnjeg!
[ dzaga29 @ 01.03.2019. 19:52 ] @
Morat ću odustati jer tablicu KupciVodomjeri mogu jedino upisivati ručno a to je 3587 kupaca i 3768 vodomjera, tablicu Vodomjeri i Kupci sam uspio napuniti.
Pomoću upita sam testirao i očito je krenulo naopako kod prvog kupca koji ima više vodomjera. Taj dio znam jer za sebe kada sam unjeo podatke izašlo je da je moja Šifra kupca 755 a u stvarnosti .xml je 691
[ dzaga29 @ 01.03.2019. 23:34 ] @
Uostalom ako se nekome zeza neka pokuša napuniti bazu!
[ bokinet @ 02.03.2019. 13:06 ] @
Procitajte moje postove ponovo na ovoj temi kako bi pravilno resili problem.

Losa vam je koncepcija i logika opet postavljena u DBMS koliko sam brzinski stigao da vidim i ako sam gledao aktuelnu verziju.
[ Gigel @ 02.03.2019. 14:26 ] @
Čitam postove pa evo da pomognem ili možda dam ideju
možda je lakše importovati xml fajlove direktno u access
access nudi opciju da se ti xml fajlovi jednom importovani mogu puniti sa novim podacima
pa napraviti apend ili update query (da li se pune sa novim podacima ili se edituju postojeći)
baza u prilogu.
[ dzaga29 @ 02.03.2019. 15:45 ] @
bokinet zahvaljujem, ali primjetio sam da kada sam ubacio tablice pogubio sam neke podatke. Bilo je kupaca bez vodomjera i sl.
Prebacujući u Excel dobio sam proširene tablice sa kolonama za povezivanje i uspio sam rješiti problem. Sada imam tablicu Kupci_Vodomjeri sa svih 3788 zapisa.
Problem mi je jedino što sam ubacivanjem novih tablica porušio relacije koje mi je postavio Getsbi. Njegova baza mi je u potpunosti odgovarala jedino što sam tablicu Kupci_Vodomjeri morao puniti ručno a ima 3788 zapisa.
Ideja od bokineta mi se najviše sviđa, ali VBA kod za funkciju ubacivanja iz .xml datoteke u Access jednostavno ne znam i mogu samo odustati.
Pokušat ću dalje pa ću kasnije razmišljati kako ažurirati podatke.
Uploadati ću bazu sa tablicama pa tko želi neka pokuša,a posebno molim da Getsbi pokuša složiti ili napuniti postojeću bazu po prethodnim relacijama.
Pozdrav!
[ dzaga29 @ 02.03.2019. 16:52 ] @
Svima zahvaljujem ali rješio sam problem - jednostavno u tablici Kupci je 201 zapis dupliran umjesto samo u tablici Kupci_Vodomjeri. To je u biti broj vodomjera koje pojedini kupci imaju na više lokacija. Getzbi tvoj program radi bez problema, a sada ću se pozabaviti sa upitima i formama pa es kasnije javim!
[ Getsbi @ 02.03.2019. 16:53 ] @
Sve je to posledica ovakvog punjenja.
Da bi se uspostavila veza relacijama moraju ključevi da budu istog tipa, što kod tebe nije slučaj. Takođe ne sme da bude duplikata po primarnom ključu, što opet jeste slučaj. To moraš da isčistiš. Imaš 201 duplu šifru kupca u tabeli Kupci.
Kad to budeš uradio moći ćeš da dodeliš ključeve i da povežeš tabele.
[ dzaga29 @ 03.03.2019. 09:02 ] @
Da li je moguće iz forme klikom na polje sa unesenom email adresom odmah poslati mail, ali da u listi svojstva kada izaberem hipervezu ne moram za svaki zapis pisati "mailto:određena adresa" nego jednostavno preko VBA koda. Slika u prilogu...

[ Getsbi @ 03.03.2019. 09:46 ] @
Može VBA kôdom. Neophodno je da mail nalog pošiljaoca bude inkorporiran u MS Outlook na istom računaru gde je i aplikacija. On šalje mail do pošiljaočevog provajdera. Pošiljočev provajder šalje provajedru primaoca i mail stiže u inbox zahtevane adrese.
[ dzaga29 @ 03.03.2019. 10:18 ] @
Komplicirano - bitno da imamo adresu, a poštu ćemo slati po potrebi. Na istom obrascu iz prethodnog posta za Šifru kupca morao sam prebaciti iz text formata u broj, jer pretraga nije radila zbog nepodudarnosti vrste podataka u kriteriju za pretraživanje. Nadam se da me to neće kasnije ometati u radu.
Imam jednu molbu; želio bi izraditi upit na bazu da mi izlista potrošaće koji imaju više vodomjera ali mi neide. Kod upita vodomjeri za izmjenu isto nisam sretno složio upit jer sam rok od 5 godina postavio od fiksnog datuma (morao bi ga dnevno mjenjat) umjesto da bude funkcija Now() - 5 godina. Prikvaćit ću bazu.
Pozdrav!
[ Getsbi @ 03.03.2019. 11:27 ] @
Ovo su ti duplikati.
Code:
SELECT [Kupci-Vodomjeri].Sifra_kupca, [Kupci-Vodomjeri].Broj_vodomjera
FROM [Kupci-Vodomjeri]
WHERE ((([Kupci-Vodomjeri].Sifra_kupca) In (SELECT [Sifra_kupca] FROM [Kupci-Vodomjeri] As Tmp GROUP BY [Sifra_kupca] HAVING Count(*)>1 )))
ORDER BY [Kupci-Vodomjeri].Sifra_kupca;

Ako hoćeš i nazive kupaca, onda ovaj upit veži sa kupcima i SELECT naredbom izlistaj svih 341 kupca sa nazivima.
Ovo drugo ću pogledati malo kasnije.

P.S. - Ovo drugo ćeš rešiti tako da napraviš pokretačku formu sa poljem u koje ćeš uneti datum i dugme na koje ćeš pokrenuti upit. U upitu ćeš umesto apsolutnog datuma postaviti referencu ka formi i datumskom polju. Tako će podaci biti aktuelni za uneti datum.
[ dzaga29 @ 03.03.2019. 12:41 ] @
Ne ide
[ Getsbi @ 03.03.2019. 12:57 ] @
Nisam rekao da taj upit prepravljaš već da ga vežeš sa tabelom Kupci. Tako naparviš novi upit kojem je onaj moj izvor podataka.
[ dzaga29 @ 03.03.2019. 13:29 ] @
Ipak si ti bio u pravu kada si rekao da sam sve zaboravio, ali barem volje imam.
Imam problem u relacijama za očitavanje vodomjera; kada povežem vodomjer iz tablice očitavanja sa vodomjerom iz tablice vodomjeri stvori mi se veza 1 na više tako da za određeni vodomjer mogu birati količinu umjesto da npr. na Formi potrošaća imam stvarnu kolčinu za taj vodomjer???
[ Getsbi @ 03.03.2019. 14:01 ] @
Jedan vodomer može da bude očitan više puta i sva očitavanja će se gomilati u tabeli „Ocitanja”. Bar ja imam takav pogled na stvari. Prema tome bi trebalo promeniti ključ u toj tabeli „Ocitanja” na OcitanjaID, Autonumber i spojiti te deve tabele po polju Broj_Vodomera. I naravno da prvo moraš isprazniti tabelu „Ocitanja” od podataka kako bi je korektno spojio. Prerano punjenje tabela pre povezivanja. To sam već rekao. Prerano su i ove forme. Logički redosled mora da se poštuje. Savetovao sam ti da zaboraviš na forme jedno vreme, dogod ne bude cela baza korektna. Inače ćeš se vrteti u krug.






[Ovu poruku je menjao Getsbi dana 03.03.2019. u 15:19 GMT+1]
[ bokinet @ 03.03.2019. 15:10 ] @
Mislim da DBMS nije dobro odradjen po poslednjoj slici tj. blok seme sto je dato od strane @dzaga29 post id

Evo ukratko posto sam kratak sa vremenom:

Tabela 'Vodomeri'
VodomerID
StatusVodomeraID (ovo bi bilo polje gde bi se naznacilo da li je vodomer u upotrebi ili ne kao i da li je recimo van f-je
[...]

Tabela 'Ocitavanje' (ili kako vec hocete da je nazovete)
OcitavanjeID
VodomerID
[...]

>>>>>>>>>>>> Bi trebala korekcija ali opet to je lose i treba prepraviti na na sledece:

Tabela 'Korisnici' ili (ili kako vec hocete da je nazovete)
KorisnikID
Naziv
Ulica
Broj
MestoID
ZemljaID
Telefon
Fax
EMail
Napomene
[...]

Tabela 'Vodomeri'
VodomerID
TipVodomeraID
Sifra
MarkaID (recimo dodatna tabela iz koje se prikazuju vec definisane marke vodomer i gde operater bira prvi put kada evidentira vodomer u resurs firme)
[...]

Tabela 'Vodomeri Korisnika'
VKID
KorisnikID
VodomerID
VKStatusID (ovo je opcija koja recimo je pokazivac da li je aktivan ili nije aktivan korisnik vodomera)
Period Ocitavanja
Naselje
Ulica
Datum ugradnje
[...]

Tabela 'Octivanje Vodomera'
OCID
VKID (znaci ID iz tabele 'Vodomeri Korisnika')
Datum i vreme ocitavanja i sva ostala polja koja su vezana za ugovorni deo obaveze a gde je relacija korisnik vs. vodomer
[...]


Svuda gde je [...] su ostala prateca polja.

Imati na umu da korisnik moze da ima 0, 1 i vise vodomera ali i da oni budu na razlicitim adresama te su zbog toga dodata polja u tabeli 'Vodomeri Korisnika' (ulica, naselje...)

Na primer, firma koja ima svoje prodajne objekte i u svakom objektu imaju vodomer i treba da se evidentira potrosnja ali i odradi faktura za svaki.

Toliko za sada... nadam se da ce pomoci.






[ dzaga29 @ 03.03.2019. 15:11 ] @
Ako sam shvatio u ćemu grešim - trebam samo poslagati tablice i povezati ih relacijama. U tablicama mi je dovoljno po jedno polje koje ću nakon završetka svih relacija ispuniti da vidim da li sve funkcionira. Ja u biti robujem podacima koje sam unjeo iz .XML tabela. U biti kada baza bude dobra lako proširim tablice sa poljima koje želim. Kod ispravnih baza neće biti problem kreirati upite, forme i izvješća. Da li je to poanta ???
[ Getsbi @ 03.03.2019. 15:42 ] @
@ dzaga29
Odgovor je: Da.

@ bokinet
Nemoj gledati slike. Pogledaj model. Recimo poslednji: „Vodomjeri Radna2.rar”. Videćeš da 90% onog što si napisao postoji u bazi. Poštujem to što nemaš vremena, ali nemoj onda da komentarišeš i govoriš da DBMS ne valja.
[ dzaga29 @ 03.03.2019. 17:35 ] @
bokinet Vidim da sam zeznuo stvar, ali želja je bila da iz postojećeg programa u firmi inportiram postjeće podatke (.XML datoteke) kako bi mogao kreirati izvješća koja su mi bitna za moj dio posla a to nije naplata i fakturiranje, Iz programa na firmi ne mogu kreirati upite na bazu koji su meni potrebni: Koliko raznih tipova vodomjera imamo, koliko ih je da daljinsko, koje trebamo zamjeniti, koliko po naseljima i po ulicama imamo potrošaća, koliko trošimo vode po svakom naselju, ulici i ostalo strogo tehnička pitanja. Ovo što ti predlažeš je u stvari izrada čitavog programa i ne znam kada tako razradim tabele kako ću uopće ažurirati bazu. Što se tiče očitavanja taj dio sam donekle i rješio ali kod djela koji sam napravio oko izmjene vodomjera nevalja jer program bi trebao kada se upiše broj novog vodomjera kod kupca i u tablici vodomjera napraviti izmjenu itd. Ovo je samo dokaz da je tvoj predlog ispravan ...
Citat:

Imati na umu da korisnik moze da ima 0, 1 i vise vodomera ali i da oni budu na razlicitim adresama te su zbog toga dodata polja u tabeli 'Vodomeri Korisnika' (ulica, naselje...)

Taj dio sam napravio u tablicama Kupci i vodomjeri gdje je kod kupca adresa stanovanja a kod vodomjera adresa lokacije vodomjera
Pokušati ću ponovno, ali bojim se daje za mene to prevelik pothvat...
Svi unosi novog kupca i vodomjera unašaju se preko MSCentra u firmi

[Ovu poruku je menjao dzaga29 dana 03.03.2019. u 19:08 GMT+1]
[ bokinet @ 03.03.2019. 18:07 ] @
@Getsbi
ok.

@dzaga29

1. trebalo bi da promenite nacin razmisanja i da ne prilagodjavate program ulaznim podacim iz citaca (sa uredjaja) vec da napravite da se ocitani podaci mogu ubaciti u taj postojeci program i bazu tj. strukturu koju treba da popunjavate recimo sutra i rucno mimo citaca na primer a koji ce posle da budu sintetika podataka na osnovu kojih se radi analitika koja moze biti obracuni potrosnje, zaduzenja a kada to imate imate i mogucnost da napravite i fakturisanje i zaduzenja sa tkz. analitickom karticom po kupcu, vodomeru i sl.;

2. U tabeli 'Kupci-Vodomjer' fali PK polje tj. jedinstveni broj relacije izmedju vodomera i korisnika

3. Tabelu 'Ocitanja' treba vezati na tabelu 'Kupci-Vodomjer' preko PK a ne kao sto je sada iz razloga sto vodomer moze da promeni vlasnika i lokaciju a samim time se onda gubi info. oko prethodnog vlasnika (ili da se ponovo unosi novi zapis za vodomer sa istim generalijama sto je...) -> Vidim da ste nesto slicno vec uradili za tabelu 'Izmjene vodomjera' - s' druge strane posto nisam upucen u materiju oko rada vodovoda nema ni znanja cemu sluze tabele 'izmjene_vodomjera' i 'izmjene_detalji'.

Predlog:

Korak 1: normalizovati dbms mimo XML sa tacnom specifikacijom cele aplikacija koja obradjuje podatke - sintetika podataka na osnovu koje se treba kasnije vuci analitika;

Korak 2: napraviti identicne tabele za svaki XML s' tim da se doda i dodatno polje iz kog file-a je uzeta vrednost tj. izvor kao i recimo datum uvoza ili datum tog zapisa. Moguce je to opet dodatno rasiriti sa headerom i sadrzajem kao 2 tabele po xml file ali opet stvar precepcije, organizacije i resenja kome se tezi. Ove baze sutra mogu da budu cak i eksterne baze koje se linkuju kroz kod i sl.;

Korak 3: napraviti kod koji ce da vrsi sinhronizovano prebacivanje podataka iz XML tabela u tabele aplikacije sa logikom i proverom validnosti i ispravnosti podataka iz xml tabela koje se uvoze;

i tako redom...

Posto @Getsbi ima vise vremena i tehnickih mogucnosti necu da vam se mesam, posto mi je vec skrenuo paznju da to ne cinim.

Opet, nadam se iznalazenju f-ionalnog resenja i da @Getsbi nece da mi zameri na ovom brzinskom postu na ovu temu.
[ Getsbi @ 03.03.2019. 18:17 ] @
Ne zameram ništa. Samo pre nego pustiš post, pogledaj poslednje stanje baze. Tako ćemo biti efikasniji.
[ bokinet @ 03.03.2019. 18:22 ] @
@Getsbi
da li je na slici koju sam prilozio na mom poslednjem postu aktuelna ili ne struktura, posto sam istu napravio iz baze koja je data u file-u sa Post Link od strane @dzaga29?
[ Getsbi @ 03.03.2019. 18:30 ] @
@ bokinet
Rekao bih da je to, upravo to. Neka Davor proveri još jednom.

Moja ograničenja su sledeća:
Pokušavam da mu pomognem na osnovu njegovih saznanja o poslovnom problemu.
Možda to nije idealno ali je najbolje što mogu. Tehnologiju i proces ne poznajem dovoljno.Bar ne koliko ih Davor poznaje. Iskustvo u modelovanju je ono što mogu da mu ponudim.

@ dzaga29
Pre nego pređeš na sledeći nivo razvoja aplikacije (objekti koji se naslanjaju na tabele) moraš biti siguran da je baza zadovoljavajuća sa tvog aspekta, kako si rekao tehničkog, a ne finansijskog.
Ja nemam iskustva sa .xml datotekama, jedino znam da uradim inport-export koji je ponuđen na kartici External data, a to i ti znaš. Mogu donekle pomoći oko upita i VBA kôdiranja mimo funkcije inportovanja pomenutih datoteka.

P.S. Idemo dalje sa postavljanjem pitanja.
[ dzaga29 @ 03.03.2019. 19:33 ] @
Citat:
@ bokinet
Rekao bih da je to, upravo to. Neka Davor proveri još jednom.

Moja ograničenja su sledeća:
Pokušavam da mu pomognem na osnovu njegovih saznanja o poslovnom problemu.
Možda to nije idealno ali je najbolje što mogu. Tehnologiju i proces ne poznajem dovoljno.Bar ne koliko ih Davor poznaje. Iskustvo u modelovanju je ono što mogu da mu ponudim.

@ dzaga29
Pre nego pređeš na sledeći nivo razvoja aplikacije (objekti koji se naslanjaju na tabele) moraš biti siguran da je baza zadovoljavajuća sa tvog aspekta, kako si rekao tehničkog, a ne finansijskog.
Ja nemam iskustva sa .xml datotekama, jedino znam da uradim inport-export koji je ponuđen na kartici External data, a to i ti znaš. Mogu donekle pomoći oko upita i VBA kôdiranja mimo funkcije inportovanja pomenutih datoteka.

P.S. Idemo dalje sa postavljanjem pitanja.

Dečki baza koja je sada već mi rješava 95% mojih želja i prohtjeva, jedino za izmjene vodomjera trebam tablicu koju u krajnjoj liniji mogu povezati sa kupcem pa da odvojeno pokrenem evidenciju sa izmjenama, one se obavljaju rijetko, pa kada se promjeni vodomjer mogu izmjenu unjeti ručno kroz tablicu vodomjera, jedino da se za stari vodomjer spreme podaci( broj vodomjera, datum izmjene i stanje vodomjera na dan izmjene)
Ja nisam ništa radio nakon što sam postavio zadnju bazu - Relacija u privitku...
[ Getsbi @ 03.03.2019. 21:31 ] @
Ako sam dobro razumeo tvoj zahtev, onda ti to već imaš. Trebaće ti forma u kojoj ćeš da započneš unos izmene u tabeli „Izmjene vodomera” sa popunjavanjem podređene tabele „Izmjene_Detalji”. Kada se to popuni,pritisneš dugme na formi i proknjižiš, a VBA kôd ispod dugmeta treba da promeni status starom vodomeru i doda novi zapis u tabeli „Vodomjeri”. Na taj način čuvaš istorijat dešavanja i uvek možeš da upitima izvadiš aktuelno ili neko istorijsko stanje. Da li to ima smisla?
[ dzaga29 @ 03.03.2019. 22:26 ] @
Ja sam malo testirao bazu sa unosom svih podataka i to rai ko ludo; Jedino sam kod tablica Obilasci-Redosljed i Obilasci malo zeznuo jer sam mjenjao po strukturi tablica ( izbacivao sam neka polja - Putanju i IsGPRS jer mi to ne treba tako da ću ta polja izbaciti i iz očitanja) tako da ih ne mogu učitati. Kada i to rješim onda ću sve podatke exportirati;i u praznoj bazi rješiti izmjene vodomjera na način kako si naveo.
Sa ovom aplikacijom mogu se neograničeno služiti i uz korištenje vidjet ću što smo zeznuli. Kada to sve obavim imat ću remena napraviti pravi program kako je predložio bokinet!!!
Uz post ću ti priložiti bazu koju sam popunio sa prilogom Excelovih datoteka Obilasci-Redosljed i Obilasci koje nisam mogao učitati zbog prethodno navedenog. Pogledaj ako ti se da kako da i to učitam ali u postojeću bazu pa da pospremim podatke i krenem rješavati Izmjene vodomjera!
Pozdrav
P.S. Pokreni upit za očitavanja i bez tih tabela radi!
[ bokinet @ 03.03.2019. 22:35 ] @
Vidim da napredujete. Svaka cast!
Sto se tice priloga i sl. ne bi bilo lose da se priloze poslednje varijante same baze u MS Access kao i xml file-ovi i naravno kako sta, cisto eto zbog kompletiranja cele price za ovu temu - mozda sutra nekome bude koristilo i bilo od pomoci.
U ime tih novih i koje to bude interesovalo se zahvaljujem.
Ako bude bilo potrebe i ja budem imao mogucnosti i vremena, pisem... takodje slobodno mozete me kontaktirati i na PP.
[ Getsbi @ 04.03.2019. 06:53 ] @
U tabeli „Obilasci-Redosljed.xlsx” imaš duple vodomere na različitim lokacijama.
Accessovu tabelu sam napunio tako što sam pri importovanju dozvolio da Access dodeli Autonumber za PK. Sortiraj kolonu Broj_vodomjera od A-Z i reši se duplikata.
[ dzaga29 @ 04.03.2019. 09:32 ] @
Da li je moguće to izvesti sa Upitom kao kada si napravio da pronađe duple za Kupci_Vodomjeri. Ako idem ručno bojim se da ću nešto previdjeti.
Kada se ovako napunjena baza isfiltrira da li bi bilo pametno Exportirati u Excel ili .XML podatke za kasniji Import ako ću morati sve podatke brisati za daljnju doradu ralacija - Izmjene vodomjera i drugo.
Podaci su duplirani upravo prilikom zamjena vodomjera a nije bilo ažurirano...
[ Getsbi @ 04.03.2019. 10:19 ] @
1. Da, moguće je.
2. Bilo bi poželjno. Napravi i .xlsx i .xml.


P.S.
Malo sam detaljnije pogledao tabelu Obilasci-Redosljed. Kako ćeš odlučiti ko ima ispravan broj?




[Ovu poruku je menjao Getsbi dana 04.03.2019. u 12:07 GMT+1]
[ dzaga29 @ 04.03.2019. 13:45 ] @
Što si mjenjao poruku i maknuo funkcije koje moram koristiti u upitu? Sada se kilavim a neide mi.
Koji su pravi podaci morat ću provjeriti u firmi.

[Ovu poruku je menjao dzaga29 dana 04.03.2019. u 14:55 GMT+1]
[ Getsbi @ 04.03.2019. 14:02 ] @
Shvatio sam da neće ići sa DISTINCT jer prokazuje samo tu kolonu na koju se stavi kriterijum i morao bi da popunjavaš nazive.
Inače DISTINCT i Make Table query bi radilo radnju.
[ Getsbi @ 04.03.2019. 14:58 ] @
Evo rešio sam u par koraka.
1. Napravio sam kopiju tabele Obilasci-Redosljed
2. Potom upit Qury1
3. Od prethodnog upita i tabele napravio sam Query2
4. Od Query2 napravo sam Append query (Query3)
5. Napunio sam kopiju tabele Append queryem

Sad imaš u toj kopiji 3099 zapisa sa jedinstvenim brojevima vodomera i sve ostale podatke kao što su naziv, redosled itd.
[ dzaga29 @ 04.03.2019. 16:03 ] @
Uvukao sam podatke ali kada hoču povezati Očitanje i Obilasci-Redosljed sa Brojem_vodomjera neda mi stvoriti odnos 1 na više kako je bilo jučer???


[ Getsbi @ 04.03.2019. 16:42 ] @
U Accessovoj poruci tačno piše. Biće da su zapisi iz različitih očitavanja. Ja sam ti samo rešio duplikate. Ako hoćeš da vidiš kojih vodomera nema u tabeli „Ocitanja” a ima u tabeli „Copy Of Obilasci-Redosljed”, pokreni Query Wizard i odaberi „Find Unmatched query”.
Ili možda treba vratiti podatke.
[ Getsbi @ 04.03.2019. 17:22 ] @
Moram priznati da mi je nelogična ta veza koju si postavio na slici Relacije-prije.jpg.
[ dzaga29 @ 04.03.2019. 18:29 ] @
Pa vjerojatno sam pobkao lončić; moje razmišljanje je išlo od tablice Obilasci sa Tablicom Obilasci-Redosljed gdje za određeni obilazak ima više vodomjera, a onda na tablicu Očitanje gdja za sveki vodomjer iz obilaska treba očitanje; dakle veza treba biti jedan na jedan. Očito sam pogrešio. Što se tiče tablice očitanja ona je puna grešaka, ali trebala bi zadovoljiti sve putanje iz relacija. Sutra ću zamoliti kolegu sa posla da mi pošalje novi backup baze koji bi trebao biti točniji. Svi kupci sa običnim Ikomovim vodomjerima se ručno očitavaju i MSCentru nisu ažurirani. U međuvremenu je sigurno barem za 100 kupaca izvršena zamjena vodomjera.
[ dzaga29 @ 05.03.2019. 20:24 ] @
Dobio sam danas iz firme novi backup baze i imao sam problem sa punjenjem tablica za Vodomjere, Obilasci-Redosljed i Očitanja. Te tri tablice sam morao ubaciti ručno i to kolonu po kolonu. Kada sam napunio bazu sve radi kako treba i ja sam prezadovoljan sa podacima koje dobijem za analizu i izrade upita. Sada se mogu posvetiti i drugom djelu a to je povezati i razraditi dio za izmjene vodomjera i dio za kreiranje obilazaka.
Probleme oko unosa podataka ću vjerojatno imati dok se kompletna baza ne pročisti od duplih i krivih unosa; već je današnji backup imao manje od stotinjak krivih unosa a nakon slijedećeg očitanja na firmi ponovno ću nanovo napuniti bazu. Kada se sve jednom sredi onda za očitanja ubacujem datoteku od dva sloga; broj vodomjera i očitanje...



[ dzaga29 @ 07.03.2019. 08:52 ] @
Imam problem sa izračunavanjem potrošnje u Izvještaju Očitavanja. Izvještaj se bazira na Upitu u kojem bez problema izračunam potrošnju; ali normalno to izračunato polje se ne vidi u Izvještaju. Ubacio sam text polje i u njega upisao =IIf([Prethodna_vrijednost]="" Or [Prethodna_vrijednost]=0;[Vrijednost];[Vrijednost]-[Prethodna_vrijednost]) međutim kada pokrenem report on me upita za unos parametra "Vrijednost". Ako odustanem od unosa Izvještaj se ne pokrene, a ako ga pokrenem bez unosa na izvještaju se ne izračuna potrošnja, kada unesem neki broj tada se pokrene ali na svim stavkama umanji ili uveća za moj unos.
Vrijednost = zadnje očitanje
Prethodna_vrijednost = prošlo očitanje
Da li netko zna u čemu je problem !!!
[ Getsbi @ 07.03.2019. 09:27 ] @
Predpostavljam da je sledeća situacija.
U jednom upitu može biti više izračunatih polja (tipa Expression), ali ne može u istom upitu da se koristi prethodno izračunato polje (tipa Expression) kao element za sledeće izračuato polje. Razlog je što još uvek nije izračunato. Zato se rezultat ovakvog upita može koristiti jedino kao izvor za sledeći upit.
[ dzaga29 @ 07.03.2019. 10:27 ] @
Rješio sam problem tako što sam odabrao formu Očitanja i pokrenuo čarobnjak za Reporte. Kada je čarobnjak završio u reportu je bilo i polje Potrošnja kao jedino Expresion polje u formi koju sam kreirao iz upita. Kada sam spremio ovaj Report i ponovo ga pokrenuo kao izvor zapisa mio je pokazao Upit iz kojeg sam kreirao formu ali mi je i ostalo polje Potrošnja za koje uopće ne trebam raditi izračun!!!

[ Getsbi @ 07.03.2019. 10:38 ] @
Pa ukloni ga ili ga učini nevidljivim.
[ dzaga29 @ 07.03.2019. 11:01 ] @
Ovo ovako mi u potpunosti odgovara - imam potrošnju koja se točno automatski računa, ali imam jedan drugi problem; želio bi napraviti upit za listanje potrošaća po pojedinim naseljima i po pojedinim ulicama. To mi nije problem ako napišem na upitu pod kriterij [Upišite za koje mjesto želite?], ali dešava se problem ako korisnik ne upiše ispravno ime (Ima 50_tak naselja i oko 1000 ulica. Da li se to može izvesti pokretanjem neke forme sa dva komboboxa i komandom za odabir !!!
[ Getsbi @ 07.03.2019. 12:38 ] @
Može.
Top tema "Često postavljana pitanja" sadrži odgovore na tvoje pitanje.
13) Povezivanje dva Combo box-a
http://www.elitesecurity.org/t302710-0#1802919
http://www.elitesecurity.org/t355891-0#2207884
Ako ne pomogne ukucaj u polje za pretragu reči Combo box i pregledaj sve teme. Ima još primera.
[ dzaga29 @ 10.03.2019. 21:06 ] @
Ja sam bazu složio i bez problema ju punim sa podacima. Sada dorađujem okruženje (Forme, reporte i sl.) pa sam želio postaviti Pomoc.chm datoteku u aplikaciju. To isto sam bio napravio prije par godina i sve je funkcioniralo, ali sada neće ???
Upisao sam kod u pozivanju forme
Code:
Option Compare Database
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

a na komandno dugme
Code:
Private Sub cmdPomoc_Click()
    ShellExecute 0, "open", "hh.exe", "Pomoc.chm", "1000", 1
End Sub

Međutim jednostavno neće, da li netko zna u čemu griješim??? Prije sam imao Office 32x, a sada 64x; dali treba deklarirati drugi library.
Sama datoteka Pomoc.chm radi bez problema.

[ Getsbi @ 10.03.2019. 22:11 ] @
Probaj ovako:

Code:
Private Sub Command0_Click()
   Dim stAppName As String
   Dim Putanja As String
   Putanja = CurrentProject.Path & "\"
   stAppName = "C:\Windows\hh.exe " & Putanja & "Licenca.chm"
   Call Shell(stAppName, 1)
End Sub


Ne treba ti biblioteka. Fajl tipa .chm treba da je u folderu gde je i .accdb
[ dzaga29 @ 10.03.2019. 23:05 ] @
Getsbi, zahvaljujem - Radi...
[ dzaga29 @ 11.03.2019. 15:53 ] @
Nisam zadovoljan sa djelom baze koji prikazuje Očitanja vodomjera. Ta očitanja su sva sadržana u samo jednoj tablici koju sam uvukao iz programa za daljinsko koje imamo u firmi tako da u tablici očitanja čak niti nemam podatke za sve vodomjere. Ovaj dio mi zadaje problem obzirom da kod svakog očitanja moram pregaziti kompletnu tablicu umjesto da unesem samo polja koja su mi bitna za očitanje - Broj vodomjera i datum očitanja. Čak i sam postupak očitanja koji izvodimo u firmi razlikuje se u vremenskim periodima (Poduzeća i kućne savjete očitavamo mjesećno, a domaćinstva kvartalno). Na koji način da rješim taj problem, a da program ovisno od očitanja ažurira podatke po ispravnim poljima i spremi arhivu očitanja?
Relacija baze u prilogu...
[ Getsbi @ 11.03.2019. 16:28 ] @
Predlog je recimo da napraviš privremenu tabelu „TerenskoOcitanje” sa svim kolonama koje ti trebaju. Na pošetku je ta tabela prazna i nju ne povezuješ relacijama. Tu uneseš ili inportuješ samo one vodomere koje si očitao juče. Napraviš Update query kojim ćeš da ažuriraš tabelu „Ocitanja”. Nakon ažuriranja pomoću ovog query-ja, isprazniš privremenu tabelu i čekaš sledeće terensko čitanje.
[ dzaga29 @ 11.03.2019. 18:14 ] @
Problem; Pokušavam preljepiti podatke iz tablice Očitanje1 u tablicu Očitanje. Tablica očitanje ima 3800 Rednih_brojeva a tablica Očitanje1 2000 Rednih brojeva. Da li je moguće prebaciti tih cca 2000 zapisa da se povežu po Rednim_brojevima. Pokušao sam sa Update queryem ali mi poručuje grešku???
[ Getsbi @ 11.03.2019. 19:17 ] @
Jako je teško raditi sa slikama. Probaj da napraviš fajl .accdb sa te dve tabele i upitom koji si započeo. Spakuj to sa .rar ili .zip i okači. Tako ćeš imati veće šanse da neko pogleda, reši i odgovori ti.
[ dzaga29 @ 11.03.2019. 19:39 ] @
Kako sam rekao - Želim sva polja iz tablice Arhiva prebaciti u tablicu Očitanje, a naknadno obrisati tablicu Arhiva
[ Getsbi @ 11.03.2019. 20:25 ] @
Dodao sam ti dva upita. Ažurirao „Očitanje” i ispraznio „Arhiva” .

Savet. Nazive tabela kao i nazive kolona radije piši bez naših znakova. Zna kasnije da pravi problem kod VBA kodiranja.


Mada ovaj drugi i nije neophodan. Otvoriš tabelu selektuješ sve zapise tako što klikneš tamo gde se sustiču redovi i kolone, te stisneš taster Delete.
[ dzaga29 @ 12.03.2019. 08:25 ] @
Samo jedno pitanje; Nadam se da se pomoću Upita dodavanja mogu dodavati novi zapisi u tablicu, npr. sada imam 3828 vodomjera i 3643 potrošaća, a prethodna ideja mi je bila pregaziti kompletno sve iz MCentra. Obzirom da upisujem i neke podatke kojih nema u MCentru to moram pitati da ne izgubim podatke. Dakle baza bi bila u potpunosti neovisna od MCentra a ja bi samo punio očitanja. Na taj način kada podjelim bazu mogu je instalirati po PC-ima tako da svi mogu imati uvid u podatke. Nadam se da sam u pravu, jer na taj način mogu još i proširiti bazu sa djelovima kojih nema u MCentru (npr. evidencija o baždarenjima i sl.)
[ Getsbi @ 12.03.2019. 08:49 ] @
Naravno da može. Naziv upita je Append query na kartici Query Type. Koristi se naredba INSERT INTO. Pogledaj u Helpu opštu sintaksu za tu naredbu.
[ dzaga29 @ 12.03.2019. 14:40 ] @
Citat:
Savet. Nazive tabela kao i nazive kolona radije piši bez naših znakova. Zna kasnije da pravi problem kod VBA kodiranja.
Rado prihvačam ovakav savjet, ali moram odmah krenuti jer imam čudo toga za ispraviti i testirati po svim levelima - od tablica, upita pa do Reporta. Pretpostavljam da zbog VBA koda nije pametno pisati nazive iz više riječi bez razmaka, a i same nazive ću skratiti ionako u opisu mogu napisati da budu jasne.
Kada iz jedne forme prelazim u drugu, a da sam prije na njoj koristio filter onda mi je otvara izfiltriranu, kako osim ručno izbrisati filter - probao sam kroz makro ali nakon par pokušaja poruči mi da ne može pokrenuti filter? Možda u VBA kodu na Sub Form_Load()
[ Getsbi @ 12.03.2019. 15:45 ] @
Ovo nisam koristio pa ne mogu sa sigurnošću da tvrdim. Da si okačio mali primer mogao bih i da isprobam. Ovako isprobaj ti ovu ideju.
Na događaj Form_Open probaj osobinu Filter On Load da postaviš na False. Ovako nekako „Me.Filter On Load = False”.
[ dzaga29 @ 12.03.2019. 16:36 ] @
Još jednostavnije, ali treba čitati a ne brzati ko ja!
[ dzaga29 @ 12.03.2019. 19:51 ] @
Citat:
Rado prihvačam ovakav savjet, ali moram odmah krenuti jer imam čudo toga za ispraviti i testirati po svim levelima - od tablica, upita pa do Reporta.
Dobro da sam si spremio kopiju; sav sam se spetljao i pogubio, a ništa ne radi kako treba - skoro svi Upiti se otvaraju samo u SQL prikazu a tu sam onda kuku lele... Očito sam to trebao napraviti na vrijeme
[ dzaga29 @ 13.03.2019. 12:08 ] @
Ipak sam uspio, ali sa izradom novih upita. Želio bi pomoću comboboxa da izaberem upit za prikaz. Napravio sam tablicu u koju sam spremio Naziv Reporta, Opis za prikaz i ID da mi posloži po željenom redu- Kko pomoću VBA koda pokrenuti željeni report. Vjerojatno na Sub cboReports_AfterUpdate moram upisati kod kada na ComboBoxu odredim izvor od kuda da povlaći podatke???
[ Getsbi @ 13.03.2019. 13:53 ] @
Odaberi događaj pa upiši: DoCmd.OpenReport "NazivReporta".
[ dzaga29 @ 13.03.2019. 14:40 ] @
Ja želim da se on odabere iz tabele i onda pokrene? Kako da se pokrene odabrani report?
[ SLOJ.1973 @ 13.03.2019. 17:28 ] @
Možda ovako:
Code:
Private Sub Combo2_AfterUpdate() ' ovde upises naziv tvog combobox-a
Dim strReportName As String

Select Case Me.Combo2 ' ovde upises naziv tvog combobox-a
 Case 1 'ovde umesto 1 pises Bound kolonu za tvoj combobox,verovatno ID iz tabele,koji stoji ispred naziva reporta
strReportName = "Vodomjeri po Potrošaćima" ' ovde upises tacan naziv reporta,onako kako stoji u samoj bazi
 Case 2 'isto kao i u prvom Case
strReportName = "Pregled Sensusovih vodomjera po Potrošaćima" ' ovde upises tacan naziv reporta,onako kako stoji u samoj bazi
 Case 3 'isto kao i u prvom Case
strReportName = "Popis ugradjenih Sensus vodomjera bez modula" '  ovde upises tacan naziv reporta,onako kako stoji u samoj bazi
'... i tako redom za sve izvestaje Case 4,Case 5 ...
End Select
DoCmd.OpenReport strReportName, acViewPreview
End Sub

Pozdrav.
[ dzaga29 @ 13.03.2019. 19:07 ] @
Code:
Private Sub cboReports_AfterUpdate()
    
Dim strReportName As String

strReportName = Me!cboReports

Select Case Me.cboReports
    Case 1
        strReportName = "Očitanje KS"    
End Select
    DoCmd.OpenReport reportname:=strReportName, view:=acPreview    
End Sub

Sa gornjim kodom sam uspio rješiti i to tako da iz ComboBoxa bez obzira koliko ima reporta sa samo jednim Case mogu birati sve. U tablici sam napisao točne nazive Reporta i odredio strReportName = Me!cboReports
[ dzaga29 @ 14.03.2019. 09:32 ] @
Dva problema???
Prvi - Kada nekom kupcu pridružujem vodomjer mogu mu pridružiti bilo koji koji je već negdje ugrađen što nije dobro. Kako napraviti kontrolu. Princip je takav da jedan vodomjer može imati samo jednog kupca, a jedan kupac može imati više vodomjera na raznim lokacijama. Trebala bi kontrola, ako odaberem neki vodomjer koji je već ugrađen da me opomene da je već pridružen nekom kupcu.
Drugi - Kod izmjena vodomjera sve bi se trebalo bazirati na kupcu; ako nemamo kupca sa postojećim vodomjerom normalno ne možemo ga niti zamjeniti.
Kada odaberem kupca za izmjenu u tbl-Izmjene bi uz kupca morao odmah dobiti i njemu pridruženi vodomjer koji je u tbl.Detalji izmjene nazvan stari vodomjer. Kada upišem sve podatke u tbl.Detalji izmjene i pomoću upita to spremim trebalo bi za tog kupca u tablici vodomjeri promjeniti i broj vodomjera jer stari mi više osim detalja iz tbl.Detalji izmjene neće trebati, a obzirom da se radi o puno zapisa glupo je da trpam bazu.
Prilazem bazu u prilogu, pa ako netko uspije unaprijed zahvalan!
[ Getsbi @ 14.03.2019. 15:23 ] @
Da bi rešio oba pitanja, prvo bi morao da popuniš u tabeli „Vodomjeri” kolonu „Status_vodomjera”. Prethodno ažuriraj tabelu „Status_vodomjera” i budi siguran da u njoj imaš sve vrste statusa koji ti trebaju, a ne samo 4 postojeća. Tek posle toga možeš da rzmišljaš o upitu ili VBA kôdu koji će da ti reši problem.

If Status <> 1 Then
Pridruži vodomer
Izmeni status u tabeli Vodomeri
End if
[ dzaga29 @ 14.03.2019. 17:06 ] @
Ako sam dobro razumio u tbl.Vodomjeri bi za polje Status morao napisati da je potrebno, po difoltu npr. 0 (nepridruženo kupcu ili na skladištu), a za svih 3830 komada kojih sada imam u bazi prvo export u Excel i popuniti kolonu Status pa onda Import nazad u Access. Jedino mi nije jasno zašto kasnije ne mogu proširivati tbl.Status i na isti način (Export-Import) Ažurirati tbl.Vodomjeri.
Da li sam razumio?
[ Getsbi @ 14.03.2019. 18:11 ] @
Tabela „Vodomjeri” je sa jedinstvenim i neponovljivim brojevima vodomera. Za svaki od njih bi morao da znaš trenutno stanje. Nisam siguran šta znači status aktivn. Ako to znači da je već dodeljen nekom kupcu, onda OK. Trebala bi ti forma kojom ćeš da puniš tabelu „Kupci_Vodomjeri” i kad popuniš „Sifra_kupca” i „Broj_vodomjera”, onda u tabeli „Vodomjeri” tom zapisu sa tim brojem vodomera promeniš status u aktivan ili dodeljen . Mislim da je to vrlo bitno kako bi imao dobro početno stanja za kasnije izmene koje spominješ. U tabeli „Izmene_vodomjera” bi onda imao nešto poput istorijata.

P.S. Tabela Status je roditeljska tabela (šifarnik) i trebalo bi da imaš neki konačan broj opcija za status. Ne kažem da se ne može dopunjavati ali bi svaki vodomer trebalo da ima status u tabeli Vodomeri, što u primeru nije slučaj.
[ dzaga29 @ 14.03.2019. 19:01 ] @
Pa mislim da je to srž problema !!! Princip je takav da se prvo unesu podaci za vodomjer i za kupca, a onda se oni spoje preko tbl.Kupci_Vodomjeri, a sad pojašnjenje pojmova.
Aktivan znači da je dodjeljen nekom kupcu. Ja trenutno u bazi nemam niti jedan vodomjer "na skladištu ili nedodjeljen". Sve podatke o kupcima i vodomjerima imam povućene iz MCentra (XML datoteke), ali kada jednom povućem sve podatke cca. još 10.000 komada imat ću kompletnu bazu.
Prilikom nabave novih vodomjere za skladište preko dlanovnika (čitača) ja automatski uvućem podatke o vodomjeru (broj, radio adresa) i spremim ih u tbl.Vodomjeri. Kada se pojavi novi kupac i dobi svoje podatke onda mu mogu dodjeliti vodomjer i spojiti ih preko „Kupci_Vodomjeri”
Citat:
Trebala bi ti forma kojom ćeš da puniš tabelu „Kupci_Vodomjeri”
. Ta forma bi trebala biti pregledna a ne tablica sa dva stupca jer kada imam kupca a na raspolaganju 200 - 300 vodomjera onda nastaje problem, zato sam i napisao ovo dolje.
Citat:
Prvi - Kada nekom kupcu pridružujem vodomjer mogu mu pridružiti bilo koji koji je već negdje ugrađen što nije dobro. Kako napraviti kontrolu. Princip je takav da jedan vodomjer može imati samo jednog kupca, a jedan kupac može imati više vodomjera na raznim lokacijama. Trebala bi kontrola, ako odaberem neki vodomjer koji je već ugrađen da me opomene da je već pridružen nekom kupcu.
U MCentru to je izvedeno tako da na formi kupaca ima komanda do mjerila i onda se otvori padajuća lista sa vodomjerima iz koje izaberem željeni. Mislim da bi bilo najbolje to odraditi na taj način, ali kada bi na listi bili samo nedodjeljeni vodomjeri, jer u MCentru su svi pa je opet gužva.
U prošlom postu sam prikvačio tablice sa samo 2-3 zapisa da se vide problemi...
[ dzaga29 @ 15.03.2019. 23:26 ] @
Citat:
Tabela „Vodomjeri” je sa jedinstvenim i neponovljivim brojevima vodomera. Za svaki od njih bi morao da znaš trenutno stanje. Nisam siguran šta znači status aktivn. Ako to znači da je već dodeljen nekom kupcu, onda OK. Trebala bi ti forma kojom ćeš da puniš tabelu „Kupci_Vodomjeri” i kad popuniš „Sifra_kupca” i „Broj_vodomjera”, onda u tabeli „Vodomjeri” tom zapisu sa tim brojem vodomera promeniš status u aktivan ili dodeljen . Mislim da je to vrlo bitno kako bi imao dobro početno stanja za kasnije izmene koje spominješ. U tabeli „Izmene_vodomjera” bi onda imao nešto poput istorijata.
Problem na problem, ali očigledno da bi želio sve odjedanputa. U prilogu šaljem bazu sa svim djelovima, jedino sam izbriso podatke (samo par kupaca i vodomjera za testiranje). Za početak osim ručnog spajanja kupca i vodomjera ne znam napraviti formu za pridruživanje (tbl. Kupci_Vodomjeri). Želio sam da preko forme kada odaberem Kupca iz ComboBoxa na formi dobijem popis vodomjera koji nisu već nekom dodjeljeni (Status_vodomjera=0), i kada odaberem željenu kombinaciju da ju upiše u tbl. Kupci_Vodomjeri, a u tbl. Vodomjeri da za taj broj vodomjera polje Status_vodomjera promjeni iz "0" u "1".
U tbl. Vodomjeri za polje Status_vodomjera treba po difoltu staviti 0 i da je to polje obavezno kod unosa novih vodomjera. Napravio sam upit i dobijem popis Vodomjera koji su nedodjeljeni, ali već dva dana pokušavam i neide. Da li možda sa dvije tablice Vodomjera gdje bi nakon dodjele iz jedne prebacilo u glavnu, a iz prve obrisalo kada dobije vrijednost za status =0 ???
Napominjem ono što je osnovno: Princip je takav da jedan vodomjer može imati samo jednog kupca, a jedan kupac može imati više vodomjera na raznim lokacijama.
[ Getsbi @ 16.03.2019. 09:02 ] @
Mislim da tako nije bilo na početku. Ali ako jedan vodomer ne dele više kupaca nego je to kućni savet, pa im potrošnju razbijate na ravne delove ili po broju članova, onda ukuni vezu više prema više i izbaci tabelu Kupci_Vodomjeri. Samo u tabelu Vodomjeri prenesi šifru kupca i poveži. Sad će ti forma za unos biti jednostavnija.
[ dzaga29 @ 16.03.2019. 11:43 ] @
Nesmijem izbaciti tbl. Kupci_Vodomjeri iz drugih razloga mi treba odnos više na više. Napravio sam formu za Pridruživanje vodomjera i kupca, ali imam problem sa kodom koji bi trebao raditi slijedeće; Kada pritisnem gumb da u novom redu u tablici Kupci_Vodomjeri zapiše zapis i da pređe u tbl. Vodomjeri za taj broj vodomjera promjeni status iz 0 u 1. Makro koji sam upisao stalno mi po istom redu ljepi podatke - u kombo Vodomjeri sam uspio preko upita napraviti da mi puni samo Nedodjeljene vodomjere tj. sa Statusom 0.
[ dzaga29 @ 17.03.2019. 10:37 ] @
Treba mi VBA kod - iz jedne forme odaberem zapise u 2 CboBoxa i pritiskom na komandu da se ta dva zapisa spreme u novi red na dno postojeće tablice.
[ Getsbi @ 17.03.2019. 14:56 ] @
Forma tipa Bound-povezana
Ako je ta forma u kojoj biraš combo box-ove, nad tom tabelom koju želiš da ažuriraš, onda ti ne treba VBA kôd. Radi upravo kao tvoja forma „Kupci_Vodomjeri”.

Forma tipa Unbound-nepovezana
Onda bi iza dugmeta trebao VBA kôd za dodavanje novg zapisa, koji bi izgledao ovako. Referenca Me! se koristi ako se VBA kôd obraća formi sa koje je pokrenut.

Code:
Private Sub Command6_Click()
Dim Baza As Database
Dim Sl_Tbl1 As Recordset
   
Set Baza = CurrentDb()
Set Sl_Tbl1 = Baza.OpenRecordset("NazivTabele", dbOpenDynaset)
  With Sl_Tbl1
    AddNew
    ![Kupac] = Me![Kupac]
    ![Vodomjer] = Me![Vodomjer]
    .Update
  End With
MsgBox "Zapis je dodat u tabelu", vbInformation
Set Baza = Nothing
End Sub
[ dzaga29 @ 17.03.2019. 16:22 ] @
Formu sam napravio da je izvor zapisa upravo tablica „Kupci_Vodomjeri” a u cboKupci sam za izvor retka uzeo tbl. Kupci - Sifra_Kupca i Naziv; dok sam na cboVodomjer za za izvor retka uzeo tbl. Vodomjeri - Broj_vodomjera. Kada pokrenem kod koji si mi poslao dobijem poruku greške (slika u prilogu). Da li trebam deklarirati kakvu Funkciju ili što...
Ja već dva dana pokušavam dodati te zapise u tablicu, ali neide...
[ Getsbi @ 17.03.2019. 16:48 ] @
Stavi tačku ispred AddNew, kao ispred .Update. Omašio sam pri kucanju.
[ dzaga29 @ 17.03.2019. 17:36 ] @
Getsbi; molim te da mi na primjeru koji ti šaljem riješiš kod. Ja će izludit jer mi opet šalje pogrešku...
[ Getsbi @ 17.03.2019. 17:54 ] @
Mislio sam da znaš da zameniš polja iz tabele sa onim napisanim na brzinu. Ali nema veze. Nije moglo da se izkompajlira pa sam ti rešio i kalkulator. Tvoj red sam blokirao. Sad radi. Samo pazi na duplikate. Access se nervira ako pokušaš da dodaš duplu vrednost za PK.
[ Getsbi @ 17.03.2019. 19:07 ] @
Evo napravio sam ti formu Form1. Ispraznio sam ti tabelu Kupci_Vodomjeri. Forma mora biti Unbound da bi radila preko VBA kôda.
Prethodnu zanemari.
[ dzaga29 @ 17.03.2019. 19:15 ] @
Molim te da mi pojasniš što si mislio sa
Citat:
Samo pazi na duplikate. Access se nervira ako pokušaš da dodaš duplu vrednost za PK.
Da li je to poruka koju sam dobio (prilog slika) i da li rješava taj problem da se ubaci nekakav kod npr.
Code:
Private Sub Form_Close()
    Me.Refresh
End Sub
ili nešto slično...
Inače kada ugasim poruke o greški i osvježim formu Kupci normalno se zaljepio zapis koji sam povezao...
[ Getsbi @ 17.03.2019. 19:18 ] @
Taj fajl zanemari. Napravio sam ti drugi. Getsbi2. Greška je što vezana forma i dodavanje pomoću VBA ne idu zajedno. Ili ili.
[ dzaga29 @ 17.03.2019. 20:16 ] @
Izvrsno; Getsbi danas si mi pomogao i u hipu rješio ono što ja pokušavam 3 dana bez uspjeha.
Molio bi te za upit koji bi iz tablice Arhiva prekopirao zapise u tablicu Očitanja - ove upite Ažuriranja i Dodavanja ne razumijem; kada god napravim bilo koju kombinaciju i pokrenem upit dobijem poruku da li želim dodati ili ažurirati 0 podataka..
[ Getsbi @ 17.03.2019. 20:47 ] @
Pogledaću sutra, kad stignem.
[ Getsbi @ 18.03.2019. 06:30 ] @
Kod akcionih upita, kakav je Append query (kao i u ostalom) moraš da vodiš računa o vezama koje si uspostavio i o primarnim ključevima. Ako puniš neku tabelu najbolje je da joj otkašiš vezu. Takođe, ako je ta tabela pod primarnim ključem, nećeš moći da je napuniš istim zapisima dva puta. Znači otkači i isprazni tabelu „Ocitanje”. Napiši upit sa sledećom sintaksom:

Code:
INSERT INTO Ocitanje
SELECT *
FROM Arhiva
ORDER BY Broj_Vodomjera;
[ dzaga29 @ 18.03.2019. 07:33 ] @
Zahvaljujem; otvorio sam Folder Help-primjeri i sve pišem i kopiram u taj folder!!! Tako da se ne ponovi ona tvoja konstatacija da sam više znao pred 6 godina kada mi je Zidar pomagao slagati aplikacije.
Sada je još ostalo samo da riješim izmjene vodomjera i očitavanja, a na postojeći dio da malo ubacim pravila provjere valjanosti i dr.
Krećem sa Izmjenama, ali moram nazvati firmu da mi kažu koja polja moraju biti u tablici zbog državne inspekcije za mjeriteljstvo - ovjerni žig i sl. Nadam se da ću kasnije ta polja bez problema moći ubaciti u tbl.Vodomjeri.
Pozdrav!
[ Getsbi @ 18.03.2019. 07:44 ] @
Ovde imaš u temi „Često postavljana pitanja” dve stvari koje bi valjalo da pročitaš, a tiču se onog što smo ovih dana rešavali.

2) Kako pomoću VBA koda popuniti jednu tabelu na osnovu podataka druge:
http://www.elitesecurity.org/t...odateke-iz-jedne-tablice-drugu
Kako pomoću Update query-ja ažurirati jednu tabelu na osnovu podataka druge:
http://www.elitesecurity.org/t...iz-neke-druge-tabele-ili-upita
[ dzaga29 @ 18.03.2019. 13:41 ] @
Evo mene opet! Dobio sam podatke iz firme što moramo voditi za vodomjer a vezano uz inspekcije pa sam dodao novu tabelu i novu formu (Detalji_vodomjer) koju prozivam iz glavne forme za vodomjere (prilog slika). Jedino mi se ne sviđa (NEVALJA) što iz Forme vodomjeri ne prikaže detalje za selektirani vodomjer. Na glavnoj formi je odabran vodomjer br. 00029242, a detalji su od vodomjera br. 56097393. Kako kroz kod rješiti da odabere ispravni prikaz detalja.

[ Getsbi @ 18.03.2019. 14:37 ] @
Nisam siguran da ti treba VBA kôd. Glavno pitanje je koliko zapisa u tabeli Detalji_Vodomjer odgovara jednom zapisu u tabeli Vodomjer.
To iz slike za novu dodatu tabelu ne može da se vidi. Možda je 1:1, a možda je indterminate. Moguće je da treba i nešto drugo. Kad budeš napravio dobru vezu koja odslikava realno stanje onda primeni formu i podformu.
Najbolji način za ovakvu komunikaciju je da praviš novi manji primer u .accdb formatu, postaviš samo neophodan broj tabela formi i ostalih objekata.
Tako ćeš brže naći nekog ko će rado da reši primer.
[ Getsbi @ 18.03.2019. 15:47 ] @
Ako jedaan vodomer ima samo jedan zapis o detaljima, onda je veza 1:1.
U tabeli Detalji_Vodomjer postavi ključ na Broj_vodomjera. Ono IDDetalj ti ne treba.
Spoji te dve tabele vezom One-To-One.
Napravi formu i podformu. Dodao sam primer sa Državama i glavim gradovima. Isprobaj. Ne treba nikakv VBA kôd.
[ dzaga29 @ 20.03.2019. 17:21 ] @
Taj dio oko detalja vodomjera smo riješili. Šaljem novu relaciju - Nadam se završnu!!! Pokušavam riješiti dio oko izmjena vodomjera i bojim se da je on najzahtjevniji barem što se tiče koda. Pokušat ću razjasniti sam princip u praksi.

1. Preko forme za izmjene vodomjera odaberem nekog kupca kojem moram izmjeniti vodomjer
2. Ispunim podatke o izmjeni i i kliknem na komandu Spremi izmjenu, a sad bi kod ili makro trebao izvesti slijedeće;
______________________________________________________________________________________________
- Spremiti podatke u tablice Izmjene_Vodomjera i Detalji_Izmjene (možda nova tablica sa svim zapisima)
- Iz tablice Detalji_Izmjene polje Novi vodomjer preljepiti (ili dodati novi) na mjesto Starog koji je bio u tablici Kupci_Vodomjeri jer sada taj kupac ima novi vodomjer, i taj broj (ili dodati ili preljepiti) u tablicu Vodomjeri. To isto treba napraviti za datum izmjene koji u tbl. Vodomjeri postaje datum ugradnje, to je samo početak koji nameće osnovno pitanje, da li kreirati novu tablicu sa svim podacima iz koje bi onda pojedina polja ljepio po postojećim tablicama ili odmah po glavnim tablicama ispravljao unose. Što to znači na veličinu baze jer i ovako ima mnogo zapisa..
U prilogu nova relacija i forma za unos izmjena.

[ dzaga29 @ 21.03.2019. 07:43 ] @
Ovaj dio vezano za izmjene apsolutno ne funkcionira i ne valja pa treba osmisliti nešto drugo!!!
Formu u kojoj bi odabirom kupca automatski povukao sve podatke koji su vezani uz njega (broj vodomjera, marku i profil) što bi u tablici Izmjena vodomjera odmah bili učitani podaci za stari vodomjer koji se mjenja.. Pomoć
Mislim da bi sada forma Izmjene vodomjera mogla funkcionirati???

[Ovu poruku je menjao dzaga29 dana 21.03.2019. u 09:29 GMT+1]
[ Getsbi @ 21.03.2019. 09:12 ] @
Slažem se. Mada bih ja u tom slučaju izbacio veznu tabelu Kupci_Vodomjeri jer je ova sa izmenama već vezna. Nema potrebe da ažuriraš duplo.
[ dzaga29 @ 21.03.2019. 10:19 ] @
Znači da iz čitavog programa mogu izbaciti tablicu Kupci_Vodomjeri???
Citat:
Getsbi: Slažem se. Mada bih ja u tom slučaju izbacio veznu tabelu Kupci_Vodomjeri jer je ova sa izmenama već vezna. Nema potrebe da ažuriraš duplo.

Da li ću na taj način uništiti veze koje sam na početku stvarao kod povezivanja kupaca i vodomjera (Tbl. Kupci_Vodomjeri) ili ću samo promjeniti izvor podataka na upitima i umjesto Kupci_Vodomjeri pozvat se na ovu tablicu Izmjene vodomjera??
[ Getsbi @ 21.03.2019. 11:40 ] @
Ako ti je to važno i ako imaš podatke u „Kupci_Vodomjeri” ili si kreirao upite na osnovu nje, onda njoj pridruži kolone iz „Detalji_Izmjene”, a obriši „Izmjene_Vodomjeri”. Jedna je sigurno višak.
[ dzaga29 @ 21.03.2019. 14:33 ] @
Getsbi, pomaži jer ću podivljat. Meni je stao mozak i NE MOGU jednostavno složit masku za unos izmjena koji sam bazirao na Upitu Q_Izmjene. Kada odaberem kupca ništa se ne dešava. Šaljem ti praznu bazu (tri zapisa) i sliku na kojoj ti objašnjavam gdje imam problem. Molim te pošalji rješenje, jer od tolikih pokušaja već sam uništio backup i ne znam više na kojoj bazi radim!
[ Getsbi @ 21.03.2019. 15:53 ] @
Treba referenciranje u upitu i obnavljanje zapisa na događaj AfterUpdate Combo box-a. Combo mora da bude vezan za kolonu 2 (Bound Column = 2)
[ dzaga29 @ 21.03.2019. 17:11 ] @
Da li bi bilo pametno ubaciti polje ID Izmjene ??? Za eventualno kasnije reporte i sl.
[ Getsbi @ 21.03.2019. 17:41 ] @
Bi svakako.
[ dzaga29 @ 22.03.2019. 13:25 ] @
Getsbi, ali ja preko forme "Izmjene vodomjera" ne mogu pisati izmjene, jer ako nije već napisana izmjena preko tablica, onda je ova forma ne učitava (prilog sl.1), a ako je izmjena unešena onda je i prikaže (slika 2). Morati ću pokušati napraviti novu formu koja bi mi osim imena kupca za odabir morala za tog kupca povući podatke o njegovom vodomjeru koji mu je pridružen prije dodavanja polja za izmjenu...

[ dzaga29 @ 26.03.2019. 18:33 ] @
Rješio sam problem kroz VBA kod i sada sve radi kako treba;
Code:
Private Sub cmdSpremanje_Click()

Dim Vodomjer As String     'Stari broj vodomjera
Dim Novi As String         'Novi broj vodomjera
Dim NMarka As String       'Nova marka vodomjera
Dim Profil As String       'Novi profil vodomjera
Dim Gotovo As Variant      'Potvrdni okvir za knjiženje
Dim Nulica As String       'Nova ulica
Dim Broj As String         'Novi kučni broj
Dim Nmjesto As String      'Novo naselje
Dim Nkomentar As String    'Novi komentar
Dim SV As Double           'Status vodomjera
' ---------------------------------------------
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rsIzmena As DAO.Recordset
Dim strSQL As String
Dim strSQL_Kupci As String
 
'Prvo bi trebalo napraviti kontrolu da se vidi da li je aktiviran gumb za knjiženje; ako je aktivan izlaz
If Me.Gotovo = True Then   ' Ovo je checkBox aktiviran gumb
   MsgBox "Izmjena je već proknjižena", , "Komunalac d.o.o. Delnice"
   Exit Sub
End If
'Ako nema zapisa izlazi van
If IsNull(IDIzmjene) Or IDIzmjene = "" Or IDIzmjene = 0 Then
     MsgBox "Pokušali ste spremiti Prazan zapis" & vbCrLf & "Molim ispunite sva polja i onda pokrenite Spremanje zapisa.", , "Komunalac d.o.o. Delnice"
     
     Exit Sub
End If
 
'Deklariram što će napisati kao nove podatke
Vodomjer = Broj_vodomjera
Novi = NoviVodomjer
NMarka = MarkaNovog
Profil = ProfilNovog
Nulica = Ulica
Broj = Kc_br
Nmjesto = Naselje
Nkomentar = Komentar
SV = 1      'Stavljamo da je aktivan


 strSQL = "SELECT * FROM Vodomjeri WHERE Broj_vodomjera='" & Vodomjer & "'"
 
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
Select Case rs.RecordCount
       Case 0
               MsgBox "Ne postoji vodomjer sa tim brojem"
       Case 1
          rs.AddNew
          ' Prenos podataka od starog vodomjera
          rs.Fields("Broj_vodomjera") = rs.Fields("Broj_vodomjera")
          rs.Fields("Radio_Adresa") = rs.Fields("Radio_Adresa")
          rs.Fields("Sifra") = rs.Fields("Sifra")
          rs.Fields("Marka") = rs.Fields("Marka")
          rs.Fields("Datum_ugradnje") = rs.Fields("Datum_ugradnje")
          rs.Fields("Promjer") = rs.Fields("Promjer")
          rs.Fields("Ulica") = rs.Fields("Ulica")
          rs.Fields("Kc_br") = rs.Fields("Kc_br")
          rs.Fields("Naselje") = rs.Fields("Naselje")
          rs.Fields("Komentar") = rs.Fields("Komentar")
          rs.Fields("Tip_Modula") = rs.Fields("Tip_Modula")
          rs.Fields("Period_ocitavanja") = rs.Fields("Period_ocitavanja")
          rs.Fields("Medij") = rs.Fields("Medij")
          rs.Fields("Kontrolni_broj") = rs.Fields("Kontrolni_broj")
          rs.Fields("Tip_vodomjera") = rs.Fields("Tip_vodomjera")
          rs.Fields("Status_vodomjera") = rs.Fields("Status_vodomjera")
          rs.Fields("Multiplikator") = rs.Fields("Multiplikator")
          rs.Fields("Dijelitelj") = rs.Fields("Dijelitelj")
          ' Izmjena za novi vodomjer - mjenjamo podatke sa starog
          rs.Fields("Broj_vodomjera") = Novi
          rs.Fields("Radio_Adresa") = Novi
          rs.Fields("Datum_ugradnje") = Now()
          rs.Fields("Marka") = NMarka
          rs.Fields("Promjer") = Profil
          rs.Fields("Ulica") = Nulica
          rs.Fields("Kc_br") = Broj
          rs.Fields("Naselje") = Nmjesto
          rs.Fields("Komentar") = Nkomentar
          rs.Fields("Status_vodomjera") = SV
          rs.Update
                       
         ' Izmjena u tablici Kupci_Vodomjeri
         strSQL_Kupci = "SELECT * FROM Kupci_Vodomjeri WHERE Broj_vodomjera='" & Vodomjer & "' AND Sifra_kupca=" & Sifra_kupca
         Set rsIzmena = db.OpenRecordset(strSQL_Kupci)
             rsIzmena.Edit
             rsIzmena.Fields("Broj_vodomjera") = Novi
             rsIzmena.Update
             Me.Gotovo = True
             MsgBox "Uspješna izmjena"
       Case Is > 1
             MsgBox "imamo povećanje za jedan vodomjer u tablici"
End Select
 
rs.Close
rsIzmena.Close
db.Close
Set rs = Nothing
Set rsIzmena = Nothing
Set db = Nothing
End Sub

Drugo pitanje: Kako pozvati Funkciju za brisanje tablica da se pritiskom na dugme obrišu tablice. Funkciju imam deklariranu u modulima kao Public.
[ Getsbi @ 26.03.2019. 19:00 ] @
Na događaj dugmeta OnClick upišeš =MojaFunkcija().
Ili napraviš makro koji izvršava funkciju, a u pomenuti događaj napišeš naziv makroa. Na primer Moj makro.
[ dzaga29 @ 27.03.2019. 07:24 ] @
Na izvješću imam dvije čelije; Potrošnja starog vodomjera i druga je potrošnja novog;ubacio sam čeliju nazvanu Dug(=[StanjeStarog]+[StanjeNovog]) i kada npr. napišem u prvu čeliju 15 a u drugu 2 kao dug dobijem 152, a ne 17. U čemu grešim???
Čelije su bile Text format!!!

[Ovu poruku je menjao dzaga29 dana 27.03.2019. u 08:42 GMT+1]
[ Getsbi @ 27.03.2019. 10:41 ] @
Možda nešto ovako: Dug =Val([StanjeStarog])+Val([StanjeNovog])


Po drugi put: ..... Najbolji način za ovakvu komunikaciju je da praviš novi manji primer u .accdb formatu, postaviš samo neophodan broj tabela formi i ostalih objekata. Tako ćeš brže naći nekog ko će rado da reši primer.

Dok praviš primer, često se desi da sam otkriješ rešenje.
[ Zidar @ 28.03.2019. 18:06 ] @
Covek ne dodje na forum neko vreme, kad ono - resavaju vodomere. pohvalno za pokusaj, ali djavolski tesko da se uradi. Toliko tesko da nisam siguran da igde postoji dovoljno dobro reseno. Stari IMS sistemi (PDP racunari pre 40 godina) su to resavali u QBASICu, sa puno ucitavnja iz text datoteka i menjanja DAT blokova u programu (!!!) Tako je moj operater svakog meseca pravila po sto i vise izmena u programu Sta ces, baza nije bila relaciona. Danas sistemi mogu donekle da podrze relacionu teoriju, ali se deo teorije koji za ovo treba ne uci u skoli, pa tako iresenja, stalno blizu i stalno se izmaknu kad mislimo da smo stigli do kraja.

U cemu je problem? Problem je dinamicke prirode. Podaci se menjaju kroz vreme - doadju se nova ocitanja. Vodomeri menjaju status i lokaciju. Ako su ugradjeni, onda mora da se zna ko ce da plati ono sto se ocita. Ako su na opravci, nista se ne placa. Ako su na bazdarenju, opet se ne placa utrosak vode, placa se bazdarenje ako bazdarnica nije vasa. To strasno lici na one slucajeve koje smo nekad davno analizirali - osnovna sredstva (kod koga je kamion), biblioteka (kod koga je knjiga), rentanje automobila ili bilo cega drugoga, i slicno tome. Slicno, ali ne i isto, je malo komplikovanije. Ne malo, mnogo komplikovanije. Tacno 2 puta komplikovanije. Ako imate zivaca i strpljenja da ponovo prodjemo kroz isti pakao, samo za red velicine topliji, mogu tome da posvetim malo vremena, samo na nivou strukture baze. Forme i reporte cete lako razresiti ako dobro postavimo osnovu. Upozorenje, moguce je da neke zahteve necemo moci resiti na nivou strukture baze. Mozemo da resimo mnogo, ali ne sve U 'velikm' SQL sistemima moze malo dalje da se ode, ali ne mnogo dalje nego u Accesu.

Ako smo raspolezeni, kazite. Ako ne - nikom nista, zivi bili i puno uspeha u radu.

[ dzaga29 @ 28.03.2019. 22:06 ] @
Zidar hvala bogu da si se javio! Prošlih par puta (Upravljanje investicionim projektima i Baza za vođenje djelatnosti Geodetske firme) bez tebe nebi napravio ništa, a ovako imam dvije baze koje se još koriste i nakon 5-6 godina. Ako si pročitao tekst u početku otvaranja ove teme radi se o tome da postojeći program želim prebaciti u Access jer od mog skromnog znanja u Accessu ipak nešto mogu. Program ću ti poslati kompletan sa učitanim podacima da sam vidiš da li što nedostaje. Što se naplate tiče o tom djelu ja trenutno nebi razmišljao, osim eventualno kasnije ubaciti i razgranati bazu. Prvenstveno moja je želja u onom tehničkom djelu (to je moj sektor) da imam uvid u sve - koliko imamo kakvih vodomjera, koji su na servisima, koliko ih ima da im je prošao rok i moraju u zamjenu. Baždarnicu više nemamo jjer je nerentabilna nego kupujemo dvije vrste vodomjera i to nove sa modulima i servisirane. Servisiran je onaj vodomjer koji ja dobijem sa ovjernim žigom i ugrađujem ga kao novog jedino uz malo novaca vodomjer kojem je prošao rok ja ga šaljem dobavljaču u zamjenu za servisirani. Broj vodomjera koji ja vratim i onaj koji dobijem nazad nemaju skoro nikakvu šansu da budu istog broja. Tako da sam čak razmišljao da kada mu dam status da je razdužen da ga brišem iz baze, ali mi problem radi arhiva izmjena jer ga tamo moram imati. Vidjet ćes u kodu za izmjenu da li je moguće da ga se obriše. Za ovaj prvi kontakt ovo je nadam se dovoljno!
U prilogu šaljem bazu, Pozdrav!
P.S. Zaboravio sam reči da ću dobiti datoteke očitanja i želim ih samo ubaciti u program (očitanje ću obivati ili u XML ili Excel datotekama
[ Zidar @ 29.03.2019. 18:27 ] @
Pino pozdrava svima. Drago mi je da stari programi rade. Siguran sam da si ih unapredio od tada,pozdravljam i to. Pazi samo da jos uvek rade sa novijim verzijama Accessa.

Vodomeri, dakle. Ja godinama se kanim da napravim sam to, onako iz fazona, ali nema se vremena ni volje vise kao pre. Ovo je zato sjajna prilika da me nesto natera da se pomerim s mesta :-)

Da se razumemo, svi saveti koji su ti kolege dali ranije vaze i dalje. Ja cu da probam da razresim onaj dinamicki deo. Ako to uspe, onda ce verovatno neki saveti biti zastareli, ali to ne umanjuje njihovu vrednost ni malo. U ovom trenutku, to su najbolji saveti koje mozes dobiti, tacka.

Da predjemo na posao. Ovaj paragraf iz tcvog poslednjeg posat je skolski primer kako se projektni zadatak objasnjava u dve-tri recenice. Pomaze malo sto sam i ja proveo 10 godina u vodovodu, u dva, po pet godina i tamo sam naucio osnove o prikupljanju, upravljanju obradi podataka. Kad sam dosao u Kanadu, naucio sam MS Access, pa psle malo i SQL (verzija 6.5!) i onda su se kockice slozile...

Zahtev i opis problema: "Prvenstveno moja je želja u onom tehničkom djelu (to je moj sektor) da imam uvid u sve - koliko imamo kakvih vodomjera, koji su na servisima, koliko ih ima da im je prošao rok i moraju u zamjenu. Baždarnicu više nemamo jjer je nerentabilna nego kupujemo dvije vrste vodomjera i to nove sa modulima i servisirane. Servisiran je onaj vodomjer koji ja dobijem sa ovjernim žigom i ugrađujem ga kao novog jedino uz malo novaca vodomjer kojem je prošao rok ja ga šaljem dobavljaču u zamjenu za servisirani. Broj vodomjera koji ja vratim i onaj koji dobijem nazad nemaju skoro nikakvu šansu da budu istog broja. Tako da sam čak razmišljao da kada mu dam status da je razdužen da ga brišem iz baze, ali mi problem radi arhiva izmjena jer ga tamo moram imati. "

Odgovor:
-- koliko imamo kakvih vodomjera, => to ide u master tabelu Vodomeri (serijski (fabricki) broj, precnik, opseg merenja, rok trajanja, proizvodjac itd.)

-- koji su na servisima => za ovo ide potpuno nova tablica, PromenaStanjaVodomera, ili "Gde je moj vodomer" ((serijski (fabricki) broj, gde je/kod koga je, kad je otisao tamo gde je, koliko mu je bilo citanje u momentu promene mesta ili osobe koja zaduzuje vodomer)

-- koliko ih ima da im je prošao rok i moraju u zamjenu => odgovor leziu gledanju u master tabelu Vodomeri (rok trajanja?) i "Gde je moj vodomer", qury "Svi vodomeri koji su negde (bilo gde) i danasnji datum je veci ili jednak datumu 'Rok Trajanja' u master tabeli)

-- Baždarnicu više nemamo jer je nerentabilna => dobro je znati, inace bi to bilo jedno od mesta gde moze biti vodomer u nekom trenutku

-- Servisiran je onaj vodomjer koji ja dobijem sa ovjernim žigom i ugrađujem ga kao novog jedino uz malo novaca => to je tabela "Gde je moj vodomer". Kad ga kupis prvi put, lokacija/status je "dobijen od dobavljaca" na neki datum, cutanje brojila = xxxx. Kad ga ugradis negde, stanje/lokacija je "Neka Adresa", ne neki datum, citanje u tom trenutku. Kad mu dodje vreme za popravku/vracanje/bazdarenje, to su sve moguca stanja/lokacije, na neki datum, i imaju neko citanje.

-- Broj vodomjera koji ja vratim i onaj koji dobijem nazad nemaju skoro nikakvu šansu da budu istog broja => to nas ne sekira ni malo. Jednostavno ce neki vodomeri imati poslednje stanje/lokaciju "Vraceni dobavljacu". Ako se vrati bas isti taj nekad, dobice status "Dobavljac vratio popravljen vodomer" i odatle ponovo u upotrebu, i veliki ciklus zivota vodomera se nastavlja :-).

-- Tako da sam čak razmišljao da kada mu dam status da je razdužen da ga brišem iz baze, ali mi problem radi arhiva izmjena jer ga tamo moram imati. => nista ne smeta da vodovod ustane zauvek u statusu "Rzaduzen" il "Otpisan" ili "Izgubljen", "Unisten","Ukraden". Bar ce u bazi biti trag, kada se sta od toga desilo. Ne brisemo nista i sve se zna - svi srecni na kraju.

-- Naplata. Naka naplatu radi knjigovodstvo, tako i treba. Medjutim, ti i dalje moras da ocitavas stanja. Ne moras mozda da racunas i potrosnju kao razliku dva uzastopna stanja, ali da ih ocitas, to se mora. Tu ce opet pomoci tablica "Gde je moj vodomer". Upisaces nesto ovako "Vodomer [SerijskBroj", ocitan dana "NedkiDan", na lokaciji [NekaAdresa], procitana vrednost je [CitanjeVodomera]. Ako sva citanja upises u tabelu "Gde je moj vodomer", imas sve sto ti treba da izracunas i potrosnju, ili da staro inovo citanje posaljes u knjigovodstva, pa neka oni racunaju :-) jedino moras da vodis racuna da korisnik kome naplacujes vodu bude tacan. To mozes da vodis u tabeli "Gde je moj vodomer" ali je prekomplikovano, pa cemo to ostaviti van ove price.

-- Interesantni su slucajevi:
1) kad se promeni korisnik, a vodomer ostane isti => ocitas stanje u momentu promene i duzis prvok korisnika za naplatu razlike, a novom korisniku to je pocetno stanje
2) korisnik ostaje isti, ali se menja vodomer => opet ocitas staje starog vodomera, razliku od proslog citanja duzis na korisnika. Novo stanje starog vodomera = "Skinut" ili "Razduzen korisnik" ili "Vracen u magacin", pa odatle dalje kako bude. Korisniku (nije se promenio) se daje novi vodomer - stanje "Ugradjen na lokaciju..", pocetno stanje ono sto pise na vodomeru u momentu ugradnje.

Sve sto smo ispricali, stanja, lokacije, promene, zaduzenja vodi se u tabeli "Gde je moj vodomer". Jedan isti kod upravlja svim promenama. Stos je napraviti listu mogucih stanja i lokacija, tako da mozemo da pratimo sta se desava. Lista ne mora iz prve da bude kompletna i perfektna. Vremenom se mogu dodavati nova stanja (stara se ne mogu brisati, ali se mogu ignorisati kad vise nemaju svrhu) Pored liste mogucih stanja, potrebno je definisati dozvoljene promene stanja. To radimo sa dve tabele "Moguca Stanja" i "Dozvoljene Promene Stanja". Te dve tabele kontrolisu sta se i kako moze upisati u "Gde je moj vodomer". ZBog zakona relacione teorija, prvo moraju da se naprave "Moguca Stanja" i "Dozvoljene Promene".

Moguca stanja. Za pocetak, mozemo definisati nekoliko ociglednih stanja: Stigao od dobavljaca, Postavljen kod korisnika, Ocitan, Skinut, Poslat Dobavljacu, Otpisan. Stanja nisu izlistana ni u kakvom redoledu jer njihov odnos nije linearan niti jednosmeran. Tokom zivota, vodomer prolazi kroz razna stanja. Neki prelzi imaju smisla, a neki ne. Na primer,

Neki vodomer moze da ima sledeci zivotni put:
Put 1: (Stigao od dobavljaca -> Postavljen kod korisnika -> Ocitan -> Ocitan...-> Ocitan -> Skinut -> poslat Dobavljacu.)

Neki drugi moze da ima drugaciji put:
Put 2: (Stigao od dobavljaca -> Postavljen kod korisnika -> Ocitan -> Ocitan...-> Ocitan -> Doelejn nom korisniku" -> Ocitan..Ocitan-> Otpisan

Broj kombinacija je veliki, ali ne i beskonacan. Neki ljudi razumeju promene stanja bolje ako se to - nacrta. rtez predstavlja graf, matematicki objekat koji se satoji od cvorova i linija koj povezuu cvorove (grane grafa). Cvorovi grafa su stanja, a grane su linije koje spajaju stanja. Nas graf bi mogao da izgleda ovako:

Svaka strelica je prelaz iz stanja u stanje. Mozda neke ne trebaju, ili neka stanja ne trebaju, slobodno ih se moze ukloniti. Potrebne su dve tabele:
DozvoljenaStanja : {Stanje text(25) UNIQUE (Stanje) }
DozvoljenePromeneStanja: {StaroStanje text(25), NovoSTanje text(25)
, UNIQUE (StaroStanje,NovoStanje)
, FK_1 (StaroStanje) REFERENCES DozvoljenaStanja(Stanje)
, FK2_(NovoStanje) REFERENCES DozvoljenaStanja(Stanje)
}

Tabela GdeJeVodomer za pocetak neka izgleda ovako:
ZivotVodomera { Vodomertext (50) StaroStanje text(25), NovoStanje text(25)
, DatumStarogStanja DateTime, DatumNovogStanja DateTime
,StaroCitanje long integer,, NovoCitanje longI nteger,
, KoJeZaduzen text 255 -- ovde se upisuje ko duzi vdodmer posle ove promene
sva polja su NUY MULL - Required = Yes,
UNIQUE_1 (Vodomer, DatunNovogStanja),
FK1 (StaroStanje, NovoStanje) REFERENCES DozvoljenePromeneStanje (StaroStanje,NovoStanje)
}

Za pocetak, napravite ove tri tabele. Dodajte relationships za svaki FK koji smo naveli. Unesite neke podatke ovim redom: DozvoljenaStanja
, DozvoljenePromeneStanja (svaka strelica na dijagramu je promena stanja. Pocetni kar = StaroStanje, vrh strelice = NovoStanje.

Onda pazljivo pokusajte da unsete dv-tri reda za jedn vodomer. Primetite da je u svakom redu StaroStanje on sto je u prethodnom redu bilo novo stanje Isto vazi za DatumStarog i NovogStanja, i StaoCitanje -NovoCitanje. Za prvi rekord, stavite StaroStanje = NovoStanje, DatumStarogStanja = DatumNovogStanja, StaroCitanje = NovoCitanje. Logicno bi bilo da sve Staro.. za prvired bude NULL ali Access to ne dozvoljava. MS SQL dozvoljava i to donekle olaksava posao u T-SQL. Ali samo T-SQL, sve ostale variante SQL se ponasaju kao Access.

Dakle, unesete prvi red, gde je sve Staro jednako sve Novo. U sledeci red u kolone Staro.. prepisujete ono sto je u prethodnom redu bio u kolonama Novo. Pazite, lako se gresi. Dobra stvar je sto cemo za tu operaciju napisati tri linije koda i zaboraviti na to. Posle nekoliko redova, primeticete sistem koji se ponavlja, podaci iz rda u red isu u cik-cak. lep izgleda, ali sta to nama koristi? Prvo, ako iamma StaroCitanje i Novo u istom redu, mozemo lako da izracunamo potrosnju. drugo, Staro I NovoStanje mozemo da uporedimo sa dozvoljnim promenama i sprecimo nekoraktan unos. Ako je vodomer "Otpisan" on ne moze da se pojavi vise nigde, jer iz cvora "Otpisan" ne izlazi ni jedna strelica. Iz cbora "Citanje" moze se ici nazad u taj cvor. To je ono sto se ocekuje u normalnim uslovima - vodomer sedi u mestu i cita se svako malo. Zgodno, zar ne?

Zgodno, ali nje sigurno 100%. Zato nam trebaju jos neke constraints, da bi podaci bili uvek logicni, bez duplikata, bez besmislenih promena i bez nelogicnih citanja. Datum novog citanja mora biti veci nego datum starog citanja, ili bar jednak. KAd vodovod ide na opravku, ocitamo stanje kad smo ga skinuli. Kad se vrati, bice neko drugo citanje, jer su u radionici pomerili tockice i zupcanike. I niko nece tu razliku sda plati jer ce se iz tabele videti da se ta promena na brojcaniku desila u radionic.NovoCitanje ne moze nikako biti manje od starog. Obicno je novo citanje vece, ali ne pri svakoj promeni. Kad skinete vodomer, citanje ce biti isto. Kad se vodomer preokrene (br0jac predje odnekih 999,999,999 i postane 1,000,000,000 kazaljka stoji na nuli, 000,000,000 sto je daleko manje nego prethodno citanje. To se moze dozvoliti samo ako je prethodno citanje bilo - 999,999,999, cak i ako ga nismo zaista procitali. Skor sve situacije koje mozete zamisliti mogu se registrovati tacno i jednoznacno. menja se korisnik a vodomer stoji na mestu. "skinete" vodomer , i ponovo ga postavite sa novim "

To cemo psole vikenda. Za sada napravite tri tabele i unesite malo podataka, da steknete osecaj sta se stvarno desava.

[ dzaga29 @ 29.03.2019. 20:20 ] @
Koliko sam te shvatio ja moram u potpunosti krenuti od početka, tj. sve ovo što sam napravio ne koristi ničemu. Znači da jednostavno podatke koje imam u firmi za daljinsko očitavanje sa bzom kupaca, vodomjera i drugog neću moći koristiti te da će se unos 10000 kupaca i vodomjera morati vršiti ručno ili se samo radi o tome da se postojeći program preuredi??? Ova druga varijanta bi mogla proći, ali uvjet je da mogu u program inportirati očitanja. Ja sam već počeo sa izradom tablica ali dok ne shvatim ovo prvo pitanje stvarno sam zbunjen. Ja znam da je moj postupak bio naopak - Učitao sam XML datoteke koje sam u Accessu povezao i dobio bazu. Da se treba proširiti to m je razumno, ali sve odbaciti i nanovo to mi je problem jer ovako nikada neću dovršiti.
[ Zidar @ 29.03.2019. 22:46 ] @
Ne brini, nece ti propasti podaci niti ces morati da unosis rucno. Cujemo se posle vikenda.
[ dzaga29 @ 01.04.2019. 20:12 ] @
Ja sam nešto pokušavao ali neide, kada budeš mogao javi se pa ćemo kreirati tablice, ali ono u vezi naplata povlačim jer je normalno da kada imam potrošnju da znam i vrijednost fakture. U prilogu ti šaljem cjenik da vidiš kako se formiraju cijene, a za njih ćemo morati složiti i tablice za izračune. Pozdrav!
[ Zidar @ 02.04.2019. 23:08 ] @
Pogledao sam shemu tabela, i nije tako lose kao sto sam pomislio. Tablce su manje vise OK. Tablica Ocitanja je prilicno prljava. Nasao sam 96 vofomjera u Ocitanja kojih nema u Vodomjeri. To ne moze. Izvukao sam ih u posebnu tablicu, pa ti vidi da li ces ih uneti u Vodomjeri, ili ces ih odbaciti. Ince, tablica Ocitanja ima bas onu struktutu koju sam preporucio: (Vodomjer_BR, Datum_Prethodneog_Citanja, PrethodnaVrednost(citanje), DatumCitanja, Vrednost(citanja). To je glavno. Pocitio sam sto sam mogao iz Ocitanja da bih napravio kako u stvari treba da izgleda.

Tablica Ocitanja je ono sto dobijas od telemetrije. OK. Napravicu drugu tablecu, OcitanjaSredjena, sa slicnom strukturom i popunicu je iz tablice Ocitanja Svi rekordi u Ocitanja bice pretvoreni u dva rekorda, po jedan za prethodno i novo citanje. Dok ovo uradim doci cu do metoda ciscenja podataka. KAd uvezes novu telemetriju u tabelu Ocitaja, kao sto sad radis, pre nego prebacis podatke u OcitanjaSredjena moraces da transformises ulazne podatke, da odbacis neke koji bi bili duplikti neke koji nemaju smisla. Za sada, vrlo je mali broj onih koji treba da se zanemare jer su neupotrebljivi, obrisao sam samo dva rekorda iz Ocitanja. U pocetku ces nalaziti vodomere u Ocitanju koji nisu zavedeni u tabelu Vodomeri, vremenom ce toga biti sve manje, kad se ceo sistem uhoda. Njih zavedes prvo, pa onda upises ocitano stanje, kao prvi rekord za taj vodomer. Posle ce proces ici ovako:

1) Ucitaj telemetriju iz .XML fajla o tabelu Ocitanja (da li se staraocitanja brisu ili se doda neki atribut da znamo kad smo i sta dobili u YMX?)
2) Procesljaj podatke u Ocitanja - duplikati, napostojeci rekordi, pogresni podaci skroz - imaces kverije i za to, i vremenom ces neke i dodati, kad god se desi nesto sto se nikada pre nije desilo.
3) Ubaci podatke iz Ocitanja u Ocitanja Sredjens (imaces querije za to, koje mozes automatizopovati)

Mozda ces morati da dogovoris novu struktury XML fajla, da ti ne salju podatke koji ti nista ne znace ili samo smetaju. Kad jednom pocnes da unosis u tablicu OcitanjaSredjena, unosis samo Datum_Ocitanja i Vrijednos. Ono za prethodno citanje i prethodni datum citanja vec ces imati u tabeli. Ako ti i dalje salju prethodno ocitanje, moze se to iskoristiti da se proveri tacnost. jedino je jako vazno da se ne propusti neki unostelemetrije. Ove vrste tabela, OcitanjaSredjene, ne podnose dobro naknadno dodavanje redova negde u sredinu. Za svaki vodomer samo se dodaju podaci, dodavanje unazad je dosta tesko.Upadte unesenih piodataka je prakticno nemoguce, a brisanje po principu sve ili nista. To nisu lose stvari, jer se tako cuva kvalitet podataka. Ako bas nesto mora da se menja naknadno ili brise, to zasluzuje posebnu paznju. Pokazacemo kako se i to radi.

Samo malo vremena da postojecu tabelu Ocitanja prebacim u OcitanjaSredjena, i nadam se da necu propustiti da zapisem neki korak u pripremi podataka, d a bismo mogli da sagradimo kverije koji ce to posle sami da rade.

Sve u svemu, sve sto imasu bazi je OK, samo cemo dodati StanjeSredjeno i jos dve tabele da kontrolisemo gde se nalazi vodomer - skidanja, postavljanja, poravke, otpisivanja. Te stvari se rade pojedinacno, dok ocitavanja radis 'in bulk' kroz XML. Sta ces interesantnije nego to
[ dzaga29 @ 02.04.2019. 23:36 ] @
Drago mi je da ovo što sam napravio nije tako loše. Što se tiče tbl. Vodomjeri mislim da ima hrpa bezveznih podataka koji mi uopće ne trebaju, a što se tiče tablice Očitanja ja sam je samo učitao i nisam je prerađivao, ali kod očitanja ja ću imati xls. datoteku sa samo datumom očitanja, brojem vodomjera i novim stanjem. Na temelju tih podataka ćemo složiti tablicu očitanja - što treba a što ne. Svakako bi želio imati nekakvu arhivu u slučaju nekih reklamacija i sl.
Zaboravio sam napisati, ali si mogao zaključiti; potrošaće djelimo u tri grupe i oni se prepoznaju po šifri Domačinstva šifra 01*, Kućni savjeti šifra 02* i po0duzeć šifra 04*; Domaćinstva očitavam kvartalno, a KS i poduzeća mjesećno.
[ Zidar @ 03.04.2019. 15:41 ] @
"kod očitanja ja ću imati xls. datoteku sa samo datumom očitanja, brojem vodomjera i novim stanjem" Odlicno, to je upravo ono sto nam treba.

Mozes li malo da detaljnije objasnis postupak citanja. Da li cita cove - ocitac i upisuje ocitano stanje u neki uredjaj koji onda salje ocitanje u neki fajl (.XML?). Ili mozda ne cita covek, nego neka automatika ocita stanje, na zahtev ili u zadatom trenutku, pa ta ista automatika posalje podatke u onaj isti neki fajl (.XML?) iz prethodne recenice. Ili je ensto trece. sta god da je treba mi da znam
1. ko cita (covek ili kompjuter)
2. ko trnsferuje ocitane podatke (covek npr sa telefona, kompjuter )
3. gde se tacno salju ta ocitanja - sirovi podaci
4. da li se citaju svi vodomeri odjednom (to bi kompjuter uradio) ili u sitom danu, svi ili grupe u istom danu ili nekom kracem intervalu. Ako ces podatke o potrosnji koristiti kasnije za neke analize, dobro je da su sva citanja u nekom kratkom roku.

Od ovog inicijalnog XLS fajla mislim da cu moci da malo posredim podatke. U tabeli OcitanjaSredjeno (mozes joj promeniti ime slobodno, samo mi javi da znam) imacemo sve podatke o zivotnom putu vodomera prvi rekord za svaki vodomer ce biti ili datum nabavke ako se zna, ili datum ugradnje, po mogucstvu kad je prvi put ugradjen. taj rekord ce imati citanja = 0 ili neki broj, ako je nesto ocitano. Cini mi se da kad dodju od proizvodjaca vec imaju neko citanje, koje su dobili na bazdarenju. Sta god da je, nesto cemo da posredimo.

Ako se desi da se vodomer ugradi a da nije zaveden egde, u tablicu Vodomjeri u nasem slucaju, upis u OcitanjaSredjena nece proci. Zato je to prvi test kad dobijes XML fajl: ima li rekorda u XML za vodomere koji nisu u tablici Vodomjeri. Ako ima, moras da ih dodas u Vodomjeri. Ako to nije jednostavno, onda ih iskljuci iz dodavanja i dodaj samo one koje mozes, a 'nepostojece' resavas kasnije. Ako ima nekih koji nisu ocitani zato sto su pokvareni/uisteni/zatrpani/ukradeni/poplavljeni i slicno, to ce se uneti, verovatno sa citanjem NULL ili nesto tako, ili se proceni, to je stvar vase interne politke. Kveri za transfer iz XLS ce prepoznati koja ocitanja su prva za dati vodomer, to neces morati da brines.

Zavisno od toga kako XLS fajlovi dolaze, mozda je pametno dodati neki ID, koji ce biti ista za sve rekorde u dolazecem XLS fajlu. ID ne mora biti numericki, moze text ali ne predugacak - do 25 kraktera mozda. Tako ces samo da dodajes XLS fajlove u tabelu Ocitanja, iz koje ce neki proces da prebacuje podatke u OcitanjaSredjena. IZ Ocitanja Sredjena ces lako dobiti potrosenu vodu = Prethodna_Vrijednost - Vrijednost.

Ponovo, process ce biti sledeci:

1) Ocitanja su zapisana negde
2) Iz to 'negde' dobijamo XLS, kao Vodomer_ID, DatumCitanaj, Vrijednost, Ocitac(?), XLS_ID (?)
3) prebacimo XLS utabelu Ocitanja, onako kako je, no questions asked. To je rekord za ono sta smo dobili.
4) proverimo nezavedene vodomere - (postoji u Ocitanaj, ne postoji U vodomjer)
5) u XLS, svaki vodomjer se moze nalaziti tacno jednom - nema duplikata - bilo je samo jedno citanje, a ne dva ili vise. ako bas ima dva ili vise, pogledamo sta je u pitanju i donesemo odluku sta ce se raditi (Problem Solving, eh)
6) proverimo da li su podaci logicni (Vrijednost manja nego Prethodna_Vrijednost i slicno)
7) prebacimo podatke iz Ocitanja u OcitanjaSredjena.
Kad doje verme, generise se nalog za naplatu - query koji racuna potrosnju, broj dana i slicno. Taj se salje u naplatnu sluzbu, elektronski po mogucnosti, ko struturirani fajl, Access il Excel, moze i XLS, to zavisi od programa koji ce stampati racune. Nalog za naplatu se cuva u posbnoj tabeli, gde se samo dodaju rekordi, nikada se nista ne brise niti se menja.


Ovaj proces je stvar organizacije posle, kompjuter i baza podataka samo sluze da taj proces omoguce.

Sad, pokusaj da das odgovor na pitanja na pocetku, o tome ko i kako ocitava i salje podatke U sledecm koraku bi trebalo da posaljem strukturu dodatnih tabela i neke kverije za kontrolu ulaznog XML fajla i prebacivanje u OcitanjaSredjens.

[ dzaga29 @ 03.04.2019. 17:37 ] @
MCentar je software za kreiranje baze, gdje isto kao i u Accessu stvorimo tbl. Kupci i tbl. Vodomjeri. Kada imamo kreirane dvije odvojene tablice moramo ih međusobno povezati i svakom kupcu "dodjeliti" njegov vodomjer. Tek tada smo spremni za rad na daljinskom očitanju. Sada u MCentru kreiramo obilaske, tj. rute kuda će se kretati djelatnici na očitanju i koje će vodomjere na toj ruti očitati. Tako kreirane obilaske preko USB kabela prebacimo na Ručno računalo za prikupljanje podataka i pošaljemo djelatnike na očitanja. Na terenu koristimo Bluetooth prijemnik koji uparujemo sa Ručnim računalom za prikupljanje podataka (tzv. dlanovnik) i krećemo u očitavanje po predviđenom obilasku. Nakon što se izvrše očitanja podatke skupljene preko ručnih računala za prikupljanje podataka pomoću USB kabela učitamo nazad u MCentar gdje ih analiziramo, kreiramo izvješća ili ih prebacujemo na daljnju obradu npr. u obračunsku jedinicu i sl. Dakle očitanja iz dlanovnika su datoteke sa datumom očitanja, brojem vodomjera i očitanom vrijednosti. Dakle samu tablicu očitanja koja će se vidjeti na formi sami čemo kreirati i netreba nikakva očitanja iz MCentra. Ja sam je samo učitao da bi mogao raditi na bazi...
U ptilogu ti šaljem kako izgleda oprema za očitanje koje ljudi nose na teren. Očitanja se sva obave u par dana, a što nije daljinski to ide sporije od vodomjera do vodomjera.

[ Zidar @ 04.04.2019. 16:52 ] @
Hvala, mislim da sada bolje razumem.

Razumem da MCCEntar samo cuva citanja i izbacuje izvestajetipa "datum, ocitanje, prethodni datum, prethodno ocitanje", sto nije od malog znacaja. Sta treba Access da radi dalje od toga?

[quote]MCentar je software za kreiranje baze, gdje isto kao i u Accessu stvorimo tbl. Kupci i tbl. Vodomjeri. Kada imamo kreirane dvije odvojene tablice moramo ih međusobno povezati i svakom kupcu "dodjeliti" njegov vodomjer.[quote]
Ako tablice Vodomjeri, Kupci, KupciVodomjeri (ili nima ekvivalentne datoteke) postoje u sistemu MC, zasto nam to treba u zasebnom Access sitemu? Za neku dalju obradu i/ili analizu?

Citat:
Tek tada smo spremni za rad na daljinskom očitanju. Sada u MCentru kreiramo obilaske, tj. rute kuda će se kretati djelatnici na očitanju i koje će vodomjere na toj ruti očitati.

Znaci li ovo da se podaci u tablici Obilasci takodje nalaze u MCCentar, pa ih prebacujemo u drugu bazu, za analizu?


Citat:
Tako kreirane obilaske preko USB kabela prebacimo na Ručno računalo za prikupljanje podataka (Dlanovik) i pošaljemo djelatnike na očitanja.

Ovo razumem kao: U kancelariji imamo po jedan USB za svakog ocitaca. U te USB upisemo rutu dodeljenu tom uredjaju (ocitacu).

Citat:
Na terenu koristimo Bluetooth prijemnik koji uparujemo sa Ručnim računalom za prikupljanje podataka (tzv. dlanovnik) i krećemo u očitavanje po predviđenom obilasku.

Bluetooth se zakaci za dlanovik

Citat:
Nakon što se izvrše očitanja podatke skupljene preko ručnih računala za prikupljanje podataka pomoću USB kabela učitamo nazad u MCentar
gdje ih analiziramo, kreiramo izvješća ili ih prebacujemo na daljnju obradu npr. u obračunsku jedinicu i sl. Dakle očitanja iz dlanovnika su datoteke sa datumom očitanja, brojem vodomjera i očitanom vrijednosti.

Ovo razumem kao: Ocitac zavrsi ocitanja, bluetooth to upise u dlanovik Kad se vrati u kancelariju, ocitac spoju dlanovik i PC na kome je MCCentar jednim USB kablom, te se podaci prebace u MCCentar

Citat:

Dakle samu tablicu očitanja koja će se vidjeti na formi sami čemo kreirati i netreba nikakva očitanja iz MCentra. Ja sam je samo učitao da bi mogao raditi na bazi...

U ptilogu ti šaljem kako izgleda oprema za očitanje koje ljudi nose na teren. Očitanja se sva obave u par dana, a što nije daljinski to ide sporije od vodomjera do vodomjera.

Znaci li ovo da se podaci izvoze iz MCCentar u Access bazu, preko XLS fajla? Ako 'da', sta nameravamo da radimo u Access bazi analizu utroska vode ili nesto slicno? Podaci ce biti na dva mesta, da li to zelimo i koji je razlog?

[ dzaga29 @ 04.04.2019. 17:16 ] @
Na početku sam napisao da je MCentar jedan i do njega ne mogu svi djelatnici. Npr. djelatnica u računovodstvu dobije "prepisanu" listu očitanja iz MCentra jer njoj lista u kojoj je samo broj vodomjera i novo stanje očitanja ništa ne vrijedi jer su izvješća iz MCentra toliko loša i sirova da se ništa ne vidi i onda ona to unaša ručno. Upravo zato ideja mi je bila napraviti Access bazu koju će moći koristiti svi. Zaboravimo MCentar, on će biti isključivo za punjenje "Dlanovnika" za unos novih kupaca i vodomjera koje ću update u Access, te meni za eventualnu kontrolu. Dakle osnov svega je Access i kako ćemo posložiti bazu, a nju ćemo puniti preko excel datoteke. Uostalom na mom prvom postu imaš backup koji sam izvukao iz MCentra kada sam počeo!
Dakle, u MCentru će biti baza koja će biti isključivo backup!!!!
[ Zidar @ 04.04.2019. 22:05 ] @
OK, sad razumem. Vido sam prvi post i saljem zakacene dve varijante baze koja moze da se napravi na osnovu podataka koje si dostavio u XML fajlovima. Ovako:

1. Prvo sam otvorio prazan Excel pa svaki od .XML ucitao i pretvorio u obican Excel file.
2. Linkovao Excel files na praznu Access bazu (nikakve tabele nisu postojale)
3. Onda sam odradio kverije koji pocinju sa A,B,C,D => dobili smo Kupce, Vodomjere i veznu tabelu KupciVodomjeri.

4. Query E1_ReadoutsToOcitanja sve prekopira iz Readouts.XLS u novu tabelu - Ocitanja.
5. Zatim se izvrse E2, E3, E4. E3 i E4 kreiraju tabele sa borjevima vodomera koji ne bi trebalo da budu u tablici Ocitanja. Te dve tabele, _OcitanjeZaNepostojeciVodomjer i _OcitanjeZaVodomjerKojiNemaKupca sam spojio u kveri UNION_VdmBezKupca_NepostojiImaCitanje. Taj UNION kveri je osnova za DELETE FROM Ocitanja - E5.

Time smo sve podatke prebacili, ocitili NULL values i duplikate. Onda sam napravio Primarne kljuceve. Svi kljucevi su realne vrednosti, koj imas i u MCentar programu. Jedino sam u tabeli Ocitanja promenio ime Meetr u MeterText, da bi kveriji bili prostiji. I postavio sam relationships na kraju.

Zakacio sam dve verzije baze, Z01 i Z02. Jedina razlika je kako su relationships naravljeni. Jedna verzija zahteva da za svako citanje, ocitani vodomer postoji u tablici KupciVodomjeri. To je dobro ako hoces da ulovis koji su vodomjeri protavljeni bez da su uneseni u bazu. Druga verzija trazi da vodomer koji s eocitava postoji u tabeli Vodomjeri, ne mora da ima dodeljenog kupca. Ovo ti dozvoljava da ucitas prakticno sve u tablicu Ocitanja, a;i posle moras da proveris koji su se vodomeri provukli bez podataka o kupcima.

Ovo je samo baz koja na relativno jednostavan nacin omogucuje transfer podataka iz MCentar. Ako je to sto ti je trebalo - onda smo gotovi. U tom slucaju nemamo pracenje gde je koji vodomer i kom kupcu je dodeljen u kom momentu. Takve promene su spore i nisu masovne, pa se to moze kontrolisati i na druge non-database nacine. U tom slucaju ovo je osnova baze i kraj posla.

Ako hoces da pratis i te promene, onda se ova struktura moze nadgraditi bez velikih problema. Pregeldaj i proanaliziraj, pa odluci sta ces dalje.

[ dzaga29 @ 04.04.2019. 22:23 ] @
Ići ćemo dalje, jer sam vidio neke nedorečenosti (npr. više Šifra kupca za isti vodomjer što ćemo morati rješiti kroz neku tabelu gdje od ukupnog očitanja uzima ili postotak ili neku drugu vrijednost - to ću morati tražiti u firmi da mi kažu kako obračunavaju), ali uz tvoj post ja nisam dobio ništa - niti Z01 niti Z02.
Pozdrav!
[ dzaga29 @ 05.04.2019. 08:31 ] @
U prilogu ti šaljem datoteke očitanja koje ću dobivati ubuduće; pokušaj ih uvući u očitanja s tim da se najnovija očitanja slažu od vrha i da su vidljivi svi podaci i jačina signala i napomena. Datum očitanja je vidljiv samo u nazivu datoteke.Kada sm htjeo vidjeti za koji vodomjer imam veliku potrošnju imao sam problem sa učitavanjem filtera - na stranici vodomjeri dozvoljava mi samo sortiranje po abecedi, a ne i po broju vodomjera???
[ Zidar @ 05.04.2019. 16:05 ] @
Ooops, nisam kliknuo na Upload posle izabiranja fajla. Zaboravi se vremenom kako se radi.. Zakacio sam sada, na prethodnu poruku, provereno :-)

Hvala ti za uzorke u poslednjoj poruci. Pregledacu, ocistiti podatke ako treba i dodati. Ne diraj nista tabele u Z01 i Z02. Ja cu ih menjati na mojoj strani dok ne dobijemo tacno sta nam treba.

Sto se tice vise kupaca na jedan vodmjer, to nije tesko. U tabeli KupciVodmjeri dodacemo kolonu PctZaNaplatu. Za vecinu vodomjera bice to 100%. Za one sa vise korisnika, upisace se neki procenti, moze i razliciti za svakog, ali da zbir bude 100%. Ako se deli ravnomerno potrosnja na sve korisnike, onda nam ne treba posebna kolona. U obracunu cemo podeliti svaku potrosnju sa brojem kupaca zakacenim za taj vodomjer.

Probacu da nesto uradim danas, ako ne onda u ponedeljak.

Pozdrav
[ Gjoreski 001 @ 05.04.2019. 19:21 ] @
Samo edna mala sigestija od moja strana
Go gledav ovaj MCentar i vo specifikacijata za nego pisuva deka raboti so MS SQL Server baza.
Dobro e da se vidi bazata od ovaj program i verovatno e mozno da se pravat i izmeni ili vo najmala raka da se prezemaat i azuriraat podatocite bez export vo Excel .
[ dzaga29 @ 06.04.2019. 16:16 ] @
Obzirom da nemam što za radit dok ti ne posložiš tablice i relacije, ja sam želio malo uređivati forme, ali kada sam želio isprazniti bazu i importirati excelove datoteke koje sam prije exportirao na tbl. Vodomjeri došlo je do greške i pokazalo mi je poruku u prilogu. Da li sam pošemerio ključeve ili što !!! Očito dok se ne posloži baza nemam što ispravljati i unašati, a sve forme, upiti i reporti su za obrisati?
Molio bi te da koristiš nazive iz tbl. koje sam ja upisivao kako nebi morao mjenjati sve Querie, Forme i Reporte. Vidio sam da si u tbl. Kupci_Vodomjeri uvukao i Datum_ugradnje, ali onda mi na Queri poručue grešku da se radi o više polja Datum_ugradnje. Ajde da prvo posložimo bazu i onda napravimo Export/Import da sve funkcionira!!!
Pozdrav!


[Ovu poruku je menjao dzaga29 dana 07.04.2019. u 21:10 GMT+1]
[ dzaga29 @ 08.04.2019. 07:48 ] @
Zidar, šaljem ti zadnju verziju baze koju sam napravio, molim te da je što više koristimo jer sam neke nedoumice rasčistio, a ono što ne valja jednostavno obriši. Trebao bi barem koristiti tbl. Vodomjeri i tbl. Kupci, ali isprobaj da mogu raditi Export/Import podataka u bazu ...
[ Zidar @ 09.04.2019. 19:02 ] @
Evo, dodati podaci iz Excela, i jos malo nesto ocicsceno. Dobro si pocistio prosli put, mnogi problemi koje sam video prvi put nisu bili vise tu.

Ovo sto sad imas moci ces da koristis za dodavanje ocitanja. Iz Excela u tabelu Ocitanja_Iz_Excela, a odatle kverijima u tabelu Ocitanja. Excelima se moraju dodatijos dve kolone, videces u zakacenim fajlovima. Ja sam koristio Append to Table opciju da prebacim podatke, rucno, nisam morao da linkujem Excel za Access.

Ovo sto imas sada, NIJE ono sto sam obecao da bi moglo biti, ali se moze raditi i ovako. Trebalo bi jos neke kontrole dodati na tabelu Ocitanja, za sada neka ovako. Kad se stabilizuje ocitavanje i unosenje podataka, kad svako bude znao sta i kada treba da uradi - kad ovo psotane rutinska stvar, onda mozemo da pritegnrmo sta jos treba u vezi sa Ocitanjima.

Ako hoces da pratis gede se koji vodomer nalazi i sta mu se desava, to isto mozemo da uradimo, kad budes bio spreman, kad se malo odmoris od ove faze.

Djoreski pomenu da je source sistem u SQL. To je dobro, ali nije presudno SQL ne moze bas da se radi amaterski, makar i znali sta radimo. Access moze da radi kad se zna sta se hoce (Davor) i postuju pravila. Za SQL to nije dovoljno.

Aakaceni fajl sadrzi
- Access.accdb sa podesenim tabelama. Pogledaj reprt rptRelationships - dodao sam vazne napomene.
- tri Excel fajla, koje si poslao poslednji put, sa dodatim kolonama
- MS Word document sa screenshots za data import iz Excela u tabelu

Probaj, pa javi.

[ dzaga29 @ 09.04.2019. 21:01 ] @
Zidar ovo je izvrsno, a najviše mi se sviđa što si max. iskoristio forme koje sam napravio. Trenutno sam malo u zdrastvenim problemima i od 22.4 - 27.4. moram u Zagreb na operaciju (Vitrektomija), ali nakon toga krećemo dalje po dogovoru. To što je Djoreski napisao vjerojatno je čovjek u pravu jer za razliku od mene on se razumije i u Access i u VBA. On mi je i poslao kod za knjiženje izmjena, mada će se kod morati malo mjenjati, jer ako u tablici Kupci_Vodomjeri imam upisan vodomjer kod puca, ali to ćemo kasnije. Što se tiče ostalog djela ja ću malo isprobavati i zapisati eventualne nedostatke. Za sada toliko! Pozdrav.
[ Zidar @ 09.04.2019. 21:27 ] @
Drago mi je da smo na pravom putu. Problem je vise u kvalitetu podataka nego u struktunim nedostacima. Ne brini, to je normalno za ovu fazu - inicijalno punjenje tabela. Podaci koji ti stizu nisu pod tvojom direktnom kontrolom. Pravila koja postavimo u bazi mozda nisu uvek ispostovana na izvoru podataka. vremenom cemo steci iskustvo kako da resavamo te situacije. Sve ce biti OK, ne brini. Osnovu si dobro postavio. Uvek moze nesto da se promeni i "poboljsa", ali ako moze nez znaci da uvek i treba.

Zelim ti mirnu operaciju, bez uzbudjenja i da se oporavis brzo. Kad se vratis, nemoj mnogo da gledas u kompjuter :-)

Pozdrav i zelim ti brz oporavak
[ dzaga29 @ 10.04.2019. 12:16 ] @
Podaci koje dobijem sa očitanja su svakakvi i to se slažem da ćemo morati duže vrijeme ispravljati, a posebno dok sam na bolovanju. Ja podatke uzimam samo od jednog poslovođe, jer za druge nemam povjerenja dok nisam u firmi. Međutim da se vratim na dva problema koja sam vidio i da ih pokušamo rješiti pravovremeno dok nećemo trebati puno mjenjati program.
1. vidio si da neki vodomjeri imaju više potrošaća i to ćemo trebati upisati potrošaće u bazu (svakog) i povezati ga sa tim vodomjerom a u očitanje prema tablici ćemo svakom dodati neki postotak i sl. To su oni vodomjeri koji imaju dvije ili više šifri kupca...
2. Veliki problem mi je izmjena vodomjera, jer kod kupaca imam situacija da je zadužen za dva vodomjera na istoj lokaciji jer nije proknjižena izmjena. U arhivi bi morao imati za određenog kupca sve izmjene kroz godine, ali da bude zadužen (tbl. Kupci_vodomjeri) samo za zadnji koji koristi. Sama izmjena se mora obavljati preko forme za izmjenu. Sam kod nema dovoljnu i dobru kontrolu od greške ... Malo se treba pozabaviti time, posebno što ćemo voditi kontrolu o lokacijama vodomjera i pratiti njihovo stanje.
Pozdrav!
[ Zidar @ 10.04.2019. 20:53 ] @
OK, broj 1) izgleda laksi za resavanje, broj 2) je ono pravo sto do sada nisam video da je dobro reseno. Doduse, posldnjih 20 godina nisam gledao

Odmori se dobro, ja cu za to vreme da malo proucim moguca resenja. Jedna varijanta je da se ocitanja prate kao i do sada, a da se kretanje vodomera prati zasebno. To je lakse, uslovno, imas dve komplikovane tabele, u stvari sistema komplikovanih tabela, treba po 3-4 za svako pracenje bilo cega. problem je ovde sto Ocitanja ne znaju sta se desava sa vodomerime kao sto kazes, ne slazu se podaci sa stvarnim stanjem na terenu. Druga opcija je da se svi dogadjai u zivotu vodomera prate u jednoj jedinoj tabeli - Ocitanja to je kompliovano jer tabela postaje jako siroka - veliki broj kolona koje se mdjusono kontrolisu i ogarnicavaju unos pogresnih podataka. Nisam siguran da Access moze to da proguta. Ne radi se o kolicini podataka, nego je Access prilicno slab kad treba postavljati CONSTRAINTS na nivou tabele. Postoji samo jedno text polje, duzine 255 karaktera, u table Properties u aable design modu, gde se upisuju constraints na nivou tabela. I sve constraints se tretiraju kao jedna, sa mnogo AND povezivanja. Editor za rad je isti kao sto je bio u verziju Access 95 i 97. Valjda su mogli da urade nesto za 20 godina, ali slaba uteha. A onaj ko je to prvi put uradio u 1995 godini, sad je u penziji...

Odmori se , pa nastavljamo iduce nedelje.
[ dzaga29 @ 12.04.2019. 18:01 ] @
Pa da ti se pohvalim, ali meni ovo ubacivanje očitanja nikako neide???
[ dzaga29 @ 13.04.2019. 09:23 ] @
Primjer: Kada sam otvorio potrošaća ID 2032 za njega sam dobio dva očitanja - novo koje smo ubacili 3.4.2019 i kod njega imam potrošnju od 912 m3 i ono od 23.1.2019 gdje je potrošnja od 328 m3. Jednostavno za novo očitanje je trebalo promjeniti datum prošlog očitanja u 23.1.2019. sa očitanjem od 11769 m3 i onda bi podaci bili točni (potrošnja od 584 m3) a ovako su podaci očitanja od 23.1.2019. preskočeni i nisu u matematici. Ručni unos nije moguć, zato ti govorim da mi ubacivanje očitanja ne ide i da ćemo to morati proći sve od početka!
[ Zidar @ 15.04.2019. 18:52 ] @
Dobrodosao nazad . Ne brini, nista nece morati rucno da se unosi. Negde je greska u mojim kverijima pretpostavljam. Izgleda da su Excel podaci u dobrom stanju. Sad cu da pogledam sta se desava, pa cu da posaljem popravljenu verziju.

:-(
[ dzaga29 @ 15.04.2019. 20:02 ] @
Ja bi najrađe da krenemo korak po korak i da se vratimo tvojim postovima od 03.04.2019. u 00:08 - pre 12 dana i 20h i od 03.04.2019. u 16:41 - pre 12 dana i 4h
jer u njima si opisao kako bi gotova baza morala izgledati s čime se slažem. Ja do onda neću ništa ubacivati i čistiti jedino ću isprobavati da vidim da li je sve u redu. Nakon što rješimo očitavanja onda ćemo ići na izmjene vodomjera gdje treba u jednom djelu mjenjati kod na komandi "Spremi zapis"
Pozdrav!
[ Zidar @ 17.04.2019. 17:55 ] @
OK, krenucemo od pocetka. Istoveremeno cemo sacuvati podatke koje imamo, da se ne unose rucno, ili bar da ne bude mnogo rucno.

Generalno imamo resenje na dva nivoa: prilicno komplikovano i mnogo komplikovano. Razlog zasto se baze podataka prave komplikovanim jeste integritet podataka, citaj 'da podaci predstavljaju stvarnost sto vernije'.

Ako se ima veliko poverenje u ulazne podatke, stvari su jednostavne. Ako mozemo da garantujemo da absolutno nikada nece biti uneti duplikati ili nelogicni podaci, onda nam ne treba nista - samo kreiramo tabele, neista PK, nista validacija, nista relationships, greske su nemoguce pa se i ne ocekuju.

Integritet podataka neije isto sto i tacnost unetih podataka. Ako za vodomer unsemo novo stanje = 250 umesto 25, a staro je bilo 10, integritet je ocuvan ukoliko takav vodomer zaista postoji, jer 250>6, ali i 25>6 - novo citanje vece nego prethodno, sve je OK. Stvarni datum citanja moze bit 4. April 2019, a mi unesemo 14. April 2019, ili cak 14. April 2010, greska se nece otkriti lako ukoliko je datum prethodnog citanja 20. decembar 2018. Tu je razlika izmedju integriteta i tacnosti.

Integritet = podaci ne narusavaju ni jedno pravilo koje smo postavili.
Tacnost: integritet, plus unete vrednosti odgovaraju realnosti.


Za iustraciju ovih principa, tabela Vodomjeri u mom poslednjem postu, garantuje integritet podataka na ovaj nacin:
a1) samo vodomeri koji postoje u tabeli Vodomjer mogu imati ocitanja (relationship sa Ocitanaj na Vodomjeri)
a2) datum ocitanja mora biti veci ili jednak datumu prethodnog ocitanaj
a3) ocitana vrijednost mora biti veca ili jednaka prethodno ocitanoj
a4) jednom uneta vrednost se ne moze promeniti, niti obrisati, osim ako je to poslednje stanje

To je prvi nivo komplikacije, prilicno komplikovano, integritet podatak je obezbedjen na solidnom nivou, a tacnost - e to je "it's up to you".

Sledeci nivo komplikacije bio bi garantovanje da:
b1) samo vodomjer koji je Posavljen moze se ocitati. Tekuci nivo ce prihvatiti ocitanja i za vodomere koji su otpisani za uvek, ili su na popravci.
b2) vodomeri se premestaju, sa mesta na mesto, tada se obicno menja i kupac, kupac moze biti aktivan i neaktivan u datom periodu. Sada,
kupac se moze zaduziti za potrosenu vodu samo ako je aktvan, i ako u datom momentu kupac duzi odredjeni vodomer.

Ako se fizicki moze garantovati da ce se uvek ocitavati samo vodomeri koji su negde postavljeni i za njih postoji kupac, prvi nivo, koji vec imamo je dovoljan.

Slucaj b1) je us stvari odgovor na pitanje "Gde je moj vodomjer, ili Koji je status vodomjera X" Statusi modgu biti na primer "U magacinu je","Na popravci je","Postavljen je","Otpisan je", ap i "Na Bazdarenju je", ako i kad bazdarenje postane rentabilno. Taj se slucaj resava na slican nacin kao sto smo resili ocitanja -pratiomo promene stanja: "Vodomer X je na dan D1 presao iz stanja Sp u stanje S", ako se dalje ne povezuje ni na koju tabelu.

U stvari, postoje dva slucaja kako se prate promene, promene stanja, i promene kontinualne velicine (citanja vodomera, balans tekuceg racuna). Ako je entitet za koji pratiomo stanja iskljucivo "Child" u "PArent-Child" relationship, ond se radi kao sto smo uradili za Vodomjere u tekucoj iteraciji, i akkao smo pokazali nekada davno na forumu (pracenje osnovnih sredstava ili tako nekako).

Ako ce pracenje promena biti necija Parent tabela, ond se menja nacin pracenja promena za Parent, ali se i Child komplikuje dodatno. Sve sto uradimo u prvom stepenu ostaje, ali se doadju nova polja za povezivanje sa Parent (koji je i sam precenje promena ).

Zbunjujuce, a? Jeste, ali se da nauciti. Pracenej promena je sablon, nije jednostavan, ali se da nauciti. Prvo se nauci prosto pracenje - ono sto se parti je child tabela i nema scoje children. Onda se nauci pracenje promena, kada je tabela i child i parent. Malo tezi sablon za ucenje, ali ipak - sablon. Kao kad inzenjeri projektuju betonske grede i ploce za stambenu kucu. Svaka se greda na isti nacin proracunava, za istu vrstu opterecenja, samo razlicite vrednosti za sile i raspone. Kad se nauci jednom, nije vise stos znati proracun, vec znati kako da se odaberu sile, pokretno ili nepokretno opterecenje, koncentrisana sila ili podeljeno, temperaturna razlika ili ne, vetar, zemljotres, pritisak vode ili zemlje. Tako i u nasem poslu, stos je videti sta na sta utice, da bi odredili nvo komplikacije (slozenosti) baze podataka.

Mi cemo da pocnemo po redu - jednostavno pracenje promena (taela koja prti promene je child tabela),
pa onda radimo slozeno pracenje, i na kraju to spojimo u jedno. A sve to na primeru vodomjera, ocitanja i mozda kupaca.

To, sutra, sad moram nesto da radim na poslu. Kapitalizam se moze podrivati iznutra do neke mere, ali ne i preko toga
[ Zidar @ 18.04.2019. 22:15 ] @
Izvinjavam se, nistra do utorka.

Svima koji sutra slave Uskrs, srecan Uskrs.
[ dzaga29 @ 20.04.2019. 21:03 ] @
U prilogu šaljem bazu koja je dopunjena sa više kupaca i vodomjera, pa bi te molio da nju koristiš za rad. Ja u Ponedjeljak putujem u bolnicu i nećemo se ćuti tjedan dana. Nadam se da će se uspjeti riješiti očitanja. Očitanja bi trebala biti za vodomjere koje imamo u bazi!!!
[ Zidar @ 10.06.2019. 22:13 ] @
Izvinjavam se za dugacku pauzu. Putovanje, zdravlje, posao, abogami i godine. Trebalo mi je ceo dan, 8 sati da sastavim WOrd document koji se nadam da cu uspesno zakaciti. Tu ce biti jasno zasto je Davorova baza dobra i trebaju samo neke izmene za pocetak, napravio sam ih. Aplikaciju naravno ne diram.

Ne zurite sa zahtevima za nastavak, ovo su prilicno ozbiljne stvari i nije lako shvatiti sta se desava. U svakom slucaju, imacu valjda malo vise vremena pa pauze nece biti tako duge.

Pozdrav svima

Zidar

[ dzaga29 @ 11.06.2019. 10:10 ] @
Zidar, drago mi je da si se javio. Ja nisam ništa radio od prošli puta i morat ću se podsjeti gdje smo stali ...
Citat:
trebaju samo neke izmene za pocetak, napravio sam ih.
pa te molim da mi objasniš kako bi znao što treba raditi. Nisam ažurirao bazu tako da ću motari upisivati nove kupce i nova vodomjene, a kod nekih kupaca su izmenjeni vodomjeri. Nadam se da ažurirana baza neće utjecati na tvoje izmene, ili mi kaži da ne ažuriram bazu. Ukratko, molim te da zajedniči krenemo od početka i da obrišemo sve tablice ili upite koji nisu potrebni za bazu.
[ Zidar @ 12.06.2019. 22:10 ] @
Pozdrav. Ne diraj nista u bazi, sutra cemo da podesimo ono sto je unutra i da pokazemo korake za upis iz Excela.

:-)
[ Zidar @ 26.06.2019. 22:28 ] @
"Sutra" je doslo kroz 15 dana :-(

EVo je skracena, veoma skracena verzija, ima samo minimalan broj tabela, da nam ne smeta 'sum'.

Imas tabele Vodomjeri, Ocitanja i Nova_Ocitanja_Iz_Excela.

Nova_Ocitanja_Iz_Excela je napravljena od neke Excel tabele, zadrzana samo polja koj nas interesuju. Mozes da ubacis i druga, ako bas treba, kasnije, ne sada.

Vodomjeri je manje vise ista kao na pocetku, ovde nam je potrebna samo da bi uspostavili relationship na Ocitanja - da uhvatiomo vodomjere za koje imamo citanje, a nisu u maticnoj tabeli Vodomjeri.

Ocitanja su isti kao tvoja originalna tabela, samo sam dodao Broj/PrethodniBroj, jer nam to treba da bi postavili ogranicenja.

Tabela redniBrojevi garantuje da ce se redni brojevi ocitanja za svaki vodomjer dodavati u rastucem redosledu, sa korakom jeadan, dakle 1,2,3,4... . To je omogucilo da Validation Rule za tabelu bude vrlo jednostavno, a to je da Datum_Ocitanja i Vrijednost (Stanje, Citanje sa vodomjera) ne smiju biti veci od prethodnih vrijednosti.

Napravio sam kveri koji prebacuju podatke iz Excela u Ocitanja [INFO_Add_Iz_Excela_u_Ocitanja_Z] query procita Excel tabelu, i sve sto ima u Excelu a nema u Ocitanja ce pokusati da prebaci. Koliko ce rekorda probati da prebaci, vidis iz kverija [INFO_Ovo_se_dodaje_iz_Excela_u_Ocitanja_Z]. Koji rekordi ne prodju, videces kada posle dodavanja ponovo otvoris [INFO_Ovo_se_dodaje_iz_Excela_u_Ocitanja_Z] - taj uvek pokazuje staimamo u Excelu a nemamo u Ocitanja. Dva su glavna razloga da [INFO_Add_Iz_Excela_u_Ocitanja_Z] ne prebaci sve rekords: 1) vodomjer u Excel tablici ne postoji u tablici Vodomjeri i 2) Novi datum_ocitanja i/ili vrijednost ne valjaju (duplikat ili Vrijednost<Prethdna_Vrijednost, ili Datum_Ocitanja < Datum_Prethodne vrijednosti. Nisam napisao kverije za dijagnostiku, to mozes sam da probas.

Ovo bi trebalo da pokrije ocitavanja vodomjera, da spreci ulaz nelogicnih podataka. Bez ovih ogranicenja vrlo je lako napraviti greske koje ne mozes ni pronaci ni ispraviti, a ocigledno je da postoje.

Kad ovo svaris, budes u stanju da sam dodajes podatke iz Excela i da se snalazis sa rekrdima koji nece da prodju (to ce biti uvek), onda cemo da se zabavimo kupcima, mjernim mjestima i slicno. Za sada, pretpostavlja se da znas kome treba poslatiracun za svaki ocitani vodomjer.

Toliko za sada, da ne obecavam nikakba "sutra"...

:-)