Newsgroup: it.comp.lang.visual-basic
Titolo: Richiesta consiglio

Salve,
premetto che non sono molto ferrato in materia database-multiutenza.
Sto cercando il modo di realizzare un programmino in VB che mi permetta di
accedere da 6 computer in contemporanea su di un database.
Il mio database si deve trovare su un settimo computer su cui è installato
Nt server.
In che modo posso distribuire questo database per le 6 utenze? Installando
SQL server oppure Oracol? Oppure cosa?
Premetto che ho già provato con Access e mi è andato abbastanza bene fino a
quando non ho dovuto inserire più dati sulla stessa tabella. A quel punto
Access si piantava, generando degli errori che neppure lui conosceva!
Vorrei un consiglio.
Grazie e Auguri,
GAbry.

...


SQL server oppure Oracol? Oppure cosa?
Dai, non scrivere Oracol, che ti prendono in giro tutti... :-)
Enrico

Hai usato ODBC o hai condiviso il file MDB?
NO! E non so nemmeno come fare. Cosa devo dire ad Access? Di usare l'mdb sul
server attraverso l'ODBC? Come? In sostanza non devo aprire il file da
access attraverso la rete, ma devo farlo fare all'ODBC....insomma....io
l'avevo detto che non ero ferrato in materia...
Grazie per i consigli,
Gabry.

la vita?
No, fosse per me questo lavoro non lo farei proprio, non prima di aver
studiato un po' questo campo per lo meno, ma dato che lo devo fare...
Insomma, ti spiego un po' com'è la storia.
Ci sono 4 postazioni (Access) che ricevono delle persone le quali devono
essere registrate quando entrano in una sala.
Queste persone vengono registrate in base al Nome, la società di
appartenenza e le deleghe che essi rappresentano per una votazione.
Queste benedette deleghe sono moltissime per ogni persona, circa 1500.
Il che significa che, attraverso un'altra tabella contenente esclusivamente
le deleghe, l'utente deve assegnare ognuna di queste deleghe alla suddetta
persona.
Ma dato che assegnare 1500 deleghe di media ad ogni persona richede un tempo
molto elevato, abbiamo creato dei gruppi che comprendono le deleghe
corrispondenti alle singole persone.
Così, non appena arrivano, gli chiediamo a quale associazione appartengono e
sappiamo già quante e quali deleghe queste persone hanno.
Fino qui ci sono. La struttura del database è ok.
L'ho realizzata con una maschera principale ed una sottomaschera in cui
rispettivamente SCRIVO il nome e l'associazione e sull'altra LEGGO solamente
la lista delle deleghe attraverso una semplicissima query.
Dato che devo sapere le deleghe effettivamente assegnate, perchè queste
potrebbero mutare all'interno dei gruppi al momento della registrazione, ho
bisogno di copiare dalla tabella delle deleghe alla tabella principale tutte
le informazioni relative alle deleghe assegnate (le informazioni comprendono
valori numerici che dovrò calcolare inseguito).
Nel momento in cui faccio la copia automatica di tutti queste deleghe
all'interno della tabella principale, il sistema si rallenta notevolmente e
se esistono più di due macchine che eseguono la stessa operazione
contemporaneamente Access si pianta proprio...
Ecco quindi il mio problema esposto in maniera più dettagliata. Ora dovrei
sapere come fare perchè questo processo venga gestito da qualcosa di più
stabile. ODBC? Come?
Grazie a tutti,
Gabry.

client che lo copia rimandandolo sul server.

essere registrate quando entrano in una sala.
...
...


Non sono molto daccordo che un motore Sql sia piu' veloce di una base
dati access, in quanto il requisito principe per un motore sql e' la
robustezza e la sicurezza dei dati.
Io stesso ho avuto esperienze lavorative di trasferimenti via
programma da file ascii su una base dati Access e su una base dati
Sql-Server (in Ado),
per la cronaca entrambi realizzati su macchina stand-alone.
E devo dire che su Access era piu' veloce di circa un ordine di
grandezza.
Inoltre per quanto riguarda la copia di tabelle e l'occupazione di
banda.
Questo e' vero a patto che si realizzi una stored-procedure che
effettui la copia, altrimenti occorre aprire due recordset, che
transiteranno per forza dal computer client in cui lavora l'utente e
quindi dalla rete.
Scusate se mi sono dilungato.
Andrea Peri.
On Wed, 30 Dec 1998 10:01:36 +0100, "Antonio Donatiello"
<anto...@REMOVETHISsanpaolo.com> wrote:


Scusate se mi sono dilungato.
Sono io che devo ringraziarti per essere stato tanto disponibile.
Tutto questo mi sta dando un grande aiuto, grazie.
Gabry.

dettagli).
bene, ma posso utilizzare l'ODBC con Access, lasciando il semplice mdb sul
server? Ovvero, posso dire ad Access di usare l'ODBC per raggiungere il
server?
Grazie infinite per l'aiuto!
Gabry.

