[ overflow @ 04.11.2004. 18:36 ] @
Napravim najjednostavniji webservis, funkciju koja treba da uzme TDataSet sa DB servera i vrati mi kao rezultat ... e sad, kada ja na klijentu uvezem wsdl (i tu funkciju) i pozovem je a rezultat (taj TDataSet) pokusam da dodelim nekom datasetu u mojoj aplikaciji dobijem gresku tipa: "Incompatible types: 'DB.TDataSet' and 'mojafunkcijawebservisa.TDataSet'"? Kako preneti ceo TDataSet, koji se dobija kao rezultat metode nekog webservisa...?
[ morlic @ 04.11.2004. 20:59 ] @
Ako sam dobro razumeo to sto radis, mislim da silno gresis. Kako mislis da napravis funkciju koja preko mreze vraca TDataSet koji se nalazi u memoriji (i zasebnom procesu) nekog drugog racunara? To sto bi zeleo automatski da se radi trazi osobinu koja se zove serijalizacija objekta iliti zapakuj objekat na jednom racunaru i rekonstruisi ga na drugom, a sto u tom kontekstu koji ti zelis ne jos uvek nije po default-u u Delphi-u (a mislim da nece ni skoro).

Potrazi demoe u Delphi-u i na netu koji koriste web servise za prenos podataka izmedju application servera i klijenta - tj. omogucavaju pravljenje 3-tier (troslojnih)sistema.

Ili napravi server aplikaciju koja koristi trojku: dataset->provider-clientdataset, gde se TClientDataSet zapakuje u stream (TClientDataSet.SaveToStream()), pa se taj stream posalje preko mreze (uz pomoc Indy-a?) i na klijentu se otpakuje u njegovom TClientDataSet-u (TClientDataSet.LoadFromStream) i koristi.

Ili nabavi/kupi neki gotov framework za 3-tier (kao sto je npr. DataAbstract 3.0).
[ overflow @ 05.11.2004. 20:01 ] @
Citat:
To sto bi zeleo automatski da se radi trazi osobinu koja se zove serijalizacija objekta iliti zapakuj objekat na jednom racunaru i rekonstruisi ga na drugom, a sto u tom kontekstu koji ti zelis ne jos uvek nije po default-u u Delphi-u (a mislim da nece ni skoro).


Da li si 100% siguran u ovo (poslednje) sto si napisao?
Znaci ideja je da sve slogove itd. prvo serijalizujem u XML, a kada isti primim na klijentu deserijalizujem taj objekat (DataSet) XML.
Cudi me da Delphi nije automatizovao ovaj proces (u C# recimo ovako nesto je ok izvesti).
[ morlic @ 06.11.2004. 02:11 ] @
Vidis, ti pricas o serijalizaciji slogova. Ti kada zelis da preneses TDataSet, pokazivac na njega ne pokazuje na sirove slogove u memoriji vec na instancu klase koja sem sirovih slogova ima i jos gomilu privatnih podataka i jos stosta da ne ulazim sada u detalje. Ja sam mislio na pakovanje cele instance kada sam rekao serijalizacija. E sada kada pominjes samo slogove, to je druga prica. Zato i postoji SaveToStream() i LoadFromStream(), tako da mozes da posaljes podatke izmedju udaljenih racunara. Postoji upis podataka u XML i Binary formi. U principu je lako odraditi pakovanje-slanje-otpakivanje i moze preko web servisa gde se vrsi odgovarajuci prenos vec zapakovanih podataka. Dovoljno je jednom da napravis pomocne funkcije koje ce ti raditi onaj deo posla koji je uvek isti za bilo koji CDS i vec ce ti biti laka implementacija na dalje.

Necu ulaziti u to kako c# to radi jer i Delphi.NET moze sve to isto pa i bolje, znaci ovde je pitanje kako to uraditi na win32 platformi sto bezbolnije, tako da c# gubi win32 bitku 100% :)
[ overflow @ 06.11.2004. 08:31 ] @
Da li si video ovo:
Citat:

Znaci ideja je da sve slogove itd.


Nisam mislio samo na sirove slogove... i upoznat sam sa time da objekat tipa klase TDataSet ima jos stosta osim "sirovih slogova". Interesovale su me mogucnosti prenosa celog TDataSet-a, ali i sirovih slogova.
[ morlic @ 06.11.2004. 13:17 ] @
Sirovi slogovi pakovanjem na opisani nacin, a tdataset preko podrske kroz TPersistent mehanizme, ali treba dodati podrsku da moze da stream-uje i slogove. Ako se koristi neki od standardnih mehanizama za pristup bazama (Dbx, Ibx, ADO) onda bi morao rucno da dodas podrsku za to. Problem je sa dataset-ovima koji nisu dvosmerni tj. nemaju ugradjen kes za podatke, kao sto je TSQLDataSet iz DBX palete. Zatim ima problema sa pratecim podacima kao sto su owner i parent polja tdataset-a (tu mislim na klase koje su izvedene iz tdataset-a), zatim konekcija na bazu itd. Zato mislim da je TClientDataSet prava stvar za tvoj problem. Ja je koristim za briefcase model rada, za razmenu podataka izmedju udaljenih racunara i za sinhronizaciju podataka izmedju nepovezanih sql servera (offline sinhronizacija). Sada samo treba da smislis elegantan i efikasan mehanizam da prosledjujes upakovane podatke.