Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    grazie 1000! Ma non capisco una cosa....che percorso devo mettere nella stringa...cioè se il db è sulla cartella condivisa del pc2 per esempio metto: \\pc2\nomeCartellaCondivisa ?

    e dove? Nel source? cioè...la stringa come va scritta?

  2. #12
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    La stringa la dovrai comporre con delle parti costanti e delle parti variabili. Tipo...
    sConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPercorsoDb

    sPercorsoDb è una variabile che dovrai valorizzare leggendo qualcosa di esterno al programma, per esempio un file .INI, in modo che possa essere diversa sui diversi PC.

    Sul sito di gibra (vbnuke... qualche cosa) puoi trovare (credo che ci sia ancora) un intero progetto in cui è esemplificata questa tecnica (e molte altre cose).

  3. #13
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Veronica80
    tenete conto che sto programma lo useranno 2 max max 3 persone quindi non c'è un trafficon intenso! Se non si può accedere esclusivamente pazienza si coordinano loro

    io vorrei solo sapere come accedere a un db acces in rete!

    Nella stringa:

    codice:
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:System Database=system.mdw;
    che mi pare sia quella ch eserve a me non capisco come gestire la cosa visto che il percorso è sempre su C:\
    Ho realizzato diversi programmi che usano un db Access alcuni dei queli usato anche da circa 15 utenti, e tutt'ora funzionano senza problemi.
    Però devi gestire i dati ed il database in maniera perfetta, altrimenti avrai delle grane a non finire. In linea generale ecco i passi da seguire:

    1. Database e Programma li installi in una cartella condivisa nel tuo server.
    Sul client vanno SOLO installate eventualmente le librerie (OCX & DLL) usate dal tuo programma. Sui computer Client creerai un link al programma che sta sul server.
    In questo modo, quando dovrai aggiornare il programma, lo aggiorni solo sul server, a meno che non devi installi nuove librerie (OCX/DLL) nel qual caso vanno aggiornate anche sui Client.


    2. il DataSource della tua stringa di connessione al db sarà questo:
    \\NomeServer\NomeCondivisione\mydatabase.mdb


    3. Riguardo alla "concorrenza dei dati" che siano 2 o 10 utenti le problematiche sono sempre le stesse, e le regole non cambiano.
    NON (ripeto NON) usare il contatore di Access, che è una ciofeca paurosa in multiutenza.
    Devi usare un campo contatore personalizzato (vedi dopo).


    4. Per aggiornare i dati io uso il più possibile il metodo Execute della connessione (o del Command + Parametri, dipende dai casi) incapsulando tassativamente il tutto in una transazione.
    Evitare i metodi del recordset (es. rs.Update) che sono molto più lenti. Ricorda che in una rete LAN letterua e scrittura generano traffico, meno se ne genera meglio è.


    5. Evitare assolutamente i "SELECT * " ma elencare solo i campi strettamente necessari all'interrogazione.


    6. Il database Access non dispone di un Lock, quindi lo devi gestire tu.
    Vi sono diverse strategie ed ognuno usa quelle che ritiene adatte.
    Personalmente non applico alcun Lock, però verifico prima di salvare se il record è stato modificato da un'altro utente.
    Questo prevede che in OGNI tabella tu abbia almeno 2 campi: UserName e DataModifica.
    Quando 2 utenti caricano lo stesso record, chi lo salva per primo avrà successo, il secondo utente invece riceverà un messaggio che li dice che deve ricaricare il record, perchè è stato modificato da un altro utente (tramite un apposito pulsante che ricaricherà appunto il record): ciò avviene perchè prima di salvare verifico la DataModifica nel record: se quella del database è maggiore di quella caricata dall'utente B, significa che quel record è stato modificato.
    Sono anni che uso questa strategia ed i clienti sono contenti, nessun problema di concorrenza o altro.


    7. Devi implementare una routine alla chiusura del programma che compatti il database, gestendo ovviamente l'errore se il database è ancora in uso da un'altro utente.
    In questo modo la compattazione sarà eseguita dall'ultimo utente che usa il computer.
    In NET non esiste niente di nativo per questo, quindi si utilizza la vecchia libreria JRO:
    HOW TO: Comprimere un database di Microsoft Access Database con Visual Basic .NET
    http://support.microsoft.com/kb/306287


    8. Pianificiare un BACKUP GIORNALIERO del database!!!


    9. Come ultima cosa, la più importante!
    Occorre implementare una gestione degli errori impeccabile (io uso un gestore in ogni routine!) altrimenti quanto detto sopra diventa inutile.


    Solo attuando una corretta strategia potrei ottenere ottimi risultati.


    Ed ecco alcuni link che ritengo importantissimi, indispensabili da leggere, se vuoi fare le cose fatte bene tutti relativi alla multi-utenza:

    HOW TO Implement Multiuser Custom Counters in Jet 4.0 and ADO 2.1
    http://support.microsoft.com/default...b;EN-US;240317

    How to use connection control to prevent users from logging on at run time in Access 2002
    http://support.microsoft.com/kb/287655/en-us

    Determine Which and How many Users are Connected to a Database
    http://www.freevbcode.com/ShowCode.Asp?ID=4768

    How to keep a Jet 4.0 database in top working condition
    http://support.microsoft.com/kb/303528

    Introduction to .ldb files in Access 2000
    http://support.microsoft.com/kb/208778/en-us

    How to determine who is logged on to a database by using Microsoft Jet UserRoster in Access 2000
    http://support.microsoft.com/kb/198755/EN-US/


    NOTA: Scusa, ma "System Database=system.mdw" cosa c'entra ? Mi sembra un retaggio dell'ambiente MSAccess...


  4. #14
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Ciao Gibra!
    Mi scuso per la risposta tarda! Che dire! Grazie! Non potevi essere più preciso!

    L'unica cosa che non ho capito è sul punto 1. Dove mi dici che sul client devo installare SOLO le librerie. (perchè?).

    Tieni conto che per quel che serve a me non mi serve una multiutenza! I pc che useranno il programma son 2. Uno difronte all'altro. Quindi posso mettere anche un controllo che se uno degli utenti apre il programma l'altro non lo può aprire (non è un programma che va usato continuamente) anche se non ho idea di come fare!

    Per il resto credo di aver immagazinato tutto e ti ringrazio per la chiarezza e la precisione!

    GRAZIIEEEE!

  5. #15
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Veronica80
    Ciao Gibra!
    Mi scuso per la risposta tarda! Che dire! Grazie! Non potevi essere più preciso!

    L'unica cosa che non ho capito è sul punto 1. Dove mi dici che sul client devo installare SOLO le librerie. (perchè?).

    Tieni conto che per quel che serve a me non mi serve una multiutenza! I pc che useranno il programma son 2. Uno difronte all'altro. Quindi posso mettere anche un controllo che se uno degli utenti apre il programma l'altro non lo può aprire (non è un programma che va usato continuamente) anche se non ho idea di come fare!

    Il programma lo devi mettere sul Server, non sul Client, per il semplice fatto che quando fai un aggiornamento ti basta aggiornare solo sul Server, e sei sicura al 100% che il programma sarà sempre aggiornato. Come ho già detto, vale anche per il database.

    Il Client ha solo bisogno delle librerie perchè anche se chiamato 'nel Server' il programma viene eseguito sempre in locale quindi nel Client devi installare le librerie (OCX, DLL, ...) che servono al programma.

    Per avere l'accesso esclusivo ti basta impostare nella connessione al MDB la modalità esclusiva (vedi la guida per i dettagli) gestendo l'errore all'apertura della connessione, ad esempio facendoti restituire un valore BOOL che ti informi se la connessione ha avuto successo o meno. Ovviamente, il primo utente che apre il database con accesso esclusivo avrà successo, il secondo riceverà un errore.

    Sconsiglio caldamente l'avvio dal Load del form principale, ma è sempre meglio farlo dalla routine SubMain in un modulo bas, esempio modMain.bas . In questo modo non ci sarà alcun problema a chiudere l'applicazione usando End senza provocare danni perchè non ci sarà alcun oggetto istanziato.

    Esempio (scritto al volo, quindi da controllare!):

    codice:
    ' in modMain.bas
    Public CN As ADODB.COnnection
    
    Public SubMain()
        Dim bSuccesso As Boolean
        bSuccesso = ApriConnessione()
        If not bSuccesso Then
            MsgBox "Un'altro utente sta già eseguendo il programma." & vbCrLf & _
                       "Impossibile accedere al database.", vbCritical
            Set CN = Nothing
            End
        End If 
    
        ' Tutto bene, posso aprire l'applicazione
        Load frmMain
        frmMain.Show
    
    End Sub
    
    Public Function ApriConnessione() As Boolean
        Dim sConnectionString As String
        Dim sPercorsoDB As String
    
        On Error GoTo ERR_HANDLER
    
        sPercorsoDB = "\\Server1\MyApp\Database.mdb"
        sConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPercorsoDB
        sConnectionString = sConnectionString & ";Persist Security Info=False"
    
        Set CN = New ADODB.Connection
        With CN
            .ConnectionString = sConnectionString
            .Mode = adModeShareExclusive
            .CursorLocation = adUseClient
            .Open 
        End With
    
        ApriConnessione = True
    
    
        On Error GoTo 0
        Exit Function
    
    ERR_HANDLER:
        MsgBox Err.Number & vbcrlf & Err.Description
    
    End Function

  6. #16
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Scusa, non mi ricordavo che usi VB.NET mentre il codice è per VB6.

    Comunque il concetto è identico e l'implementazione pure, modifica le istruzioni per VB.NET.

    Sorry

  7. #17

    di nuovo su access condiviso

    ciao a tutti,

    ho letto per caso questo forum e in parte avete gia' risolto il mio problema, ma manca qualcosa. Vadio a spiegare.

    Ho sviluppato una applicazione in VB . net (Express Edition 2008) che si poggia su un db ACCESS. Ho utilizzato OleDbConnection e Provider=Microsoft.Jet.OLEDB.4.0.

    Il data base ha pero' necessita' di condivisione su rete LAN. Mi chiedevo, per gestire gli automatismi della condivisione come posso fare? dalla documentazione ingiro non mi pare che l'apertura di una connessione eviti ad un altro utente di effettuare modifiche sulla stessa tabella. Giusto?

    Ho in mente una soluzione alternativa che sarebeb passare a MySql. Anche qui pero' no sono sicuro che l'automatismo poso delegarlo a MySql stesso.
    Ad ogni modo vorrei evitare di "uccidere una mosca con la bomba atomica" visto che l'applicazione non ha moltissimi dati e solo 2-3 utenti. (vero che il problema di 2 e' il problema di 100, ma...).

    Sostanzialmete: cosa consigliate? se rimango su access che accorgimenti devo prendere per evitare conflitti di scrittura sul solito record?

    Grazie in anticipo
    Simone

  8. #18
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Originariamente inviato da simone.orlandi
    ciao a tutti,

    ho letto per caso questo forum e in parte avete gia' risolto il mio problema, ma manca qualcosa. Vadio a spiegare.

    Ho sviluppato una applicazione in VB . net (Express Edition 2008) che si poggia su un db ACCESS. Ho utilizzato OleDbConnection e Provider=Microsoft.Jet.OLEDB.4.0.
    [...]
    Non risollevare discussioni altrui e vecchie di mesi: come indicato nel Regolamento, apri una nuova discussione seguendo le norme indicate per affrontare il tuo problema.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.