[ itf @ 06.05.2010. 12:17 ] @
Imam problem koji me muči već neko vrijeme pa ako itko ima iskustva s time bio bih zahvalan. Naime, napravio sam jednu DB klijent aplikaciju koja se koristi u konkurentnom višeklijentskom okruženju (svi odjednom mogu pristupiti svim zapisima). Aplikacija treba generirati neke potvrde koje u zaglavlju imaju serijski broj. Svaki put kad se izda nekakva potvrda onda se serijski broj poveća za 1 (serijski broj se zapisuje u bazu). I to bi bilo sve super da aplikaciju ima samo jedan korisnik, ali njih je uvijek minimalno 6 koji rade paralelno s tom bazom i svi žele generirati potvrde. I sad je moj problem kako zapravo osigurati da se serijski brojevi generiraju ispravno tj. jedan po jedan bez obzira na višeklijentski rad i konkurentnost.

Zapravo, problem podsjeća na threading i kritičnu sekciju u kojoj treba povećati serijski broj za jedan, ali ovo je na nivou baze pa bi trebalo nekako ručno jednom korisniku dopustiti da izda potvrdu (i generira sljedeći serijski broj) pa da onaj sljedeći korisnik vidi taj novi serijski broj i generira sljedeći itd... Nadam se da ste me razumijeli.. Treba bi zapravo ono što je ID (autonumber), ali koliko sam primjetio autonumber se ponaša čudno i nekada kreće brojati od početka a nekada odostraga itd.. i to mi nije pouzdano. Ideje?

Inače, koristim BCB i ADO. Hvala
[ RF MasterX @ 06.05.2010. 15:37 ] @
Pa to znaci da ne trebas koristiti Autonumber vec trebas napraviti posebnu kolonu u kojoj ce
aplikacija upisivati broj i eventualno informaciju o tome da podatke u tom row-u trenutno upisuje
neki klijent ili ne, ja sam pre nekoliko godina pisao Telefonski imenik i imao sam probleme sa
Autonumber a to reshih na isti nachin koji sam predlozio tebi.
[ itf @ 06.05.2010. 16:44 ] @
To ne radi ako više klijenata u isto vrijeme pristupi jednom zapisu. Usto, klijenti imaju tek kopiju podataka u aplikaciji a tek na update se spajaju na bazu.
[ Mihajlo Cvetanović @ 06.05.2010. 17:07 ] @
Pretpostavljam da bi tu trebalo da postoji neka stored procedura kojoj je posao da ubaci novi slog tako da na odgovarajućem mestu ubaci i odgovarajući serijski broj. U toj stored proceduri bi mogao da držiš brojač u jednoj posebnoj tabelici, i da inkrementiraš taj brojač sa svakom transakcijom.
[ itf @ 06.05.2010. 17:23 ] @
Ne bih volio uvoditi stored procedure ako to baš nije nužno jer pokušavam da aplikacija bude neovisna od baze. No ako baš treba može i tako jer je baza SQL Server 2005 (standard edition).