despre ADO
#1
Posted 30 September 2015 - 21:19
Domnilor cine nu are "rabdare si tutun" la indemana sa treaca mai departe
Am o fractura logica. Folosesc ADO de mult timp dar pana acum nu a trebuit sa impart "capra si varza" in aceasi timp. Adica o baza de date msaccess pe un server unde se pot conecta useri si via VPN. Aduc in discutie si conexiunea vpn pentru ca de regula este o conexiune cu trensfer greoi, care implica niste timpi de asteptare destul de lungi. Am cautat pe net teme care sunt legate de ... hai sa-i spunem combinatiile posibile dintre: (Set RS = New ADODB.Recordset) (Set newRS = New ADODB.Recordset) RS.Open SQL, cnn, (???),(???) newRS.Open SQL, cnn, (???),(???) ca urmare, are cineva rabdarea sa enumere combinatiile posibile si sa explice ce si dece? contextul ar fi urmatorul: (nu luam in calcul ReadOnly pentru afisare de date) 1. cum trebuie deschis RS(?) daca citesc dintr-un tabel si cum deschid un newRS(?) de pe un server unde trebuie sa salvez datele provenite din RS?(AddNew+Update) 2. stiu ca normal ar fi ca inainte de interogare sa creezi o noua conexiune (cnn) dar avand in vedere cazul in care te conectezi prin VPN este ceva mancator de timp, cum ar trebui procedat corect? 1. cu riscurile de rigoare(timp consumat) sa inchizi preventiv conexiunea cnn si sa o recreezi? 2. mergi pe ideea ca acesta conexiune(cnn) nu are probleme(cadere net, logare la server, decuplare de la baza de date) si functie de eroarea primita mergi mai departe sau tratezi eroarea prin: verificare conexiune internet(cu reconectare sau iesire program=functie), apoi verificare logare server(cu reconectare sau iesire program-functie) si in cele din urma reconectarea la baza de date(cu succes sau nu)? La urma urmei poate ca nu are importanta daca legatura se face via VPN sau nu, problema de combinatii corecte posibile si corecte in contextul dat ramane. Multumesc anticipat celor ce vor avea rabdarea de a da raspunsuri, ce exista pe undeva(sunt sigur) dar eu nu le-am gasit, sau cel putin nu le-am gasit intr-o forma concisa si contextuala. (evident link-urile sunt binevenite si ele) Edited by nexusm, 30 September 2015 - 21:23. |
#2
Posted 30 September 2015 - 22:06
Ce intelegi prin combinatii posibile? Combinatii de ce anume?
Vrei sa ai defapt doua conexiuni si sa transferi date dintr-una in alta? Iti pui problema ca asteapta userul prea mult pentru fiecare operatiune? Edited by dani.user, 30 September 2015 - 22:09. |
#3
Posted 01 October 2015 - 09:03
ideea ar fi urmatoarea:
citesc niste date dintr-un tabel aflat in db1, le completez sau modific si le trimit intrun alt tabel din db2 ce este pe server. chestia asta o fac mai multi insi. pentru asta creez 2 conexiuni cnn1(catre db-ul local), cnn2(catre db-ul server si mai mult recodseturi rs1,rs2...rsn cnn2 poate fi facuta si prin vpn seturile de inregistrari trebuie updatate in ambele tabele din ambele baze de date codul ar fi: rs1.Open SQL, cnn1, (?),(?) rs2 Open SQL, cnn2, (?),(?) rs2.AddNew rs2!nume = rs1!nume rs2!ceva = Text1.Text rs1!ceva = Text1.Text rs1.Update rs2.Update ceva de genul asta doar ca fiind multe filed-uri codul este scris cu o bucla For Each tbl In rs1... iar acolo unde sunt preluate date din variabile se face distinctie dupa nume campului If rs1(Field).Name = "ceva" ... cum trebuie deschise cele 2 recordseturi (rs1, rs2), astfel incat sa nu creez probleme altor useri dar datele salvate sa fie vizibile si pentru altii dupa comanda Update. acesta ar fi o intrebare si am rugat ca cineva sa explice toate acele combinatii de parametri - adOpenDynamic, adLockOptimistic - adOpenKeyset, adLockPessimistic etc si o a doua intrebare se refera la faptul daca este sanatos sau nu sa tin conexiunea cnn2(catre server) deschisa tot timpul sau so o creez doar in momentul la care trebuie sa facceva cu ea. specificand ca acesta poate fi si prin vpn mentionez ca userii au drepturi egale si conectarea la db-uri nu se face pe baza de nume user ci doar de parola, parola ce este un singura si apartine bazei de date, userii nici macar nu o cunosc Edited by nexusm, 01 October 2015 - 09:10. |
#4
Posted 01 October 2015 - 09:11
nexusm, on 30 septembrie 2015 - 21:19, said:
ca urmare, are cineva rabdarea sa enumere combinatiile posibile si sa explice ce si dece? In rest n-as merge pe tipul asta de trafic (plimba tot de ici-colo) ci pe varianta prelucrarii pe "server" si transferul rezultatului prin retea (ori faci un serviciu pe acel server, ori te folosesti de unul existent sau chiar treci pe un server SQL). De verificat conexiunea oricum trebuie sa o faci ca nu se stie daca mai e activa. Si las-o deschisa in cazul tau. |
#5
Posted 01 October 2015 - 09:25
referitor la link-ul dat de tine este la fel ca multe altele unde nu am reusit sa gasesc exemple explicate referitoare la:
folosesti adOpenKeyset cand trebuie sa faci cutare lucru si in contextul X trebuie sa folosesti LockType de tipul ... si explicate toate variantele cursorului adOpenKeyset in diverse contexte si diverse tipuri de Lock. la fel explicate si in situatii de gen read, addnew sau doar update cam asta mi-as fi dorit sa gasesc, pentru ca din experimentari am primit destul de multe erori diferite dar ale caror descrieri nu ma prea lamuresc, asta lasand deoparte faptul ca exista situatii in care coduri diferite primesc acelasi mesaj de eroare. de aici si confuziile mele si lipsa de a gasi modalitati de tratare a lor. Edited by nexusm, 01 October 2015 - 09:30. |
#6
Posted 01 October 2015 - 09:45
Tu nu prea stii cum functioneaza multe de asta nu intelegi ce spune aici: https://msdn.microso...1(v=vs.85).aspx
Iar carti intregi despre baze de date, ADO si siteme de operare nu pot fi rezumate pe forum. Ti-am spus mai sus ce trebuie sa faci sa nu tragi dupa tine degeaba toata baza de date (ca asta faci in arhitectura ta). Edited by neagu_laurentiu, 01 October 2015 - 09:46. |
#7
Posted 01 October 2015 - 10:19
corect, dar ca sa modific arhitectura(ca asta urmaresc de fapt) trebuie sa inteleg ce am de facut si cum trebuie facut.
din cauza asta pun intrebari si cer ajutor. speram ca cineva sa stie de vreun tutorial pe undeva si evident ca nu am pretentia ca pe un forum sa fie prezentate solutii cap coada, dar indrumari da, asta ma astept sa gasesc si nu picioare in cur degenul "tu nu stii multe". daca stiam nu intrebam. |
#8
Posted 01 October 2015 - 10:39
Ce nu intelegi din ultimul link ?
Tu ai adus local baza de date. E o prostie din punct de vedere tehnic dar nu tu esti de vina ca asa se programa acum mai bine de 10 ani cu tehnologia aferenta. Acel dinamic ori static nu-i mare lucru, gunoiul e sub pres doar. Mergi pe static, fa bors local si la final salvezi, tine tu lucrurile in frau si nu te baza pe altcineva/automatisme (acea deschidere la distanta de fisierere poate altera datele la caderi bruste de conexiune - INSERT SQL, UPDATE SQL ori DELETE SQL si nu ale cursorului nu-s degeaba in sistem). nexusm, on 01 octombrie 2015 - 10:19, said:
speram ca cineva sa stie de vreun tutorial pe undeva si evident ca nu am pretentia ca pe un forum sa fie prezentate solutii cap coada, dar indrumari da, asta ma astept sa gasesc si nu picioare in cur degenul "tu nu stii multe". Edited by neagu_laurentiu, 01 October 2015 - 10:50. |
#9
Posted 01 October 2015 - 11:32
neagu_laurentiu, on 01 octombrie 2015 - 10:39, said:
[...] Tu ai adus local baza de date. [...] Daca ar exista Cartea Cartilor toti am fi meseriasi. Tu citesti din N locuri si structurezi, toti asa am invatat, cu multa munca, doar o pagina undeva nu-ti lumineaza calea pana la final ! CORECT nu-ti imagina ca descarc de pe server o baza de date vorbim de 2 baze distincte si care isi au rolul bine definit, nu sunt dubluri. daca pe server tin date de interes comun si pe care le citesc sau le updatez functie de nevoi,pe baza de date locala tin informatii personalizate userului, tocmai pentru a nu trebui sa incarc db-ul de pe server cu date ce nu-i intereseaza pe altii sinici sa trebuiasca sa interoghez aiurea acesta baza de date daca totul poate fi tinut pe una locala. exemplu: daca s-a vandut ceva imi trebuie un nr de bon de descarcare a gestiunii asta trebuie luat de pe server dar si incrementat cu 1 pentru ca urmatorul user sa ia unul valid in gestiunea mea de mere scad un kg descarcat cu bonul x dar pe un alt user a carei gestiune sunt perele asta nu-l intereseaza. avand in vedere ca mare parte din activitatea userului proceseaza informatii dedicate lui am preferat ca fiecare sa aiba propria baza de date pe local. cam asta este scenariul si daca mai pui la socoteala si faptul ca toti acesti useri se deplaseaza prin tara conectandu-se prin vpn, lucrurile devin clare in ceea ce priveste necesitatea de a nu interoga serverul pentru orice. (nu-i vb de mere si pere si nici nu se plimba cu masina, ci doar sunt puncte de lucru din afara si din interiorul retelei unde se afla serverul) |
#10
Posted 01 October 2015 - 11:34
Mie mi se pare ca e scenariul ala 1 masina server (de backup si rapoarte mai mult) + n masini client si se doreste un sync intre ele. Pentru server ar trebui SQL Server Express (daca licenta e prea scumpa) sau MariaDB sau MySQL. In orice caz, ceva dedicat. Access nu-i pentru asa ceva; merge insa pt. masinile client, ca DB local.
In functie de context, poate ar fi mai bine sa implementezi un mecanism de sync periodic sau real-time, folosind conexiuni la cele 2 db-uri sau fisiere cu date (xml, cvs, json) ce sunt prelucrate de un serviciu pe server. |
|
#11
Posted 01 October 2015 - 11:42
vreau sa trec serverul pe mysql dar nu-l cunosc, citesc si invat ce trebuie si cum se configureaza dar constant trebuie sa mai surubaresc la aplicatie ca tot timpul apar noi cerinte, asa ca asta va mai dura.
|
#12
Posted 01 October 2015 - 11:44
nexusm, on 01 octombrie 2015 - 11:32, said:
nu-ti imagina ca descarc de pe server o baza de date Access are un fisier undeva pus de tine. Cand tu faci SELECT indiferent de clauze descarci TOT FISIERUL .mdb/.accdb pe statia locala si componenta ADO (tot locala) via un .dll executa acel SELECT. Asa-i sistemul asta cu partajare prin retea. De asta ti-am zis sa faci acel ADO ca un serviciu la distanta, pe "server" ca sa nu plimbi degeaba datele cand tu vrei cateva inregistrari (asa cum face orice server SQL). nexusm, on 01 octombrie 2015 - 11:32, said:
pe baza de date locala Edited by neagu_laurentiu, 01 October 2015 - 11:57. |
#13
Posted 01 October 2015 - 12:04
neagu_laurentiu, on 01 octombrie 2015 - 11:44, said:
[...] De asta ti-am zis sa faci acel ADO ca un serviciu la distanta, pe "server" ca sa nu plimbi degeaba datele cand tu vrei cateva inregistrari (asa cum face orice server SQL). [...] multumesc, am sa caut sa vad cum se creaza astfel de servicii si daca am nelamuriri, revin. |
#14
Posted 01 October 2015 - 12:13
Exista DCOM numai bun pentru ce vrei tu. Sau RDO de la MS desi zic ei ca l-au abandonat. Sau asta: http://odbcsock.sourceforge.net/ Ori chiar tu scrii o componenta sa primesti cererea si sa furnizezi rezultatul prin orice mijloc de comunicare doresti. Asta daca nu vrei sa treci la un server SQL (MS SQL Express de exemplu) si nu schimbi mare lucru in obiectele tale (doar pe ici pe colo cate o clauza la sintaxa SQL si stringul de conectare).
Edited by neagu_laurentiu, 01 October 2015 - 12:16. |
#15
Posted 01 October 2015 - 12:32
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users