Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom

[es] :: Access :: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom

[ Pregleda: 2122 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

rribaric
romano ribarić
rijeka

Član broj: 31410
Poruke: 165
*.net.htnet.hr.



Profil

icon Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom04.11.2004. u 16:12 - pre 237 meseci

Imam ovakav problem:
Radim program za ulaz –izlaz robe s skladista.
Imam formu u kojoj unosim podatke po racunima (primkama),gdje sve unosim u bazu ulaznih racuna-tablice su pod 1.,također na isti princip unosim podatke za izlazne racune(po uzdatnicama),funkcionira super.Elementi su povezani sifrarnikom za artikle.Nadam se da je ovo otprilike jasno .Nisam naveo sva polja koje koristim radi lakseg prezentiranja problema.

Ali to izgleda otprilike ovako:

1.Tablice ulaza: "ulazniRacuni" [ulazniRacuni].[Datum_racuna] i " Elementi" s poljima Sifra_artikla i Kolicina.
Veza 1:mnogo , PK je ID

Tablice ulaza:" tblizlaznielementi" polje Datum_izlaza i " tblizlaznielementi" s poljima IZ_Sartikla i IZ_Kolicina.
Veza 1:mnogo ;

Gdje su IZ_Sartikla i Sifra_artikla polja u koje unosim sifru artikla iz sifrarnika.Znaci polja koja su sifrirana iz istog sifrarnika.
Jer za svaki artikl imam ulaz i izlaz s skladista.

Moram dobit ovakav report:

Sifra Artiklal UL_TOTAL IZ_TOTAL

1 Cipele 100 20
2 tenisice 200 10
3. papuče 50 20
4…….………….

Artikl se vuče s dlookup("artikal","sifrarnik_artikla",rb=reports!…..)


U modulu definiram globalnu promenljivu SQL izraz: :
Public SQL_Report As String

Za report Open event promjenim RecordSource:

Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = SQL_Report
End Sub
A u formi imam kod u kojem izvrsavam upit:
txtdatum_Od i txtdatum_DO su unbound polja u formi koja mi sluze za unos datumskih kriterija.

Ovo je sql s kojim dobivam rezultat za izlazne racune(izlaz):

SQL_Report= " SELECT [tblizlaznielementi].[IZ_SArtikla], SUM([tblizlaznielementi].[IZ_Kolicina]) AS IZ_TOTAL "
SQL_Report=SQL_Report & " FROM tblizlazniracuni INNER JOIN tblizlaznielementi ON [tblizlazniracuni].[ID]=[tblizlaznielementi].[ID] "
SQL_Report=SQL_Report & " WHERE [tblizlazniracuni].[Datum_izlaza] BETWEEN " & DateToStr(Me!txtdatum_OD) & " AND " & DateToStr(Me!txtdatum_DO) SQL_Report=SQL_Report & " GROUP BY [tblizlaznielementi].[IZ_SArtikla] "
SQL_Report=SQL_Report & " ORDER BY [tblizlaznielementi].[IZ_SArtikla];"

Rezultat:

Sifra Artiklal IZ_TOTAL

1 Cipele 20
2 tenisice 10
3. papuče 20
4…….………….


Ovo je SQL s kojim dobivam rezultate ua ulazne racune(ulaz).

SQL_Report =" SELECT [Elementi].[Sifra_artikla], sum([Elementi].[Kolicina]) AS UL_TOTAL"
SQL_Report =V & " FROM ulazniRacuni INNER JOIN Elementi ON [ulazniRacuni].[ID]=[Elementi].[ID]"
SQL_Report = SQL_Report & " WHERE [ulazniRacuni].[Datum_racuna] BETWEEN " & DateToStr(Me!txtdatum_OD) & " AND " & DateToStr(Me!txtdatum_DO) "
SQL_Report = SQL_Report & " GROUP BY [Sifra_artikla] "
SQL_Report = SQL_Report & " ORDER BY [Sifra_artikla];"

Rezultat:

Sifra Artiklal UL_TOTAL

1 Cipele 100
2 tenisice 200
3. papuče 50
4…….………….
Kako napravit sql izraz iz ova dva da bi dobio kompletni izvještaj(ulaz i izlaz po artiklu).
Znači ove dvije tablice moraju biti povezane preko sifre artikla.


romano
 
Odgovor na temu

rribaric
romano ribarić
rijeka

Član broj: 31410
Poruke: 165
*.net.htnet.hr.



Profil

icon Re: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom04.11.2004. u 16:30 - pre 237 meseci
Ja to zamisljam na ovaj nacin.Putem prvog SQL napravit tablicu s rezultatima tog upita i smjestit u neku recimo Dupla_izlaz gdje bi imao:
Sql="SELECT [tblizlaznielementi].[IZ_SArtikla], SUM([tblizlaznielementi].[IZ_Kolicina]) AS IZ_TOTAL "
Sql=sql & " INTO Dupla_izlaz ..................

Sifra Artiklal IZ_TOTAL

1 Cipele 20
2 tenisice 10
3. papuče 20
4…….………….

A s drugim SQL dobijem ovakvu tablicu Duplo_ulaz:
Sql=" SELECT [Elementi].[Sifra_artikla], sum([Elementi].[Kolicina]) AS UL_TOTAL"
Sql=sql & " INTO Dupla_izlaz ..................

Sifra Artiklal UL_TOTAL

1 Cipele 100
2 tenisice 200
3. papuče 50
4…….………….


Pošto u jednom redu trebam dobit podatke za svaki pojedini artikal riješenje bi bilo sljedeće:Da također sa još jednim SQl povežem te dvije tablice a kriterij da bude Sifra_artikla.
SQL= " SELECT [Dupla_izlaz].[IZ_SArtikla], [Dupla_izlaz].[IZ_TOTAL], [Dupla_ulaz].[Sifra_artikla], [Dupla_ulaz].UL_TOTAL "
Sql=sql & " FROM Dupla_izlaz, Dupla_ulaz "
Sql=sql & " WHERE [Dupla_ulaz].[Sifra_artikla]= [Dupla_izlaz].[IZ_SArtikla]"

Po meni bi rezultat toga bila spojena tablica.
Ovaj zadnji code nisam isprobao na primjeru,ali mislim da radi!

Sifra Artiklal UL_TOTAL IZ_TOTAL

1 Cipele 100 20
2 tenisice 200 10
3. papuče 50 20
4…….………….

Problem je sto tablice s elementima znaju biti jakol velike(po 300-400 ulaznih racuna sa odprilike 20 elemenata).Što 6000-8000 elemenata za ulaz iu isto toliko za izlaz.
Pa bi ovo brisanje i stvaranje tablica dugo trajalo .Dali ima neko pametnije rijesenje za ovu problematiku.
Nadam se da sam dobro iznio svoj problem.
Hvala unaprijed svima na trudu i paznji!

romano
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom04.11.2004. u 17:46 - pre 237 meseci
Ponovo ne treba programiranje. Zamisli kveri koji lista SVE artikle iz tabele tblSifranik_Artikli i vrednosti iz tableic UlazniElementi. Ako u tablic UlazniEleemnti ne postoji ni jedan rekord za neki artikl, kvari povlaci NULL vrednosti. Prouci u literaturi LEFT OUTER JOIN. kveri bi izglado otprilike ovako:
qryUlazniRacuni:
Code:

SELECT A.ArtiklID,E.RacunID,E.Kolicina
FROM tblSifranik_Artikli AS A
LEFT OUTER JOIN tblRacunUlazniElementi AS E ON E.ArtiklID=A.ArtiklID

To bi trebalo da ti da SVE rekorde iz tabele tblSifranik_Artikli. Ako ne postoji odgovarajuci rekord u tabeli tblRacunUlazniElementi , polja E.RacunID,E.Kolicina bice prazna - imace sadrzaj NULL values. Ako napravis isti takav kveri za tabelu tblIzlazniEleemnti, mozes ta dva kverija da JOIN i rezultujuci kveri imace polja ArtiklID i polja za identifikaciju ulaz i izlaza. Nazovi rezultujuci kvery qryTotalDetail.
qryIzlazniRacuni:
Code:

SELECT A.ArtiklID,I.RacunID,I.Kolicina
FROM tblSifranik_Artikli AS A
LEFT OUTER JOIN tblIzElementi AS I ON I.ArtiklID=A.ArtiklID

qryTotalDetail:
Code:

SELECT 
U.ArtiklID,U.RacunID AS UlazID ,U.Kolicina AS Kol_Ulaz,
I.RacunID AS IzlazID ,I.Kolicina AS Kol_Izlaz
FROM qryUlazniRacuni AS U
INNER JOIN qryIzlazniRacuni AS I

Sad napravis qryTotal kao:
Code:

SELECT ArtiklID, SUM(Kol_Ulaz) AS UlazTot, SUM(Kol_Izlaz) AS IzalazTot
GROUP BY ArtiklID


Baziraj svoj report na kveriju qryTotal i gotov posao. Nema programiranja, nema Global varijabli (losa praksa u programiranju), nema nista.

Slutim da ce sledece pitanje biti "a kako da sve ovo uradim za zadati opseg datuma". Tesko, jer je dizajn baze neodgovarajuci. Trebaju ti samo dve tabele: tblRacuni i tblElementi. tblRacuni ima polja RacunID (PK), Datum, TipRacuna. TipRacuna je kljuc za resenje problema - moze imati vrednosti "Ulaz" i "Izlaz". forma koja radi unos ulaza dodeljuje tom polju vrednost "Ulaz", forma za izlaz doeljuje "Izlaz". Onda upotrebis cross-tab kveri qryUlazIzalazXtab da ti prikaze isto sto i qryTotalDetail. Ovim setdis ona prva dva kverija. A imas i datum ukljucen u igru. Onda uradis LEFT JOIN sa tabele tblArtikli_Sifranik na novi kveri qryUlazIzalazXtab i eto ti source za report, zajedno sa datumom, koji mozes da koristis u DoCmd.OpenReport sa WhereCondition.

The best programming is no programming at all. :-)
 
