[ voxi @ 20.02.2007. 13:13 ] @
Radim neku mreznu aplikaciu u saradnji sa bazom e sad znam za opciju manuntovanja ali nju zaobilzim iz razno raznih razloga, e sad preko TCP sam speo da posaljem string primi i td e sad kako da posaljem RecordSet koji je otvoren od strane server aplikacije preko tcp na onaj standardan nacin ne moze kao sto se string selje, da li je ovo u opste moguce, to bi uradio na primer zato sto bi kelijent trebao daim neke podatke koj treba da cita samo!

Hvala
[ goranvuc @ 20.02.2007. 23:03 ] @
Bojim se da te niko nije razumeo. Nema potrebe da toliko zuris dok pises temu, ako ocekujes da ti neko pomogne probaj da potrosis malo vise vremena i truda pri postavljanju, ovako ...

- ne znam sta je "manuntovanje", ako je "mauntovanje" OK ali ne razumem kakva je to opcija da ima veze sa mreznim aplikacijama, tako da bih voleo da mi objasnis to detaljnije jer se ne razumem u ovo sto si naveo.
- kako si to preko TCP poslao string, daj primer koda ili bar malo konkretnije.
- hoces da saljes rekordset na isti nacin (preko TCP) - i dalje nemamo ideju kakav je to nacin i kakve to veze ima sa tim da klijent treba da ima samo readonly podatke.

Daj malo detaljnije, daj neki primer kako to radis u kodu i gde je problem, ovo je ipak VB forum a ne "Filozofija prenosa podataka u mreznim aplikacijama preko TCP/IP bez koristenja opcije mountovanja"

Pozdrav i nemoj da se ljutis zbog ovog odgovora, ja sam ti bar nesto odgovorio.
[ Shadowed @ 20.02.2007. 23:25 ] @
Iz naslova je jasno da hoce da posalje recodset drugom programu (takodje njegovom) preko TCP/IP konekcije, ali tekst poruke ubija u pojam svaki moguci smisao koji se iz naslova da izvuci.

Mislim da to nije izvodjlivo, osim da saljes samo podatke iz RS-a, i tamo ih obradjujes jer koliko mi je poznato RS nema takvih mogucnosti za razliku od npr. DataSet-a u VB.NET-u koji mozes bez problema da serijalizujes, posaljes i zatim deserijalizujes.
[ voxi @ 20.02.2007. 23:33 ] @
Prov izvinjavam se, upitanju je mauntovanje! U ovom slucaju ( perko
mauntovanja ) ako pristupam access bazi preko mreze i koristim mauntovanje
onda kod standardnog xp-a je dozvoljeno zamo 10 ljudu u jedom momentu da
budu konektovani na taj naci sto mi predstavlja ogranicenje! Pa sam odlucio
da radim preko TCP protokola gde na jednoj strani imam server aplikaciju a
na drugoj klijent!

E sad klijent aplikacija bi preuzela jedan rekordset i to bi joj bilo
dovoljno za rad. A slala bi stringove podataka koji se trebaju upisati u
glavnu bazu ali su to vrlo mali podaci tako da nije problem da to odradim
tako.

E sad record set koji bi slala server aplikacija bi sadrzavao pitanj i
odgovore koje ce da prikazuje klijent aplikacija (pravim program za
testiranje na LAN mrezi ili sprovodjenje anketa) na kljijent aplikaciji se
cekiraju odredjeni ponudjeni odgovori za koje se smatraju da su tacni. i
nazad u server aplikaciju se salje samo sifra pitanaj sifra klijenta i celi
broj koji kada se pretvori u binarni govori sta je klijent odgovorio sto sve
zajdeno cini 9 bajtova po odgovoru.

E sad dobro bi mi bilo kada bi mogao kreirani rekordset od strane Server
aplikacije da povucem u komadu do klijenta da ne prenosim red po red.

Ako ovako posaljem string

Code:

 Winsock1.SendData txtItem.Text


to prolazi
ali ako stavim

Code:

 Set Dyn = NewDb.OpenRecordset("tabela")

 Winsock1.SendData Dyn


ne prolazi ne znam sto.
E sad taj record set sto bi ja poslao bi klijenti samo citali
[ gio1000 @ 20.02.2007. 23:39 ] @
Ako je uspio da posalje string i da to client primi onda je zavrsio posao.
Voxi:
Tvoja server aplikacija se konektuje na bazu, otvori odredjenu tabelu, pronadje trazeni recordset, procita vrijednost
zadatih polja i vrati je klijentu kao string (tu koristis delimiter da razdvojis vrijednosti)
Ako je client, kao sto kaze Shadowed, tvoja aplikacija znace kako da obradi primljeni string.
[ voxi @ 20.02.2007. 23:43 ] @
Ma da gio1000 upravu si mislio sam samo da li postoji mogucnost da ne bi
radio tu dodatnu obratu reko da povucem citav recordset!

