[ drgajic12 @ 24.01.2011. 13:02 ] @
Napravim novi zapis u bazi sa sledecim kodom:
Code:

            DataRow red = dataSet11.Proizvodi.NewRow();
            red["naziv"] = "Neki naziv";
            red["kolicina"] = "5";
            dataSet11.Proizvodi.Rows.Add(red);
            proizvodiAdapter.Update(dataSet11);


E sad,ako pokusam da tako tek napravljen zapis promenim,tj. da promenim vrednost bilo kog polja u njemu,a to polje nije ni primarni kljuc niti je vezano sa bilo cim i pokusam da tu promenu sacuvam sa:

proizvodiAdapter.Update(dataSet11)

prijavljuje mi sledecu gresku i naravno ne promeni vrednost u bazi:

DBConcurrencyException was unhandled
Concurrency violation: the UpdateCommand affected 0 of the expected 1 records

Pretpostavljam da treba da dodam neki kod pre ili posle update-a,da sacuva sve promene ili da osvezi neku komponentu,nesto,da bi drugi update mogao da kasnije odradi svoj posao.
Ukoliko restartujem aplikaciju nakon pravljenja novog reda,onda sve radi kako treba,ali to mi pravi veliki problem,jer ne moze klijent sad da restartuje aplikaciju svaki put kad unese novi zapis.

Sta raditi?



[ lonelyrider_44 @ 24.01.2011. 13:33 ] @
Shta ti znachi taj deo da sve radi kako treba nakon restartovanja ?
Dodavanje proradi ili.. ? Na osnovu onoga shto sam radio sa access bazom u
C#, adapteru treba da dodelish sql insert naredbu, znachi da napravish
string sa insert naredbom, dodelish ga OleDbCommand objektu, a ovaj
OleDbDataAdapeter.InsertCommand propertiju. Znachi za bilo kakav update,
mora da postoji sql naredba u adapteru i ovo shto si uradio (azuriranje
dataset-a) pa tek onda da pozovesh Update f-ju.

--
Using Opera's revolutionary email client: http://www.opera.com/mail/
[ drgajic12 @ 24.01.2011. 15:16 ] @
Nakon restartovanja aplikacije i taj red koji je bio zadnji ubacen moze da se menja.Adapter valjda sam pravi insert,delete i update naredbe,nikad nisam morao da ih kucam.

DataRow red = dataSet11.Proizvodi.NewRow();
red["naziv"] = "Neki naziv";
red["kolicina"] = "5";
dataSet11.Proizvodi.Rows.Add(red);
proizvodiAdapter.Update(dataSet11);
On na osnovu ovoga sam generise insert naredbu i odradi sve kako treba,sljaka mi posle izmena podataka za sve osim za sveze ubacene od starta aplikacije kada hocu nakon ubacivanja da ih menjam.
[ Boris B. @ 24.01.2011. 21:25 ] @
Jel koristis triggere? DBconcurrency greska koju pominjes se pojavljuje kada se podaci u bazi promene "iza ledja" aplikacije, jedan od tipicnih nacina za to su triggeri (mada iskreno ne znam ni da li ih Access ima, bezim od Accessa ko djavo od krsta). A moze da bude jos milion drugih razloga, najcesce pozivanje Update-a nekog drugog adaptera koji je povezan na istu bazu.

U svakom slucaju stavi breakpoint posle tog adapter.Update kada dodajes novi red, kada se breakpoint okine pogledaj vrednost promenjive "red" u debageru a onda idi u bazu i uporedi taj red sa onim sto je zaista napisano.
[ drgajic12 @ 25.01.2011. 06:53 ] @
Nasao sam resenje.Kad odradi prvi Update,tj. unese novi zapis u bazu,treba da pozovem odmah posle toga Fill metodu da bi on u dataset ubacio i taj novokreirani red da bi mogao da ga menjam dalje.A nakon restartovanja aplikacije bi mi editovanje tog novog reda proradilo jer mi se pri startu aplikacije poziva Fill metoda,pa on tada pokupi i najnovije redove.