Odgovor na temu

rribaric
romano ribarić
rijeka

Član broj: 31410
Poruke: 165
*.net.htnet.hr.



Profil

icon Re: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom04.11.2004. u 22:22 - pre 237 meseci
Hvala zidar,tvoja objašnjenja su mi vodilja!
Mislim da mi je sad ovo puno jasnije.
Vidim da sam postavio krivo bazu.Ova ideja s dvije tablice tblelementi I tbracuni mi se sviđa I koliko ja vidiom i koliko znam(???) mislim da bi to bilo riješenje za moje probleme .
Kad sam postavljao bazu nisam računao na ovakvu silnu zavrzlamu oko SQL i njegovih kriterija.Još sam zelen u tome,ali se trudim.

Trebat ce mi malo vremena da sve sat dome prilagodim ali vidim da ću puno bedastoća izbjeć.Ti vremenski kriteriji mi zadaju glavobolju ( a sta ce bit kad jos kad dodam I kritrij po sifr_artikla)a na taj način s samo dvije tablice I poljem koji označava dali je ulaz ili izlaz .
Pitanje?
Kad da aktiviram pisanje u polje dali je ulaz ili izlaz.Da to odredim kod potvrde unosa računa ili kod aktiviranja forme .Dali da označim kao “izlaz” ili recimo 1 za izlaz a 2 za ulaz.
Što mi predlažeš za to koji kod da koristim za to upisivanje(ulaz ili izlaz)?
Možda bolje pitat prije nego nakon što napravim veći dio posla!Imaš kakvu smjernicu na što da obratim pozornost kod toga!

