Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB6] Gestione connessione multiple con DB Access

    Buongiorno a tutti,
    devo implementare un programma in modo che più utenti possano accedere allo stesso db visualizzando, inserendo o aggiornando i dati. Come faccio a vedere se una tabella è già aperta o se un'utente gli sta apportando modifiche? La connessione che uso è di tipo ADO.
    Non sono molto pratica di connessioni multiple... Mi sapreste aiutare?

    Grazie in anticipo per il vostro aiuto

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Questo
    Progetto Prova Login v.3
    http://nuke.vbcorner.net/Progetti/VB...T/Default.aspx

    è un progetto-template che mostra tutte le fasi 'standard' di un applicazione di accesso ai dati, a partire dal LOGIN, inclusa la gestione multi-utente (usa la concorrenza ottimistica).

  3. #3
    Gibra ho scaricato ed avviato il progetto che mi ha postato e.... non l'ho capito molto.
    Esiste solo il metodo della "concorrenza ottimistica" per testare se una tabella è in uso?


  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da alessietta76
    Gibra ho scaricato ed avviato il progetto che mi ha postato e.... non l'ho capito molto.
    Bhè, 20 minuti mi sembrano davvero pochini per comprendere un argomento su cui sono stati scritti decine e decine di libri.

    Originariamente inviato da alessietta76
    Esiste solo il metodo della "concorrenza ottimistica" per testare se una tabella è in uso?
    Ma cosa c'entra se la tabella è in uso??????????????????
    Ti è appena stato dato un suggerimento, e già lo scarti (dimostrando di non aver capito un'acca) e già corri a chiederne un'altro! Non è questo il modo di imparare.

    Dopo aver ricevuto un suggerimento si studia, ci si documentata, si fanno ricerche.
    Questo è lo spirito di un forum.

    Già il mio progetto è un grossissimo aiuto perchè ti posso assicurare che nel web non se ne trovano tanti così completi (almeno io non ne ho mai trovati).
    Quel progetto è espererienza di anni di lavoro e pratica, e tu in 20 minuti prendi di capire tutto.
    Se per te è troppo difficile da capire, non so cosa dirti.
    Vuoi la bicicletta? Pedala.

    Using Optimistic Concurrency
    http://msdn.microsoft.com/en-us/libr...cz(VS.80).aspx


    Comunque l'uso della concorrenza ottimistica è, in linea generale, considerato il migliore approccio.
    Ma comunque questo dipende dal contesto dell'applicazione, dello scenario, della situazione, del caso specifico, ecc. Tu sei già in grado di valutare questi casi particolari?

    A meno che tu non voglia usare la concorrenza pessimistica in cui un utente apre un record (bloccandolo così a tutti gli altri utenti) e poi se ne dimentica perchè era in ritardo per il corso di aggiornamento mensile, oppure è andato in pausa a prendersi un caffé, in bagno, ecc.,
    così nessun altro utente potrà accedere a quel record.
    Che bello vero?


  5. #5
    Gibra, non era mia intenzione svalutare il tuo lavoro.
    Il tuo progetto lo avevo scaricato tempo addietro proprio in previsione dell'implementazione che mi aveva chiesto il cliente.
    Perciò, non ho passato solo 20 minuti ad esaminarlo ed a capirne il funzionamento .
    Ho letto parecchi articoli sulla "concorrenza ottimistica" e la maggior parte la sconsigliano per db Access anzi, sconsigliano proprio access inoltre, la gestione della concorrenza ottimistica presenta non pochi problemi in caso di una disconnessione accidentale.
    Così, valutando tutti i pro ed i contro e visto che la multi connessione che devo gestire si limita solo a 2 utenti e che la scrittura su Access viene ritardata di qualche secondo rispetto a quando gli si da il comando (detta anche write latency), ho gestito la cosa in maniera diversa.
    Ho notato che nel tuo progetto, hai aggiunto 2 campi, in ogni tabella, per poterti prendere e raffrontare il valore. Così, prendendo spunto da questa cosa, ho gestito la connessione in un modo diverso:
    - Ho creato un campo utente (text) ed un campo occupato (boolean) in ogni tabella del db
    - Ho creato una routine pubblica in modo da non dovere riscrivere lo stesso codice per tutte le maschere
    - Ogni volta che l'utente A richiama un record o vuole fare un nuovo inserimento, il programma va a scrivere il nome utente nella rispettiva tabella e mette a true il campo occupato in questo modo, se l'utente B vuole apportare modifiche a quella tabella, il programma gli visualizza un messaggio che gli dice di attendere che l'utente A abbia finito. Quando l'utente A ha finito o chiude il programma, il campo occupato viene messo a false.

    E' da ieri che lo sto testando e, per il momento funziona a dovere (anche se il migliore tester è sempre il cliente o una persona che non ha scritto il codice).

    Scusami ancora se, ho offeso te ed il tuo operato... non era mia intenzione

    Grazie ancora del tuo consiglio

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da alessietta76
    Gibra, non era mia intenzione svalutare il tuo lavoro.
    Il tuo progetto lo avevo scaricato tempo addietro proprio in previsione dell'implementazione che mi aveva chiesto il cliente.
    Perciò, non ho passato solo 20 minuti ad esaminarlo ed a capirne il funzionamento .
    Ho letto parecchi articoli sulla "concorrenza ottimistica"
    Magari se lo dicevi PRIMA, si capiva qualcosa di più sul tuo operato.
    Ti serva per la prossima volta...

    Originariamente inviato da alessietta76
    e la maggior parte la sconsigliano per db Access anzi, sconsigliano proprio access
    Personalmente ho diverse applicazioni che 'girano' in multi-utenza da molti anni (in reti LAN locali ma anche da reti remote in Terminal Server) e fino a 15 utenti, usano Access e non ho mai, ripeto mai , avuto alcun problema, di nessun tipo.
    Dipende da come si sa gestire il tutto.

    Originariamente inviato da alessietta76
    inoltre, la gestione della concorrenza ottimistica presenta non pochi problemi in caso di una disconnessione accidentale.
    Come sopra. Mai avuto nessuno problema!
    E proprio non vedo dove possano sorgere i problemi con la concorrenza ottimistica, dato che non c'è lock sul record.

    Originariamente inviato da alessietta76
    Così, valutando tutti i pro ed i contro e visto che la multi connessione che devo gestire si limita solo a 2 utenti
    Che siano 2 o 10 non cambia assolutamente nulla.

    Originariamente inviato da alessietta76
    e che la scrittura su Access viene ritardata di qualche secondo rispetto a quando gli si da il comando (detta anche write latency),
    A me non accade mai.

    Originariamente inviato da alessietta76
    ho gestito la cosa in maniera diversa.
    ....
    - Ogni volta che l'utente A richiama un record o vuole fare un nuovo inserimento, il programma va a scrivere il nome utente nella rispettiva tabella e mette a true il campo occupato in questo modo, se l'utente B vuole apportare modifiche a quella tabella, il programma gli visualizza un messaggio che gli dice di attendere che l'utente A abbia finito. Quando l'utente A ha finito o chiude il programma, il campo occupato viene messo a false.
    Sei davvero convinta della tua scelta?
    Esempio: se cade la connessione, chi è che andrà a rimettere a False il campo occupato ?
    Poi, addirittura bloccare la tabella?
    Scusa la franchezza, ma questi 'metodi fatti in casa ' li ho visto attuare decine di anni fa (e con scarso successo).
    Ovviamente sei libera di fare come meglio credi...

    Originariamente inviato da alessietta76
    Scusami ancora se, ho offeso te ed il tuo operato... non era mia intenzione
    Grazie ancora del tuo consiglio
    Tranquilla, non mi sono assolutamente offeso.
    Ho solo espresso la mia opinione in base alle informazioni che avevo a disposizione.
    Credo che chiunque, al posto mio, avrebbe pensato la stessa cosa.


  7. #7
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Scusate l'intrusione, anc he ai mod.

    Ma non resisto.

    Originariamente inviato da alessietta76

    Scusami ancora se, ho offeso te ed il tuo operato... non era mia intenzione

    Grazie ancora del tuo consiglio
    E lo ringrazi e ti scusi pure????? io ce lo avrei mandato da tempo per la tracotanza e la maleducazione.

    Scusate e ritorno in OT
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

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

    Moderazione

    Originariamente inviato da kalosjo
    Scusate l'intrusione, anc he ai mod.
    Ma non resisto.
    In futuro è meglio se resisti, perché questi interventi fuori luogo e che non aggiungono nulla alla discussione non sono ben tollerati.

    Se si ritiene che ci sia un problema, si segnala la discussione, evitando di fare gli avvocati per qualsivoglia motivo, visto che peraltro non c'è alcun altro intervento tuo a livello tecnico in questo thread.

    Detto questo, invito come sempre a fornire suggerimenti tenendo anche ben presente di come possono essere recepiti, in quanto non essendoci una conoscenza personale né la possibilità di interagire con l'interlocutore nella lettura del testo, non sempre si riesce a percepire il tono con cui viene scritto.

    Passo e chiudo qui.
    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.