Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pitanje u vezi sa TDataSet

[es] :: C/C++ programiranje :: Pitanje u vezi sa TDataSet

[ Pregleda: 2479 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.adsl-1.sezampro.yu.



+4 Profil

icon Pitanje u vezi sa TDataSet19.01.2007. u 13:54 - pre 210 meseci
Da li moguće uneti slog u DBGrid a ne postovati odmah podatke na server, tj.
unositi više stavki, pa tek onda sve to postovati odjednom? Drugim rečima,
može li se zaobići onaj Post() odmah po unosu sloga direktno u DBGrid.
Ag + Na -> Xe
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 17:30 - pre 210 meseci
Koliko je meni poznato (nisam 100% siguran), tako nešto nije moguće na direktan način. Naime,
TDBGrid je data-aware komponenta, koja *mora* da poštuje pravila o indeksima, ključevima i sl.,
koji su prosleđeni od baze. Drugim rečima, ne može se ići dalje dok trenutni slog ne ispuni uslov
o projektovanoj ispravnosti. Kada bi to bilo moguće, onda bi to značilo da se privremeno narušava
intergritet, što je van pameti.

Zaobilazno rešenje je moguće. Na primer, uvek možeš napraviti privremenu (lažnu) tabelu istog
formata, koja bi služila za unos. Možeš da iskoristiš (pretpostavljam) isti DBGrid, koji ćeš usmeriti
na drugi DataSource.

Dakle, stisneš neki EDIT koji kopira stvarne podatke iz prave tabele u privremenu. Grid usmeriš
na taj novi DataSource. Lažna tabela ima npr manje provera, i sl.

Kada je sve završeno, nekim tasterom Save, možeš pokušati da snimiš (preneseš) redom sve slogove
iz privremene tabele/grida. Ono što se uspešno Post()uje, neka se ukloni, a ono što ne može neka
ostane u tom privremenom gridu za proveru.

Ukoliko su svi upisi bez izuzetka bitni, onda koristi sesije/transakcije.

 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 18:06 - pre 210 meseci
Ako koristis TClientDataset i dbExpress,TAdoQuery i ostale ADO komponente tada je moguce 100%.
Za ado queryje stavi da ti je zakljucavanje bacth optimistic, to mozes u dizajneru. Kada okines upit,tada prevlacis podatke na klijenta, on menja podatke i zatim postuje promene serveru. Pogledaj metodu UpdateBatch kod Ado datasetova i njegovih naslednika - sluzi za postovanje promena.
Pozdrav.
RTFM
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 20:42 - pre 210 meseci
hmmm... meni batch optimictic i UpdateBatch nije radilo valjano...

Jedino sto mi se pokazalo elegantno i 100% kvalitetno je zapocinjanje transakcije i njen commit ili rollback...

Mr. Rejn , Moj je prijedlog da se tako odradis ovo...
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.ppp-bg.sezampro.yu.



+4 Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 21:17 - pre 210 meseci
Citat:
aleksandarpopov: Ako koristis TClientDataset i dbExpress,TAdoQuery i ostale ADO komponente tada je moguce 100%.

Ne, ja furam IBX ..

Citat:
IDEJedino sto mi se pokazalo elegantno i 100% kvalitetno je zapocinjanje transakcije i njen commit ili rollback...

Ma tako i sada radim,u dve faze, nego u kakvoj je to vezi sa unošenjem više slogova u dbgrid pre commit-ovanja?
Jer situacija je zeznuta: podaci koji se unose preko dbgrid-a su podaci iz Detail tabele, a podaci u prvom delu forme su podaci iz Master tabele..
što znači da podatke iz dbgrida (Detail) ne možeš uneti ako nemaš ID Master zapisa, ali njega nemaš jer ga još nisi ni napravio-to mu dođe kao problem
kokoške i jajeta (na oko).

Ovo je postupak:
1) Unose se podaci koji pripadaju Master tabeli u formu, bez Post()
2) Zatim se unose podaci koji pripadaju Detail tabeli u dbgrid, ali više slogova bez Post()-a (zato sam pitao o unosu stavki bez post-a u dbgrid jer bi to i
omogućilo celu ovu stvar)
3) U jednoj akciji (npr. dugme Potvrdi ili sl.) zatim procedura vraća ID Master zapisa koje onda koriste one stavke koje su unesene u dbgrid i koje sada
bivaju Post()-ovane (Master podaci su već post-ovani jer je vraćen ID).