Što se tiče Global varijabli (losa praksa u programiranju)-prihvatio sam najbrži način koji sam mogao svladat,ali bez brige imam ja I tvoje objašnjenje za to pa ću ga za koji dan provest u dijelo.

Zijah Sokolović u jednom filmu kaže:”Svakim danom u svakom pogledu sve više napredujem!!!”

romano
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom05.11.2004. u 13:40 - pre 237 meseci
Zijo Sokolovic je genije, ili kak u Bosni kzu - legenda.

Sto se tice Ulaz/Izlaz pitanja, ja bih to razdvojio u dve forme. Napravis prvo jednu, recimo za Ulaz. Sav kod, validacija podataka, before_update, i ostalo. Kontrola "TipRacuna" treba da je Read Only (Enabled=TRUE, Locked=TRUE) i da ima default value = "Ulaz". Druga forma, za IZlaz, bi bila identicna formi za ulaz, samo bi TipRacuna.DefaultValue bilo "Izlaz". U praksi verovatno drzis papire za Ulaz (Prijamnica?) i papire za Izlaz (Otpremnica?) odvojene jedne od drugih. Verovatno da ih i unosis odvojeno, prvo sve ulaze, pa onda sve izlaze. To su dakle dve potpuno odvojene nezavisne operacije. Sa neke glavne forme (switchboard) mozes da pozivas jednu ili drugu.

