Newsgroup: it.comp.lang.visual-basic
Titolo: DB e rete

oggi mi sono accorto di una cosa molto spiacevole. finora ho dovuto
rinunciare a un sacco di possibili lavoretti perche non ho la piu pallida
idea di come si realizzi un software che usa un database su una rete...
mannaggia... e tutti vogliono roba che funzioni in rete... ormai nonsi
accontenta piu nessuno... !!!!!!
secondo voi su quale testo, manuale, appunti, dispense, chi piu ne ha piu ne
metta...  posso cominciare? quantomeno per sapere come si imposta la stringa
di connessione da un PC client al server. ora non so fare manco quello... mi
mancano proprio i rudimenti delle "reti"...
il tutto sempre utilizzando Access, perche finora è l'unico tipo di DB che
conosco...
grazie e non sghignazzate... ::)))))))))
MarioH

 wrote in message
9g7uc0$7ain3$1...@ID-70152.news.dfncis.de...



purtroppo io non ho mai usato il datacontrol.
ma poi scusa se l'exe è unico, significa che tutti i client possono
accedervi? di solito non ci sono due programmi diversi, uno sul server e un
altro su tutti i client?
MarioH

 wrote in message
9g7vqa$75oma$1...@ID-70152.news.dfncis.de...


 writes:
M> oggi mi sono accorto di una cosa molto spiacevole. finora ho dovuto
M> rinunciare a un sacco di possibili lavoretti perche non ho la piu pallida
M> idea di come si realizzi un software che usa un database su una rete...
Con  ODBC (dicono lento  ma lo  hai già  quando hai  VB6) non  ci sono
problemi, configuri  il DSN  opportuno e non  hai nemmeno  problemi di
rete geografica (in  questo momento stò accedendo a  3 database la cui
distanza è di 20 cm, 200 m, 600km :) ).
In lan c'è sempre il trucco  di montare il disco col database (e credo
che con  Access sia l'unica)  sul client e  agire come se fosse  su un
disco locale.
Magari metti in un ini del programma il path per lo MDB...
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

Caro Mario,
se cominci con i passetto piccoli, vedrai che poi
riuscirai anche a correre  ;-)))))))))))
Se hai già un applicativo che lavora sul PC locale e che
apre/modifica/chiude
un DB di tipo Access, il primo passo è semplice.
Non ho capito che tipo di oggetto usi per lavorare con il database
(mi sembra che non usi DataControl), ma, comunque sia,
dove hai l'istruzione:
OpenDataBase("C:\MIADIR\MIODATABASE.MDB")
semplicemente la cambi in:
OpenDataBase("\\NOMEDELPC\C\MIADIR\MIODATABASE.MDB")
Il tuo database risiede sul server, e su ogni PC client devi installare
il tuo applicativo.
Nel caso di database di tipo Access, sul server non devi montare nessun
tipo di software particolare.
Successivamente potrai studiarti motori SQL Server, ma ti consiglio di
fare una cosa graduale.
Ciao
Sir Jo


infatti. anche perche SQL Server costa un pacco di soldi...::))))))))
grazie mille
MarioH

 idea di come si realizzi un software che usa un database su una rete...