Hvala u svakom slucaju
[ Aleksandar Ružičić @ 20.02.2007. 23:52 ] @
Citat:
Shadowed: ...Mislim da to nije izvodjlivo, osim da saljes samo podatke iz RS-a, i tamo ih obradjujes jer koliko mi je poznato RS nema takvih mogucnosti za razliku od npr. DataSet-a u VB.NET-u koji mozes bez problema da serijalizujes, posaljes i zatim deserijalizujes.

hmm, a koliko je veliki problem da se u klasicnom vb-u urade dve funkcije za serijalizaciju i deserijalizaciju bilo kog objekta pa i recordseta? :)

naravno, lakse je kad vec to imash ugradjeno, ali zanimljivije je kad sam uradis nesto, zar ne? :) (jedino ako je u pitanju posao koji mora brzo da se zavrsi, tada je mnogo pogodnije koristiti gotove stvari...)
[ goranvuc @ 21.02.2007. 00:03 ] @
Mozes koristiti i GetString() metodu od rekordset objekta, koja ce ti vratiti rekordset kao string (koliko shvatam hoces resenje u jednoj liniji koda - ovo ti je to).
Code:

Set Dyn = NewDb.OpenRecordset("tabela")

Winsock1.SendData Dyn.GetString
[ voxi @ 21.02.2007. 00:21 ] @
Nije ideallno ali moze proci bolje neko da cupam red po red

Hvala
[ goranvuc @ 21.02.2007. 00:24 ] @
Nema na cemu.

Ja sam mozda malo dosadan, ali da li si pod "mountovanjem" mislio na "mapiranje"? Meni to ostade enigma, izgleda da samo ja ne razumem sta trazi "mountovanje" u ovom kontekstu
[ Shadowed @ 21.02.2007. 02:32 ] @
Mauntovanje - mount-ovanje - mapiranje mreznog drive-a na shared folder na mrezi (net use iz cmd-a).

.GetString ce vratiti string koji ce se lako poslati, ali i dalje nije poslao recordset (ako mu je vec neophodno da dobije recordset. Naravno, moze uvek da parsira podatke na serveru i vec negde u tom procesu da izvrsi transport pa nastavi sa obradom na klijentu.

@krcko, koliko mi je poznato recorset nema mogucnost "programabilnog" (omg) kreiranja tj. iz koda vec jedino pozivanjem iz baze. Tj. ispravljam se (upravo gledam msdn), moze. Dok sam radio sa ado-om i vb6 nisam imao obicaj da dopunjavam RS pa update-ujem (a presao sam na .net odaavno :)), ali sad se podsetih da postoji dodavanje record-a tako da se moze uraditi ovo sto je predlozio goranvuc a zatim izvrsiti neko parsiranje i kriranje novog recordser-a.

Medjutim, mislim da je najjednostavnije resenje zapravo sledece:
Pozoves recordset.save(path), zatim otvoris taj fajl u koji si snimio, posaljes ga kao string, klijent snimi taj fajl i zatim kao prvi parametar za recordset.open zada putanju do tog fajla.
Moze i bez privremenog fajla preko stream-ova ali za ovu situaciju bi to bilo nepotrebno komplikovanje.
[ voxi @ 21.02.2007. 12:32 ] @
Shadowed zelis da kaze: da kada ga prihvati klijent strana taj string snimim
uneki txt fajl zatim pozovem recordset.opet(putanja) on ce bez ikakvi
poroblema da otvori taj fajl i kreira record set sa tipovima podataka koji
su bili u record setu na server strani?
[ Shadowed @ 21.02.2007. 13:36 ] @
Trebalo bi. Znaci, snimis na serveru fajl, posaljes fajl, snimis ga na klijentu, otvoris recordset iz njega.
[ Aleksandar Ružičić @ 22.02.2007. 01:17 ] @
@Shadowed: ma ja sam mislio da se jednostavno napise funkcija koja ce da pokupi vrednosti svojstava nekog objekta (i objekata koje taj objekat sadrzi i tako u krug) i da to upakuje u string nekog formata (recimo format koji generise php-ov serialize) koji se posle "otpakuje" sa deserialize koji kreira novi objekat i jednostavno podesi sacuvane vrednosti svojstava.
iskren da budem, nisam siguran da li mogu svi podaci iz RS-a da se "povade" i vrate na ovaj nacin (preko svojstava) jer nekoristim RS tako cesto (zapravo bezim od svakog programa za koji moram da radim sa bazom podataka, tj bezim od poslovnog softvera :D)...
[ Shadowed @ 22.02.2007. 03:50 ] @
Da, da, znam na sta si mislio. I kao sto rekoh, moze se metodom .GetString to uraditi automatski (ne moras property po property) a zatim je potrebno napraviti parser na klijentu koji ce krairati prazan RS i zatim sa .AddNew dodavati redove koje izvlaci iz string-a (mada, je sa fajlom jednostavnije).

