Citat:
tabela adresa ima: pk.idAdresa, ulica, broj, grad, zip
radnik ima : pk.idRadnika, sk.idAdresa, ime, prezime, mail, telefon...
primarni kljucevi su int(autoinkrement) a spoljni kljuc je int i nije auto inkrement.
Kako sad da formiram sql za unos podataka kad iz forme uzmem sve potrebne podatke vezane za radnika???
Jel dostoji neki lepsi nacin da se popune obe tabele odjednom ili prvo adresu pa da se izcita poslednji primarni kljuc tabele adresa
pa da se taj primarni kljuc doda u Sql upit, kao strani kljuc, za dodavanje radnika....
Ovde se radi o jednoj adresi i vise radnika. Prvo mora da se unese red u adresu, pa onda da se doda radnik (ili vise njih). Problem je sad sto ne znas spoljni kljuc - to je vrednost inkrementa koji je SQL napravio kad si insertovao adresu. No, iam i za to funkcija - ScopeIdentity(). kad to znas, sve je lako, teorijski
Ovako nekako moze da ide
Code:
-- ovo je naravno pseudo code
DECLARE @idAdresa
INSERT INTO Adresa (Ulica, Broj, Grad, ZIP)
SET @IDadresa = ScopeIdentity() -- ovo cita autoinkrement koji si dobio kad si izvrsio INSERT
-- onda unsese sve radnike koji pripadaju toj adresi:
INSERT INTO Radnik (@IDadresa, ime1, prezime1, mail1, telefon1...)
INSERT INTO Radnik (@IDadresa, ime2, prezime2, mail2, telefon2...)
INSERT INTO Radnik (@IDadresa, ime3, prezime3, mail3, telefon3...)
INSERT INTO Radnik (@IDadresa, ime4, prezime4, mail4, telefon14..)
Problem je naravno sto ne znas uvek koliko ce radnika da se unese, ako unosis vise od jednog, pa ovako u stvari nece moci. Na kraju ces verovatno zavrsiti tako sto ces nekoj stored proceduri poslati comma delimited string koji moze da izgleda ovako:
@string = 'ime1, prezime1, mail1, telefon1;ime2, prezime2, mail2, telefon2;ime3, prezime3, mail3, telefon3;ime4, prezime4, mail4, telefon14)
Primeti da string sadrzi podatke o vise radnika, svaka kolona odvojena zarezom, pa izmedju dva radnika dodje ;. Onda tvoja procedura ovaj string prvo rastavi na nekoliko redova(po jedan za svakog radinka, pa onda svaki red na kolone i na kraju dobijes tabelu koju insertujes u tabelu Radnik, posto si joj dodao @IDadresa = ScopeIdentity().
Nije prosto kad ima vise radnika...