[ ZoranV @ 15.04.2011. 06:57 ] @
Pokušavam da napravim relaciju dve tabele i to uspeva, ali snimanje nikako. Mogu da snimim jednu (Radnici) ali drugu (Satnicu) ne javlja grešku
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
Evo koda

Code (csharp):
        OleDbConnection konekcija;
        OleDbDataAdapter daR;
        OleDbDataAdapter daS;
        DataSet ds;
        BindingManagerBase bmb;
        BindingManagerBase bmb1;
       
        private void Form1_Load(object sender, EventArgs e)
        {
            konekcija = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = Plata.mdb");
            konekcija.Open();
            OleDbCommand KomandaR = new OleDbCommand("SELECT * FROM Radnici ORDER BY ID;", konekcija);
            daR = new OleDbDataAdapter();
            OleDbCommand KomandaS = new OleDbCommand("SELECT * FROM Satnica;", konekcija);
            daS = new OleDbDataAdapter();
            ds = new DataSet();
            daR.SelectCommand = KomandaR;
            daR.Fill(ds, "Radnici");
            daS.SelectCommand = KomandaS;
            daS.Fill(ds, "Satnica");
            DataRelation RelRadSat = new DataRelation("RadSat",ds.Tables["Radnici"].Columns["JMBG"], ds.Tables["Satnica"].Columns["JMBG"],true);
            ds.Relations.Add(RelRadSat);
            bmb =BindingContext[ds,"Radnici"];
            bmb1 = BindingContext[ds, "Satnica"];
            txtPrezime.DataBindings.Add("Text",ds,"Radnici.Prezime");
            txtIme.DataBindings.Add("Text", ds,"Radnici.Ime");
            txtSatRed.DataBindings.Add("Text", ds, "Radnici.RadSat.SatRed1");
            txtSatBol.DataBindings.Add("Text", ds, "Radnici.RadSat.SatBolov1");
            txtSatBo.DataBindings.Add("Text", ds, "Radnici.RadSat.SatGO1");
        }

        private void btnNazad_Click(object sender, EventArgs e)
        {
            bmb.Position--;
        }

        private void btnNapred_Click(object sender, EventArgs e)
        {
            bmb.Position++;
        }
       
        private void btnSnimi_Click(object sender, EventArgs e)
        {
            OleDbCommandBuilder SnimiR = new OleDbCommandBuilder(daR);
            daR.Update(ds, "Radnici");
            OleDbCommandBuilder SnimiS = new OleDbCommandBuilder(daS);
            daS.Update(ds, "Satnica");
            daR.UpdateCommand = SnimiR.GetUpdateCommand();
            daS.UpdateCommand = SnimiS.GetUpdateCommand(); //ovde javlja grešku      
            Application.Exit();
        }


[Ovu poruku je menjao mmix dana 15.04.2011. u 12:49 GMT+1]
[ mmix @ 15.04.2011. 12:19 ] @
Problem nije to relacije, problem je bas onaj koji pise u gresci. Da bi OleDbCommandBuilder mogao da napravi update komandu mora da postoji kljuc koji identifikuje red (posto on ide u WHERE kaluzulu).

Koja polja u obe tabele su ti kljucevi? Pretposvljam da je kljuc u radnik JMBG a koji je kljuc u satnice? Moze i kompozitni (iz vise polja)



I btw, gledaj da portujes svoje aplikacije sa Accessa na nesto drugo (compact ili express ili nesto trece)
[ ZoranV @ 15.04.2011. 13:34 ] @
U obe tabel je ključ JMBG.

Zadnji red
Citat:
I btw, gledaj da portujes svoje aplikacije sa Accessa na nesto drugo (compact ili express ili nesto trece)

Nisam razumeo.

[Ovu poruku je menjao mmix dana 15.04.2011. u 14:54 GMT+1]
[ mmix @ 15.04.2011. 13:53 ] @
Access je zastareo i nije vise podrzan kao RDBMS za desktop aplikacije.


Drugo, ako imas bar dve satnice za jednog radnika JMBG ne moze da bude kljuc za satnice (jer ces imati dva reda sa istim kljucem)
Sem toga izbegavaj JMBG kao kljuc, nije jedinstven.