Medjutim ,odrzavanje dve identicne forme koje se razlikuju samo u jednom detalju nije prakticno. Uvek se nadje nesto da se popravi ili doda, pa onda to moras da radis na dva mesta, i cesto se to zaboravi i eto nevolje. Zato predlazem da imas samo jednu formu, na primer frmUlazIzlaz, ali da je pozivas sa switchboarad sa dva razlicita dugmeta. Razlika bi bila u DoCmd.OpenForm .... OpenArgs. Iskoristis OpenArgs da formi frmUlazIzlaz posaljes "parametar", string "Ulaz" ili "Izlaz". U event proceduri OnLoad za frmUlazIzlaz kazas nesto kao

Me!Tipracuna.DefaultValue=Me!OpenArgs

NA formi frmUlazIzlaz treba da imas dugme "Novi Record" koje kliknes kad si gotov sa jednim papirom i ides na sledeci. OnLoad se desio samo jednom, kad si formu prvi put pozvao i tad si postavio DeafaultValue za tvoj Tipracuna. Mozes u istom OnLoad da promenis Form.Caption, da kaze "Ulaz" ili "Izlaz", ili da imas neku labelu na formi koja kazuje jasno trenutnu funkciju forme. Mozes i da promenis pozadinu Detail sekcije, da bude na primer zelena za ulaz i crvena za izlaz. Na taj nacin korisnik zna razliku izmedju dve operacije i mogucnost greske se minimizuje.

:-)
 
Odgovor na temu

rribaric
romano ribarić
rijeka

Član broj: 31410
Poruke: 165
*.net.htnet.hr.



Profil

icon Re: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom05.11.2004. u 16:50 - pre 237 meseci
Hvala zidar na detaljnim objasnjenjima.Ovo zadnje ce mi jako dobro doci.Dao si mi dosta ljepih i prakticnih rijesenja.
Bez ovog foruma ja bi i dalje bio na pocetku accessa ovako cu na moje veliko veselje i nesto naucit!

Za konstrukciju baze na temelju krirerija ulaz-izlaz,svaka cast -to mi nikad nebi palo na pamet jer jos nemam neku praksu u organiziranju same baze podatak.
Ova naredba LEFT JOIN je odlicna s njom sam rijesio veliki dio problema.
Idem sad sljedit tvoje upute pa kad zaskripi javim ti.
Vec sad vidim da ce biti nekih pitanja oko konacnog SQL za report ali otom potom.
Postavit cu problematiku na forum pa cemo vidjet dali se da rijesit.
Romano!
romano
 
Odgovor na temu

[es] :: Access :: Kako napravit sql za podatke iz dvije tablice poveyane s istom sifrom

[ Pregleda: 2122 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.