[ srdjan_m @ 29.03.2010. 14:43 ] @
Imam problem sa prebacivanjem jednog tipa upita iz MS SQL u MS Access (2003) pa bih zamolio članove koje imaju ideju kako se ovo može rešiti.
U pitanju je aplikacije koja je radila u okruženju VB6/SQL server 2000 i koju prebacujem u Access.

Tabele:

Blagajna
-brojBlagajne*
-zaposleniID
-firmaID
-mesecID
.
.
Firma
-firmaID*
-nazivFirme
-adresa
.
.
Zaposleni
-zaposleniID*
-ime
-adresa
.
.
Mesec
-mesecID*
-naziv

Za svaki zapis u tabeli "Blagajna" se navodi ili ime firme ili ime zaposlenog zbog čega Inner Join ne "igra ulogu". Polje "MesecID" je obavezno tako da postoji za svaki zapis u tabeli "Blagajna".

Upit koji funkcioniše u SQl Serveru:

Select Blagajna.brojBlagajne, Firma.nazivFirme,Zaposleni.ime, mesec.naziv
From Blagajna Inner Join Mesec ON Blagajna.mesecID = mesec.mesecID
Left Join firma ON Blagajna.firmaID=firma.firmaID
Left Join zaposleni ON Blagajna.zaposleniID=zaposleni.zaposleniID
Where........

Hvala

[Ovu poruku je menjao srdjan_m dana 30.03.2010. u 08:14 GMT+1]

[Ovu poruku je menjao srdjan_m dana 30.03.2010. u 08:14 GMT+1]
[ Zoran.Eremija @ 29.03.2010. 15:09 ] @
U tabeli Blagajna stoji vam treceLiceID?????

Ili je neka greska ili je taj atribut u nekoj vezi s necim??? S cime, ne vidi se, jer iz selecta koji ste naveli ne mogu da protumacim?!?!

Jedna od pretpostavki je da je mozda autor u to polje smestao ili podatak iz Firma.FirmaID ili podatak iz Zaposleni.ZaposleniID?!?!?!

Ako je to tako onda je morao problem jedinstvenosti da razresi na nivou podatka ili zona IDent brojeva i svakako kroz aplikaciju da regulise iz izbor unosa.

Znaci prvo da razjasnimo taj problem a onda problem samog upita, iako se iz upita vidi drugacija struktura tabele Blagajna?!?!?!?

[Ovu poruku je menjao Zoran.Eremija dana 29.03.2010. u 16:21 GMT+1]
[ srdjan_m @ 30.03.2010. 07:13 ] @
Izvinjavam se, moja greska pri pisanju. Zamenio sam to polje za polje "zaposleniID".

U svakom slucaju, aplikacija je u VB6 i treba da se kaci na Access bazu. Kroz aplikaciju se unose kroz tri posebne DataCombo kontrole podaci o firmi ILI zaposlenom ILI trecem licu (osoba van firme) odnosno za koga je vezan trosak iz blagajne i tu nema nikakvih problema kod unosa podataka. Problem je u pregledu istih putem Data Grid kontrole jer access ne podržava formu upita koji sam naveo u prvom postu, a koji je sasvim funkcionalan u SQL serveru. Naravno, ako bih sve te tabele vezao Inner Join-om ne bih nikada u rezultatu dobio ni jedan zapis s obzirom da u svakom od zapisa figuriraju podaci o firmi, zaposlenom ili trecem licu ALI samo jedan od njih, i nikada svi zajedno.
[ Zoran.Eremija @ 30.03.2010. 08:44 ] @
Pretpostavljao sam. Ako je vrednost atributa MesecID NotNull a ostali mogu biti Null zbog prirode stvari tj u jednoj n-torci se ne zna ko ce biti ucesnik u blagajni tako da preostali atributi moraju biti Null. Posto je entitet Blagajna dominantan tj. zelimo imati potpunu informaciju dogadjaja u blagajni tada veze u upitu moraju biti kao u prikazanom selektu

SELECT Blagajna.BrojBlagajne, Firma.NazivFirme, Zaposleni.Ime, Mesec.Naziv
FROM Zaposleni RIGHT JOIN (Firma RIGHT JOIN (Mesec INNER JOIN Blagajna ON Mesec.MesecID = Blagajna.MesecID) ON Firma.FirmaID = Blagajna.FirmaID) ON Zaposleni.ZaposleniID = Blagajna.ZaposleniID;

Primer je dat u prilogu.


Ako je jos prisutno i trece lice tada je model drugaciji i upit je sledeci

SELECT Blagajna.BrojBlagajne, Mesec.Naziv AS NazivMeseca, Firma.NazivFirme, Zaposleni.Ime AS ZaposleniIme, TreceLice.Ime AS TreceLiceIme
FROM TreceLice RIGHT JOIN (Zaposleni RIGHT JOIN (Firma RIGHT JOIN (Mesec INNER JOIN Blagajna ON Mesec.MesecID = Blagajna.MesecID) ON Firma.FirmaID = Blagajna.FirmaID) ON Zaposleni.ZaposleniID = Blagajna.ZaposleniID) ON TreceLice.TreceLiceID = Blagajna.TreceLiceID;



[Ovu poruku je menjao Zoran.Eremija dana 30.03.2010. u 09:56 GMT+1]
[ srdjan_m @ 30.03.2010. 11:44 ] @
Hvala ti čoveče, spasao si me -:)
Rešio sam to na neki drugi način ali onda taj deo aplikacije estetski ružno (zbog te budzevine) toga tako da se vraćam na ovo što mi je trebalo i što si mi poslao.
Hvala još jednom
[ Zoran.Eremija @ 30.03.2010. 12:39 ] @
E tu nije kraj price...
Vas primer je klasican primer potrebe postavke drugacijeg modela podataka. Problem vise ucesnika kao u vasem primeru blagajne a ima i drugih situacija u realnom svetu resava se primenom modela generalizacije i specijalizacije. Otprilike bi to u vasem slucaju izgledalo kao u prilogu.