Ag + Na -> Xe
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 21:44 - pre 210 meseci
pa imao sam jedan slican problem kao ti jednom...

I meni je trebalo da se sve unese u DBGrid i onda se sve odjednom sacuva...

Problem sam rijesio tako sto sam radio onaj Post(), ali sa prethodno zapocetom transakcijom, i dodje ti na isto...samo na kraju potvrdis unos sa commit....

Ja nisam sve pojedinosti ni shvatio koje su tebi problem, samo kazem da, ako ima sanse da to uradis na ovaj nacin, da o tome razmislis....
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 21:53 - pre 210 meseci
Sa ibx nisam nikada radio....ali mora da ima neku varijantu kesiranog update-a...
Koliko dugo ti traje jedna transakcija? Sve dok korisnik menja podatke ili ... ? Mislim da ti to bas nije najsrecnije resenje... trudi se uvek sto krace da drzis konekciju otvorenom...samo toliko da okines upit ili postujes izmene...
Ti podatke ne unosis u grid, ti ih unosis u dataset preko grida :).
Programski onemoguci korisnika da unosi podatke detalja ako nema unetog sloga u glavnom queryju...nema tu bas mnogo filozofije sa kokom i jajetom - jednostavno onemoguci unos detalja ako nema glavnog sloga,naravno kesirano, sve ovo bez posta. Nakon unosa korisnik snima ili otkazuje izmene.
Nisam bas primetio neke probleme sa ovakvim pristupom do sada...mada u zadnje vreme vise koristim C#.net, malo sam se manuo bcb i delphija...u .NET u ako koristis datasetove, sve radi na uglavnom na ovaj fazon.

RTFM
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.ppp-bg.sezampro.yu.



+4 Profil

icon Re: Pitanje u vezi sa TDataSet19.01.2007. u 23:30 - pre 210 meseci
Citat:
aleksandarpopov:
Koliko dugo ti traje jedna transakcija? Programski onemoguci korisnika da unosi podatke detalja ako
nema unetog sloga u glavnom queryju...jednostavno onemoguci unos detalja ako nema glavnog
sloga,naravno kesirano, sve ovo bez posta. Nakon unosa korisnik snima ili otkazuje izmene.

U tome i jeste stvar, ne počinje se transakcija već korisnik samo unosi podatke na formu, pa se
zatim u jednom koraku sve postuje...(pri tome procedura mora da vrati ID master zapisa kako bi ga
iskoristili oni slogovi uneti u dbgrid, ali se to sve dešava jedno za drugim kao što rekoh,
pritiskom na digme 'Potvrdi' ili sl.). Ti Detail slogovi moraju da koriste neki event tipa BeforePost
ili sl. kako bi uzeli taj ID pre nego što se postuju..
Inače IBQuery ima keširani update, pa ću videti nešto tu da izmuvam, moram još i onaj database_
guide .pdf za BCB da proučim, sad idem da spavam..
Ag + Na -> Xe
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sksyu.net.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Pitanje u vezi sa TDataSet20.01.2007. u 08:31 - pre 210 meseci
Ja dodeljujem id cim korisnik krene da unosi novi slog, ja mu tada dodelim vrednost za ID koju citam iz tabele brojac(u njoj cuvam ime tabele i privi sledeci id za tu tabelu - vrednost inkrementiram odmah nakon citanja) ne koristim ugradjena auto inkrementirajuca polja. Kod ovog resenja sa tabelom brojac mogu da se jave rupe ako korisnik odustane od unosa ako program radi u mrezi, ali uglavnom mi radi ok.

RTFM
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.ppp-bg.sezampro.yu.



+4 Profil

icon Re: Pitanje u vezi sa TDataSet20.01.2007. u 17:32 - pre 210 meseci
Budući da stvari počinju da se komplikuju u vezi sa ovim, naročito oko tog problema sa
dodelom ID-ova Detail zapisima mislim da ću se zadovoljiti nekom alternativom, tj. odvojenim
unosom za Master i Detail, kako ne bih smarao ljude ovde..
Pozdrav.
Ag + Na -> Xe
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.adsl.sezampro.yu.



+4 Profil

icon Re: Pitanje u vezi sa TDataSet25.01.2007. u 15:29 - pre 210 meseci
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
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pitanje u vezi sa TDataSet

[ Pregleda: 2479 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.