Lavorare in rete con VB e Access è come lavorare in locale. Ti mappi il
disco di rete, e lavori su quel disco. In alternativa indirizzi direttamente
la macchina di rete con il path in formato:
"\\Macchina\Disco\PathNameCompletoDelFileMDB"
I guai cominciano dopo, se devi gestire l'accesso contemporaneo e il
locking.
In linea di massima, ricordati di aprire sempre i database in modalità
condivisa (che è la modalità di default della OpenDatabase), altrimenti non
sarà possibile aprire il DB da 2 client diversi contemporaneamente.
Per quanto riguarda la teoria, le problematiche sono parecchie:
es: 1) immagina che si tratti di un programma di contabilità a cui accedono
2 utenti che fanno entrambi fatture. Il primo apre una fattura ed il
programma gli assegna un numero progressivo, il secondo fa lo stesso em
prende il progressivo successivo. Se il primo annulla l'operazione e il
secondo la porta a termine, ti trovi con un buco nel progressivo di
fatturazione (vallo a spiegare alla finanza, poi). Per evitare questo
problema, i progressivi "sensibili" devono essere assegnati solo nel momento
in cui si salva effettivamente il dato, leggendo il progressivo dal DB.
es. 2) immagina che nello stesso programma di contabilità, un utente
inserisca fatture e un'altro clienti. Se il secondo sta editando la scheda
dello stesso cliente su cui avviene la fatturazione, è possibile che in fase
di salvataggio copra dei dati modificati dalla fatturazione stessa (o
viceversa). Per evitare questo problema, ci sono 2 possibilità: effettuare
il locking (bloccaggio) del record cliente quando ne viene aperta la scheda
in modifica, oppure in fase di salvataggio controllare che i dati su disco
siano gli stessi di quando si era aperto la scheda e in caso contrario
avvisare e impedire il savataggio all'utente.
es3 ) immagina che l'utente A blocchi il record del cliente e l'utente B
faccia la fattura. Il, programma dell'utente B, salva i dati nella tabella
fatture e poi cerca di aggiornare la tabella clienti, ma siccome non ci
riesce perchè il record di quel cliente è bloccato, si trova con una
operazione effettuata solo a metà. Questo problema si risolve con le
transazioni, che permettono di effettuare il "rollback" (ossia
l'annullamento) di tutte le operazioni effettuate sui database da BeginTrans
fino a Commit o Rollback (cerca le istruzioni nell'help per maggiori
informazioni)
es4) caso peggiore chiamato deadlock. utente 1 blocca il record A1 sul
recordset R1. L'utente 2 blocca il record B1 sul recordset R2. A questo
punto l'utente 1 cerca di aprire il record bloccato dall'utente 2, e
l'utente 2 cerca di aprire il record bloccato dall'utente 1. Siccome da
questo caso non si uscirebbe mai, è necessario accertarsi che questi casi
non possano capitare, e comunque permettere sempre all'utente di abortire
l'operazione che sta effettuando, magari informandolo che il record in
questione è attualmente in fase di editing da parte di qualcun altro e
chiedendogli se vuole riprovare o annullare.
Basta, mi fanno male le dita. 8-)
Ciao
*Roby*
P.S.
Questa è solo la teoria. Aspettati di picchiarci il naso parecchio.
Trasformare un programma da monoutente a multiutente spesso significa
doverlo ripensare.
Ultimo consiglio: centralizza tutte le operazioni di accesso ai files in tue
funzioni che gestiscano l'eventualità che questi siano indisponibili o
loccati e ti ritornino true se hanno potuto effettuare la connessione. Es:
If ApriDatabase(sNomeDB, DB) then
    if ApriRecordset(MioDB,sSql, MioRs) then
        If LoccaRecord(MioRs, sChiavePerSeek) then
            ' se arrivi qui, sei salvo. ;-)
        Endif
    Endif
Endif
P.S.2
E non ho neppure messo il tag [MarioH] ;-)

 locking.
l'avevo letto sul libro di VB di Balena... è uno dei problemi piu
complicati...!!
l'ideale per non fare casini secondo me è proprio "bloccare" il record
attualmente utilizzato. se un altro utente tenta di accedervi, il programma
lancia un msgbox che dice "guarda che il sig. xx sta facendo la stessa cosa
che stai tentando di fare tu. aspetta qualche minuto e non rompere..."
::)))))
il problema dei numeri progressivi "sensibili", cacchio è tostarello... !!!!
ma cmq non devo fare programmi che hanno a che vedere col fisco. in realta
se mi trovo un buco nei num progr (ad es un contatore, che ne so. anche se
io non uso quasi mai i campi contatore, me li "conteggio" da solo) non è che
crolla il mondo... tanto piu che il campo contatore l'utente non lo vede
neanche...
e poi per i lavori che ho in mente io, il DB comune dovrebbe contenere dati
accessibili non a tutti indiscriminatamente, ma ogni utente avrebbe la sua
password e potrebbe agire SOLO sui suoi dati. una specie di "bacheca chiusa
a chiave"...
un'ultima cosa. come libro per imparare le "basi" delle reti, che mi
consigli? quello della mc graw hill di jerry lee ford tu lo conosci?
grazie.
MarioH

