Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    [VB.NET] - Consiglio per aggiornamento records

    Ciao Carissimi!

    Vi pongo un piccolo quesito.

    Io ho un applicazione che contiene un elenco clienti e le relative parcelle emesse verso questi clienti.
    Nel mio DB Access ci sono 2 tabelle: Clienti e Parcelle (messe in relazione uno a molti tra di loro).

    Ora ho un piccolo problema. Mettiamo che l'utente voglia installarsi il programma sia nel pc dell'ufficio che in quello di casa, sarebbe necessario aggiornare i dati del db da un pc all'altro creando un pacchetto d'aggiornamento importabile (col programma stesso).

    Mi trovo ad affrontare un po di problemi di natura progettuale....

    Per esempio i clienti...io li ho identificati con un contatore (e cmq ho le P.IVA e i C.Fiscali che sono univoci) e potrei esportare tutta la tabella su un file che poi verebbe reimportata nel PC2 dove il software controllerebbe la presenza dell'ID e se non è presente aggiunge il record....

    Il problema è questo:

    Mettiamo il caso che sul pc1 io ho il cliente "Mario Rossi" e sul pc2 ho anche il cliente "Mario Rossi".
    Un giorno correggo il nome che non era Mario ma Marco sul pc1 e quindi diventa "Marco Rossi" come posso gestire l'aggiornamento sul pc2? Se uso solo i campi univoci come identificazione?

    Esiste un modo per confrontare 2 records in modo da vedere se sono esattamente identici? e nel caso ottenere quali campi hanno valore differente?

    E' un casino da spiegare lo so spero sia stata comprensibile

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    E' difficile introdurre dei meccanismi di questo tipo in un'applicazione esistente nel quale non sono stati presi in considerazione dall'inizio, ovviamente senza modificare radicalmente l'applicazione.

    La problematica è abbastanza chiara.

    La soluzione più rapida potrebbe essere quella di consentire un accesso al database univoco tramite Internet, ma le performance non sono assolutamente ottimali e la sicurezza diventa un problema da affrontare, a meno di non usare una VPN.

    In caso contrario, è necessario modificare il programma affinché la base dati centralizzata possa essere aggiornata in modalità disconnessa dai client distribuiti, che provvedono a operare sui dati, a salvare le modifiche in un database locale e a pubblicare queste modifiche sul database centrale per aggiornarlo e sincronizzarlo, ottenendo anche le "novità" create dagli altri utenti del sistema.

    Capisco che, detto così, tutto sia molto generico, ma purtroppo nel modo in cui la domanda è stata posta non è possibile dare molte altre indicazioni, se non studiare la documentazione della classe DataSet e correlate, approfondire argomenti come la serializzazione e così via.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Dipende da quanti utenti usano il programma.

    Se è lo stesso utente che lo usa in più postazioni, ma solo in una postazione per volta, allora basta la copia del DB.

    Se invece sono due o più utenti che usano il programma su postazioni diverse allora è davvero un casino perchè dovresti avventurarti in un lavoro abnorme.
    Secondo me eviterei come la peste di tentare una cosa del genere.

    Certo che puoi vedere quali cambi sono cambiati, basta confrontare i due record ma questo ma poi come fai a sapere quale dei due valori conservare?
    Lo, mi risponderai che usi un campo date/time che registra l'ultima modifica.
    Appunto. Non basta sapere l'ultima modifica! Perchè:

    Tu scarichi il DB sul PC2, nel frattempo nel PC1 :
    1 - l'utente potrebbe aver modificato il Nome ed il Telefono

    Ora nel PC1:
    2 - l'utente inserisce la PartitaIVA.

    Adesso prova a fare l'aggiornamento in base alla data di modifica...
    Cosa succederà?
    Che i dati modificati sul PC1 andranno sovrascritti da quelli del PC2, quindi il Nome ed il Telefono torneranno uguali a quelli prima della modifica.

    Per essere certi al 100% dovresti tenere un log di ogni singola modifica, ovvero di ogni singolo campo modificato, con data/ora e utente. Nemmeno se mi pagano lo faccio!

    Le soluzioni alternative dipendono dallo scenario, che ho ipotizzato sopra.
    Quindi prima devi spiegare quanti utenti accedono al programma e su quante postazioni (multi-Utenza?) poi ne riparliamo.

    :bye:

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Intanto grazie per le risposte!
    Mi spiego meglio!

    L'utente è uno solo e usa il software su + pc (non contemporaneamente ovviamente).

    non posso fare la sovrascrittura del DB perchè può capitare che usi sia il PC1 che il PC2 e non possa fare l'aggiornamento... quindi otterrei tipo:


    pc1 con cliente A B C
    pc2 con cliente D E F

    e se sovrascrivessiin entrambi i casi mi mancherebbe 3 clienti!
    mentre io voglio che creando il pacchetto col pc2 mi si aggiorni (tramite quel pacchetto) il pc1 con Clienti A B C D E F! (e viceversa)

    è un casino lo so magari posso fare un aggiornamento solo per le aggiunte e non per le modifiche

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Originariamente inviato da gibra
    Se è lo stesso utente che lo usa in più postazioni, ma solo in una postazione per volta, allora basta la copia del DB.
    Anche in questo caso, secondo me, le probabilità di disastro sono molto elevate.

    Questa soluzione va bene se si tratta magari di una situazione di emergenza, con un PC che tira le cuoia, utilizzandone un altro mentre il primo viene ripristinato.

    Se si usano abitualmente entrambi i PC, anche ammesso di ricordarsi sempre la procedura, è un attimo che nella distrazione e nell'impegnativa attività quotidiana si arrivi a fare una modifica su entrambi i database, non riuscendo più a sincronizzare i dati perché ogni copia, sovrascrivendo l'altra, annullerebbe le une o le altre modifiche.

    E' chiaro che se il suo cliente accetta consapevolmente di farlo, allora tanto meglio.

    Io sarei comunque per evitare il più possibile la necessità di interventi manuali in qualsiasi frangente...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Originariamente inviato da Veronica80
    L'utente è uno solo e usa il software su + pc (non contemporaneamente ovviamente).
    non posso fare la sovrascrittura del DB perchè può capitare che usi sia il PC1 che il PC2 e non possa fare l'aggiornamento...
    Comprendo perfettamente.

    Originariamente inviato da Veronica80
    è un casino lo so magari posso fare un aggiornamento solo per le aggiunte e non per le modifiche
    Secondo me, per giungere a una soluzione occorre valutare bene gli scenari in cui si va a ricadere, e anche quello che sei disposta a tollerare come modifica al programma.

    Se stai cercando uno strumento che risolva in automatico la problematica senza toccare nulla, dubito che esista.

    In alternativa, potresti proporre di passare a un'applicazione Web, rendendo quindi accessibile ovunque l'interfaccia utente del tuo programma mantenendo un unico "storage" dei dati, invisibile all'esterno (anche se Access non è propriamente adatto a questa tipologia di utilizzi).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    No no storage condivisi no anche perchè nello scenario non è prevista la connessione internet...

    Non cerco un applicazione che faccia questo! Volevo sapere (a livello logico) come strutturare il progetto di aggiornamento per il mio software! Poi avrei "tradotto" la logica in codice da eseguire

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,477
    Temo che tu debba approfondire le architetture cosiddette multitier.

    Un articolo che ne parla è qui.

    La problematica di cui parli è molto vasta: non si spiega in quattro parole.

    E' anche mediamente complessa, ma non impossibile da implementare.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Veronica80
    L'utente è uno solo e usa il software su + pc (non contemporaneamente ovviamente).

    non posso fare la sovrascrittura del DB perchè può capitare che usi sia il PC1 che il PC2 e non possa fare l'aggiornamento...

    Allora i casi sono 3:

    1) è la soluzione più semplice per te, ma è la peggiore in assoluto (sconsigliata!):
    Crei una procedura che alla chiusura del programma carica il database sul WEB.
    Alla successiva apertura lo scarica dal web.
    Questa fase è obbligatoria, se l'utente la 'salta' va a rischio di perdita di dati.
    Cavoli suoi.

    (2) è la migliore soluzione in assoluto:
    Lasci perdere l'applicazione desktop e la trasformi in un'applicazione WEB, poi metti il database su uno spazio web e l'utente può accedere al database SOLO via internet, da qualunque postazione, anche se cambia PC.

    (3) questa soluzione richiede che il server dell'ufficio sia sempre connesso ad internet.
    Scenario: ufficio - casa
    - Il computer dell'ufficio fungerà anche da server, e dovrà essere configurato per accettare connessioni esterne.
    - Dal computer a casa, l'utente si connetterà al server dell'ufficio con il Desktop Remoto di Windows oppure ancor meglio in Terminal Server (se disponibile) accedendo quindi al DB sul server.
    Questa soluzione l'ho implementata con successo circa 5 anni fa per uno studio commercialista con 15+ utenti che si devono connettere da più uffici.
    La connessione avviene in Terminal Server per gli uffici periferici, alla rete LAN dell'ufficio centrale. Come server prima avevano Windows 2000 poi aggiornato a Windows Server 2003. Come client hanno il solito mix: 2000, XP, Seven (no Vista, please!) e gira perfettamente senza nessun problema riscontrato.

    Nota che nei casi 2 e 3, l'applicazione è già pronta per essere eseguita in multi-utenza, a patto che tu abbia predisposto la stessa a questo uso.



    Ogni altra soluzione, ancorchè complicata, non garantirà mai la perfetta sincronizzazione dei dati. Soprattutto se lasci all'utente la possibilità di scegliere.


  10. #10
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    mmm ma non posso mettere web come requisito minimo

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.