Salve,
Ciao
rispondo qui ma ho letto alcuni messaggi già presenti.
Prima di tutto: interfacciarsi ad un file mdb tramite ODBC non porta
alcun vantaggio: si aggiunge solo un ulteriore layer cha al limite
potrebbe rallentare.
Il problema è il tuo requisito di sparare (in multiutenza!) 1500
record in una tabella ed in tempo reale. Access non è adatto a
situazioni di questo genere: quando si aggiunge un record tende a
bloccare la pagina in cui verrà memorizzato il record. E' ovvio che in
multiutenza si avrebbero molti conflitti quando due o più computer
tentano di bloccare la stessa pagina. Il conflitto si può risolvere da
programma, facendo riprovare se si trova bloccato, ma con 1500 record
rischi di metterci un'eternità. Nota: SQL server e ORACLE invece
gestiscono il blocco a livello di riga, quindi questi conflitti non ci
sarebbero.
Ti conviene cercare di cambiare sistema: se ti riducessi ad inserire
alcune decine di record potresti gestire le collisioni in tempo reale
senza troppi rallentamenti. Ad esempio potresti memorizzare le deleghe
di default in una tabella e memorizzare di volta in volta solo gli
scostamenti da questo default: le deleghe in più e in meno per una
particolare occasione. Conviene anche cercare di ridurre le dimensioni
di ogni record da aggiungere.
Altrimenti, usando access, dovresti serializzare gli accessi: creare
un indicatore che impedisca ad una stazione di sparare i suoi recod
mentre lo sta già facendo un'altra. Per velocizzare gli inserimenti
potresti collegare i PC con una rete da 100Mb/s e usare un server
veloce.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------

Insomma, ti spiego un po' com'è la storia.


potrebbe rallentare.
Ma il mio problema non è il tempo. Se per registrare una persona ci metto 2
minuti non mi interessa. Il sistema che ho fatto funziona, solo che si
pianta Access quando più computer accedono e apportano le modifiche
contemporaneamente. Anzi, dirò di più:
prendete Access, creade un mdb con 2 tabelle, mettetelo sul server, create
nell'mdb una maschera che è collegata alla prima tabella e poi create una
sottomaschera collegata alla seconda tabella, create un tasto che chiude la
maschera e la riapre immediatamente. Quando lo fate girare su 2 computer
contemporaneamente, tutto ok, ma se i computer diventano 3 o 4 e l'apertura
delle maschere avviene nello stesso momento (o quasi), Access si pianta su
tutte le macchine! Si blocca per una trentina di secondi (in cui la rete
frulla in maniera costante come se ci fosse una quantità enorme di dati che
stanno viaggiando in quello stesso momento) e poi ricomincia a funzionare
(anche se 2 volte su 4 uno dei computer da errore inatteso). In realtà se
eseguissi l'operazione a distanza di 1 secondo in ogni computer, il problema
non sussisterebbe. Allora che cosa succede? Access non riesce a gestire
questi accessi in contemporanea? Non può farlo? Oppure sono io (molto
probabilmente) che mi sono perso qualche pezzo?
Continuo a ringraziarvi per i consigli estremamente utili...
Gabry.


Per me si tratta di Access che non riesce a gestire gli accessi
contemporanei, ma certo non lo posso giurare.
Potrebbe anche trattarsi della Rete.
Che a causa dei suoi settaggi crea difficolta alla condivisione dei
files.
Quello che ho in mente e' un caso abbastanza particolare che mi e'
successo con una rete Lantastic 5.0 e un programma in dbase IV sotto
dos. In quel caso l'applicazione andava sufficientemente veloce se si
teneva disabilitato lo sharing dei file. 
Intendo dire che i file dbase erano sempre condivisi in rete, ma solo
una applicazione client poteva aprirlo, poi la lantastic ne impediva
l'accesso ad altri client.
Se invece si settava la Lantastic in modo da permettere l'accesso a
piu' Client contemporaneamente si osservava che l'applicazione
rallentava  moltissimo.
Potrebbe essere una cosa simile?
Andrea Peri.

funzionare decentemente....)
Dunque, mi sembra strano che una QUALSIASI ditta non possa permettersi
l'espansione a 128MB di RAM e un SQL Server di qualche tipo --meglio
magari un Informix o un DB2 o un Oracle Personal Server-- cmq se
vogliono risparmiare si recupera un pc Pentium qualsiasi con 32/64MB
di RAM e ci si installa Linux e mSQL oppure PostGreSQL, che funzionano
bene --meglio di Access-- e sono db SQL, cosi' se e quando si vorra'
passare a un db SQL su piattaforma Win --ma io non lo farei-- o un
altro db SQL commerciale --quelli che ho indicato sono open source e
sotto la GPL-- tutto quello che hai gia' scritto sara' recuperabile
senza alcuna modifica. Anche se per traffici bassi e medi sono
entrambi perfettamente funzionali ed affidabili.
E a fare una cosa cosi' non ci vuole nemmeno la scala. Sull'argomento
ci sono anche 2 ottimi howto.
Volendo e' anche facile poi aggiungere supporto per interrogazioni via
web se la cosa puo' interessare.
------------------
Gianni Rondinini
Kawasaki ZZ-R 1100

server?
Io dicevo di installare un database server e utilizzarlo tramite odbc.
Se lasci l'mdb sul server la situazione non migliora anche se vi accedi
tramite ODBC. Tra l'altro il Jet Engine non e' in grado di accedere ad un
database Access passando da ODBC.
Perche' la cosa abbia un senso bisognerebbe avere un database server che
tramite ODBC ti permetta di accedere a tabelle Access. Non so se esiste un
qualcosa che faccia solo questo.
Aggiungo che tramite Jet Engine la soluzione piu' veloce di utilizzo di ODBC
e' ODBCDirect. Puoi vedere sull'help.
Antonio Donatiello

certa velocizzazione della faccenda...
Questa soluzione va bene sempre per separare codice e dati ma non risolve il
problema del traffico di rete perche' comunque il motore del database e' su
ogni client che accede al database.
Antonio Donatiello

Non discuto, pero' mi evita il trasferimento attraverso rete proprio
del codice. Non ho detto che questo risolve TUTTI i problemi di
velocita', ma qualcosa aiuta (un 15/20%)
Ovvio che una soluzione client/server sara' SEMPRE piu' veloce.
Ciao!
Luca Menegotto
