[ komplikator @ 28.04.2008. 10:04 ] @
Pomalo se učim o DBExpress-u. i čini mi se kao najoptimističniji pristup bazama u budućnosti Delphija. Došao sam do mozgalice o generiranju ključeva na serveru u radu s Firebirdom. Klasima je uporaba generatora na serveru i triggera nad tablicom (insert trigger) koji, ako mu se pošalje null vrijednost okine novi generator, a inače će upisati proslijeđenu vrijednost.

To je sa IBX komponentama radilo ok. U afterinsert događaju dataseta mogao sam pozvati storanu proceduru i njom pročitati zadnji "pravi" generator.

A kako to funkcionira sa clientdatasetom i DBX-om? Kad radim AfterUpdateRecord datasetprovidera mogu li deltinom polju primarnog ključa isto tako storom dodijeliti neku vrijednost generatora? Odnosno, ako imam više recorda u childu i više u masteru prije nego napravim update na server mogu li isto koristiti ovakav pristup ili imate neko bolje riješenje?

Znam da je post malo zbrda-zdola no trenutno sam i ja jer sam sad malo kratak na pameti zbog kojekakvih životnih stvari.

Pa da pojednostavim pitanje, ima li smisla i mogu li i kod DBX-a koristiti mehanizam generiranja ključeva kao i kod IBX ?

I malo potpitanje: je li je tko koristio Report Manager?
[ komplikator @ 05.05.2008. 12:49 ] @
Ja ću ipak biti malo manje škrt u svom (ne)znanju od vas pa ću s vama podijeliti opažanja i razmišljanja.

Dakle, mučilo me što nisam mogao dodati više slogova koji su imali primarni ključ i napraviti applyupdates za sve odjednom jer mi je client dataset javljao pogrešku zbog key violationa (prije updatea svi su bili null). Shvatio sam da mi u cds-u. u tom trenutku vrijednost PK uopće ni nije bitna i jednostavno sam izbacio to polje.

Ako želim na clientu definirati novi ključ kaže mu da je :
Code:

DataSetProvider1AfterUpdateRecord  (Sender: TObject;
  SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind);

begin
If UpdateKind = ukInsert then
   begin
   SQLQuery1.Close;
   SQLQuery1.Open;
   DeltaDS.FieldByName('PK_UREDAJ').NewValue := SQLQuery1.Fields[0].AsInteger;
   end;
end;

Ili neku vrijednost koju ja želim. Ako to ne koristim, serveru proslijedim PK sa null vrijednošću i trigger na serveru sam dodijeli novu vrijednost generatora.


I sve šljaka i sve ok kod takvog pristupa i kod višestrukih inserta.

Sad se idem baciti na istraživanje, može li se takva shema primjeniti u višestrukim master/detail vezama gdje bi sve inserte poslao u bazu odjednom, bez da prvo u bazu pošaljem PK za mastere.

BTW, sve više mi se sviđa dbexpress i cds, osobito mogućnost indexiranja i sortiranja po bilo kojem polju u cds-u. što mi konačno riješava sort i pretraživanja u običnom dbgridu.

[ obucina @ 05.05.2008. 15:26 ] @
Ako ces raditi sa Firebirdom, kupi FibPlus komponente. Vrede svakog evra.
Imas resene generatore, imas CDS, imas brzi native pristup bazi podataka,
sve servise (backup, restore, security, itd...) i mnogo drugih korisnih opcija.
[ komplikator @ 06.05.2008. 06:43 ] @
Znam za FIBPlus komponente, probao sam ih davnih dana i sve stoji, zbilja su odlične. No odlučio sam se na dbExpress, na soluciju da umjesto FB kod jačih zahtjeva mogu postaviti i pgSql, a s vremenom aplikaciju podići na MIDAS i voziti je troslojno, iz srednjeg sloja se vezati na web sloj, raditi web servise i sl. Zato mi je u ovom projektu dbExpress idealan. K tome, dbExpress mi je novi i želim ga dobro naučiti i primjeniti (prije nego skroz odlepršam u svijet Jave kad se Delphi era privede kraju).

Inače, nije problem ni ovakvo funkcioniranje generatora. Meni je ovo sasvim ok i imam sve što treba. Više me interesiraju sami "mehanizmi" i par tih detalja što se događa kad se proba nešto specifično.

Hvala za hint!