Newsgroup: it.comp.lang.visual-basic
Titolo: AIUTO!!! Accesso VELOCE a database da postazioni remote collegate via modem...

Ho un enorme problema, dovuto forse in parte anche alla mia scarsa
preparazione in materia di programmazione in rete e client-server. Ho a che
fare con programmi che lavorano tranquillamente in rete, accedendo a DB
Access posti su un server con discreta velocità. Ultimamente è sorta la
necessità di avere postazioni in sedi distaccate, che accedano in tempo
reale agli stessi dati... Abbiamo provato a fare una connessione via
MODEM... ma ecco  IL DISASTRO!!! Il programma funziona correttamente... solo
che Occorrono 20 minuti per aprire un recordset!!! Evidentemente c'è
qualcosa di sbagliato nella tecnica di accesso ai dati. Attualmente non
stiamo utilizzando alcun datacontrol, ma solo oggetti database e recordset.
I programmi sono scritti in VB5, con DAO 2.5/3.5 o 3.5. I database sono
discretamente grandi... 40.000 records per le anagrafiche... 20.000 record
per i documenti ecc.   Quali sono le tecniche migliori per accedere ai dati
in remoto? Ci sono dei trucchi per velocizzare al massimo il tutto? Le cose
potrebbero migliorare usando SQL server, o l'errore è proprio nella
scrittura del codice, e quindi non dipendono dal database usato? Vi
ringrazio per l'attenzione, sperando che qualche anima pia possa aiutarmi,
altrimenti sono veramente nei guai!!!
Nicola

 wrote in message
news:8tou42$kee$1...@nslave3.tin.it...

Far passare grosse quantita' di dati lungo le nostre linee telefoniche e',
come purtroppo hai sperimentato, un suicidio ( ... nel senso di uccisione
del suino ?)
Bisogna organizzare il client in modo che invii, e soprattutto richieda,
piccole quantita' di dati per volta oppure tenere delle copie locali
sincronizzate (ed anche questo non e' sempre molto bello).
Ciao
Aldo

 wrote in message 8tou42$kee$1...@nslave3.tin.it...

DAO utilizza il sistem file/server e quindi se di una tabella ti serve solo
un record,
comunque tutto il file deve arrivare al PC e sarà i programma locale a
eliminare tutti
gli altri record.
Il sistema client/server invece invia la richiesta al server, questa la
elabora e gli rimando solo
il record (o i records) che interessa.
Tramite rete puoi quindi gestire database di medie dimensioni, ma se lavori
via MODEM
la cosa diventa molto difficoltosa.
La soluzione è proprio passare ad un motore SQL
Se usi database in formato DBF, c'è un motore SQL server che ti permette
di gestirli, altrimento devi cambiare anche formato di database.
Ciao
Sergio

ti serve un SQL server.
Il fatto di usare DAO, o ADO non è adatto, perchè comunque tutti i record
vengono inviati al client, per l'interrogazione, mentre SQL, esegue
l'interrogazione sulla macchina server, ed invia al client solo i risultati.
Saluti.

Stesso problema, pero' l'applicazione e' in vb6 con Ado e i database
(Access97) hanno anagrafiche di circa 600.000 records, i modem sono ISDN e
la linea e' una linea dedicata ISDN; il server ha una scheda RAS con 30
porte. Le ricerche in anagrafe sono abbastanza veloci (con select SQL), ma
gli "updatebatch" di un record richiedono tempi inaccettabili: anche 15 e
piu' minuti!
Grazie a chi ci chiarisce un po' le idee!
Ciao Daniela

Grazie delle risposte, in effetti sono state la conferma a quanto gią
sospettavo. Se posso disturbarvi ulteriormente, qual'č la tecnica migliore
da usare sotto SQL Server? Perchč i miei colleghi mi hanno detto che anche
con SQL se non si adotta la tecnica giusta, si rischia di incorrere negli
stessi problemi di congestionamento della linea di trasmissione. Alcuni
consigliavano delle Query residenti sul DBMS, parametrizzate, richiamabili
dal client con il solo passaggio di parametri. Che differenza c'č tra una
query di questo tipo ed una passata dal client direttamente?

 query di questo tipo ed una passata dal client direttamente?
*. La stringa di richiesta dati e' piu' piccola: invece di mandare "SELECT
(...bla, bla..) si invia una cosa del tipo "sp_EstraiFattura 2000, 456";
*. le procedure dovrebbero essere gia' state "digerite" dal server;
*. Se l' operazione richiesta al database e' complessa, richiedendo
transazioni, operazioni su tabelle diverse, uso di cursori, ecc. si possono
evitare inutili andirivieni di dati, spostando l' esecuzione sul db server,
eventualmente attendendo giusto una piccola risposta circa l' esito dell'
operazione.
Ciao
Aldo

Grazie mille Aldo!
Nicola