Evo rešenja koje radi za unos master-detail zapisa iz jedog klika (bez keširanog
update-a a možda može i sa njim nisam probao),koliko da zatvorimo ovu temu, možda
je slično nečemu što je gore napisano ali me sad mrzi da čitam a ide ovako:
1) napravi se "kontrolni" master zapis koji ima samo ID,bez drugih podataka
2) unose se detail stavke u dbgrid ali se ostavlja ID null (generator na serveru
inkrementira ID) i stavi se ID "kontrolnog" master zapisa, ove vrednosti se
dodeljuju DataSet-u u OnNewRecord eventu
3) pritiskom na dugme npr. "Potvrdi" ili sl. prvo se pokreće snimljena procedura
koja vraća ID novog master zapisa i koja se odmah commit-uje
3a) odmah zatim glavni upit (koji unosi detail stavke) ucitava iz .sql fajla update SQL
za detail tabelu koji sadrži parametar za ID master zapisa i njemu se dodeljuje
vrednost koju je vratila procedura, tako da se prepisuje vrednost onog kontrolnog
zapisa i sad imamo tačnu vrednost ID master zapisa u detail zapisu
3b) Commit-uje se transakcija za glavni DataSet.
Loša strana je to što transakcija glavnog DataSet-a (koji unosi detail zapise) stoji
otvorena odmah po otvaranju DataSet-a i dok traje unos stavki,a zatvara se tek po potvrdi
svih unosa (mada se ovde može staviti neki timeout za transakciju,npr. OnIdleTimer event, pa
se stavi neka ljubazna poruka korisniku da ne gnjavi sa unosom,posle čega mora da ponovi
celu stvar).
U mreži drugi korisnik (valjda) ne može promeniti moj zapis iako mogu imati isti ID "kontrolnog"
zapisa zato što se sve odigrava unutar moje i njegove transakcije.Izgleda da IBX ne može
da drži DataSet otvorenim ako transakcija nije aktivna.
Ag + Na -> Xe