Ricordati di:
1) mettere in attesa con un'apposita finestra un client che cerca di
modificare un record quando quest'ultimo è attualmente in uso su un'altra
macchina.
2) e...basta! ;)



in attesa?? roba tipo "attendere prego..." ??
nooooooooooooo... poi si abitua male... io gli metto un bel msgbox "non
rompere, riprova fra 2 giorni", e chi s'è visto s'è visto... ::))))))))))
MarioH

infatti. anche perche SQL Server costa un pacco di soldi...::))))))))
Ed e' un bidone. Ci sono un sacco di motori SQL che sono gratuiti e
funzionano in modo piu' che onesto.
Vedi MySQL, PostgreSQL, Interbase e tanti altri. Sono tutti per Linux
e per Windows.
Naturalmente, a questi accedi via ODBC, ad esempio utilizzando ADO.
Sono 4 righe di codice per aprire la connessione e 1 per chiudere la
connessione.
Poi utilizzi le stesse identiche query in SQL che utilizzeresti con
Access.
Saluti che ora non hai scuse :)
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-VI --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with

 wrote in message
rgahit4s7ek2n6ltr...@4ax.com...


 consigli? quello della mc graw hill di jerry lee ford tu lo conosci?
delle reti o dei db in rete ?
ciao, a.


boh... ::)))))
a me iteressa la seconda. ma se per conoscere la seconda ho bisogno di
sapere a memoria la prima... ben venga anche un libro sulla prima...
lo so che cosa stai pensando di me in questo momento... č cosě brutto
partire dal basso, quando sai che dovrai cadere ancora piu in basso... sigh
sigh... ::))))
MarioH

 sigh... ::))))
puo' anche essere entusiasmante, un bel finalone catastrofico... tipo
dicaprioh :)

 consigli? quello della mc graw hill di jerry lee ford tu lo conosci?
Prendi i tuoi CD dell'MSDN che hai trovato dentro alla confezione del VB, e
cerca sotto Books - Microsoft Jet Database Engine Programmer's Guide -
Chapter 6. La parte più interessante è probabilmente Handling Conflicts,
dove spiega la differenza tra locking ottimistico e pessimistico.
Se la cosa ti sembra interessante ma poco chiara, comprati pure un altro
libro, ma cominciare da lì è meglio di niente.
Ciao
*Roby*

 Vabbè, ma se non hai dati condivisi, a cosa ti serve lavorare in rete?
a me niente, a quel rompi***** del cliente gli serve perche finora ha
distribuito un sacco di programmi mono-utente e qualcuno per la rete. solo
che quelli per la rete (che la fatto lui) fanno schifo, a suo dire. e tutti
i suoi clienti li stanon disertando. lui ci vuole mettere dentro qualche
cosa di utile, che funzioni in rete, per giustificare l'esistenza di una
"licenza-rete" accanto a quella "mono-utente".
è un po' arzigogolato, lo so... ma comunque spero che non sia niente di
complicato... se poi non funziona sarà tutta colpa mia... ::)))))
ciao e grazie di nuovo.
MarioH

 "licenza-rete" accanto a quella "mono-utente".
Questo è quello che si chiama "customer care". ;-)
Ciao
*Roby*


io lo chiamerei piuttosto customer-truffa... ::))))))