[ barisha1 @ 22.11.2011. 10:41 ] @
pozdrav
Napravio sam u bazi tabele RadniNalog i KonfiguracijaArtikli kojima sam definirao da se primarni ključ sam upisuje(Autonumber).Napravio sam u infopathu obrazac na kojemu su dvije tabele,podaci o radnom nalogu(broj konfiguracije,napomena,gotovo,datum....) i podaci o artiklima(ser. broj,naziv,opis.....).Imam Submit dugme koje sam povezao sa web servisom.U tabeli Artikli imam strani ključ RadniNalog.Problem je što ne znam na koji način da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno.Može li se ovo napravit ili ima neki drugi način da se ovo napravi??Ako treba još nekih informacija ili kod samo recite.
[ nikitaGradov @ 24.11.2011. 15:53 ] @
Citat:
barisha1: pozdrav
Napravio sam u bazi tabele RadniNalog i KonfiguracijaArtikli kojima sam definirao da se primarni ključ sam upisuje(Autonumber).Napravio sam u infopathu obrazac na kojemu su dvije tabele,podaci o radnom nalogu(broj konfiguracije,napomena,gotovo,datum....) i podaci o artiklima(ser. broj,naziv,opis.....).Imam Submit dugme koje sam povezao sa web servisom.U tabeli Artikli imam strani ključ RadniNalog.Problem je što ne znam na koji način da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno.Može li se ovo napravit ili ima neki drugi način da se ovo napravi??Ako treba još nekih informacija ili kod samo recite.


>da pokažem artiklima da se vežu na radni nalog,tj da se u strani ključ upiše primarni koji pravim istovremeno

Ne znam sta podrazumijevas pod 'istovremeno' - scenario bi izgledao ovako:

- otvaras (prethodno kreiranu) transakciju (u transakciji su INSERT komande i za parent i za child tabelu)
- izvrsis INSERT u parent tabelu (u tvom slucaju radni nalog)
- ovaj INSERT napises tako da ti vrati ID poslednjeg upisanog reda (a to je ono sto tebi treba):
Code:

SET NOCOUNT ON
INSERT INTO parent (data1, data2,data3) VALUES (‘test’,’test’,123) SELECT @@Identity AS parent_id
SET NOCOUNT OFF


- napomena: @@Identity vraca ID poslednjeg INSERT-ovanog reda
- kreiraj INSERT komandu za child tabelu, koristeci vrijednost 'parent_id' za strani kljuc u child tabeli (kod tebe je to: Artikli)
- izvrsi INSERT u child tabelu
- komituj (Commit()) transakciju, ako je upis uspio, odnosno, ponisti (RollBack()), ako nije ...

Evo i u C#-u:
Code:

          //konkcija
          SqlTransaction SqlTrans = conn.BeginTransaction(IsolationLevel.RepeatableRead, "INSERT");
          //kreiramo query
          StringBuilder sbInsert = new StringBuilder();
                sbInsert.Append("SET NOCOUNT ON ");
                sbInsert.Append("INSERT INTO parent ");
                sbInsert.Append("(data1, data2,data3)");
                sbInsert.Append("VALUES (‘test’,’test’,123)");
                sbInsert.Append("SELECT @@Identity AS parent_id ");
                sbInsert.Append("SET NOCOUNT OFF ");
           //izvrsi komandu
                DataSet dataSet = new DataSet();
                SqlCommand cmd = new SqlCommand(sbInsert.ToString(), conn, SqlTrans);
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
                sqlDataAdapter.Fill(dataSet, "Parent");
                DataTable table = dataSet.Tables["Parent "];
              //ukoliko vrati ID 0 ili manje onda nije uspeo upis
                int transID = UInt32.Parse(table.Rows[0]["parent_id"].ToString());
                if (transID <= 0)
                {
                  MessageBox.Show(“Nije uspeo upis”);
                  SqlTrans.Rollback("INSERT");
                }
                else
                {
                  //ovde ide upis svih child redova
                  SqlTrans.Commit();
                }     


Ovaj kod je samo skica - tvoje je da ga prilagodis tvom zahtjevu ...

[ barisha1 @ 24.11.2011. 19:18 ] @
hvala na odgovoru.malo ću istražiti ovo i probat napravit pa javim kako ide