Inace, prosto ne mogu da shvatim da ti se .net ne svidja :/
[ voxi @ 22.02.2007. 14:49 ] @
Da li kada se stavi Socket(0).Listen to znaci da je kreirana nit koja ce
stalno da vrsi f-ju osluskivanja i pozivanje metode konekcije kada dodje
nova konekcija za datu kotnrolu sve dok je recimo ta forma ucitana na kojoj
se nalazi kontrola sto dalje povlaci da mogu da pozovem
imeForme.Socket(0).Listen iz neke klase kad zelim recimo da kereiram server
klikom na dugrm na formi na kojoj se nalazi socket kontrola


Net ne koristim iz prostog razloga sto imam brdo knjiga za VB6 ali opet tamo
se ne nalazi sve pa moram da koristim forum inace sam jos studetn pa mi ovaj
rad vise sluzi za vezbanje i upoznavanje sa mogucnostima programskog jezika
:)
[ Aleksandar Ružičić @ 22.02.2007. 23:03 ] @
Citat:

Inace, prosto ne mogu da shvatim da ti se .net ne svidja :/

ako se to pitanje odnosilo na mene (a mislim da jeste): nije da mi se ne svidja, ali ne nameravam da ga "ucim" jos uvek, imam ga na cd-u (2003 doduse, al i to je dobro za pocetak) ali nemam vremena za njega (mada sam ga instalirao i malo isprobao kada sam ga nabavio), trenutno pokusavam da koliko-toliko ovladam asm-om :)
[ Shadowed @ 23.02.2007. 00:23 ] @
Ovo za asm - cool (mada ovo deluje kao da upravo imas vishak vremena ).
Ja se ne secam kad sam nesto poslednji put uradio u vb6 a taj VS2003 baci, 2k5 dosta bolji.

Neego, voxi ne kaze sta je bilo do kraja, je l' uradi nesto?
[ voxi @ 23.02.2007. 01:10 ] @
Radim radim dansa sam zavrsio registraciju preko mreze to jest registorvanje
ljudi koji ce biti testirani sutra ili preko sutra bi trebao uraditi i ovaj
dio preuzimanja pitanja od servera bas sovim recordsetom. Ovo sto ste mi
objasnjavali mi je bilo sve jasno samo ovo zdnje me interesuje zasa se sluzi
nisam bas imao sa tim susreta za ovo definisanje parametara cemu je svrha
nisam siguran da sam najbolje razumeo?

I jos nesto da vas pitam imam na primer sledecu situaciju imam 30 ljudi koji
se testiraju, e sad svi oni trebaju pre da se prijave, i od prilike to ide
ovako upisu ime prezime posalju na server, server aplikacija primi podatke i
sad pri stizanju podataka na server aplikaciju poziva se f-ja
socket_DataArrival(Index As Integer, ByVal bytesTotal As Long) a iz nje se
poziva sledeca f-ja koja otvara recordset i proverava da li taj klijent je
vec registrovan ako ne javi klijentu da nije registrovan ili nije uneo dobro
podatke. E ono sto mene intersuje da li je ta f-ja sinhronizovana mislim na
(socket_DataArrival) to jest da kada je neko od klijenata u njoj ni jedan
vise klijent ne moze uci u nju dok prethodni ne izadje, ili se mozda kreira
neka nova nit za datog klijenta ? Ono sto me sutiniski interesuje ako ne
znate tacno da li je moguc da dodje do sukoba izmedju klijenata ako se desi
da 2 ili vise klijenata u istom vremenu poslju podatke, da li je moguce da
poremete rad jedan drugo to jest da udju u f-ji istovremeno i tamo mi
pobrljve sve.

I jos nesto kako da stopiram na odredjenoj linij koda izvrasvanje do nekog
klika ili odredjeno vreme kod c-a je to system("pause") na primer ili kod
jave Thread.sleep(500); na tu foru

HVALA
[ gio1000 @ 23.02.2007. 02:01 ] @
Winsock ce ti napraviti indexe, za svakog klijenta poseban, tako da jedan sa drugim nemaju veze.
I kad bi se desilo da u "istom momentu" dva klijenta traze jedan recordset, ipak, jedan bar malo mora doci prije...
Sto se tice sleep funkcije:
deklarisi u modul ovo:
Code:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

I kad ti treba pozoves:
Code:

Call Sleep(1000)

[ voxi @ 23.02.2007. 12:25 ] @
A sta ako je recordset malo veci pa taman dok on isfiltrira ono sto treba
dodje durigi podatak? Sve se nesto boijim da mi ova stvar ne zezne
kocnepciju!

Hvala za sleep()