Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Sincoronizzare tabelle mysql
lunedì 21 ottobre 2013 - 14.29
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Visual Studio 2010
|
MySQL 5.5
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
lun 21 ott 2013 - 14:29
Buon pomeriggio a tutti,
mi trovo nella situazione di dover sincronizzare dei database che risiedono uno su un server centrale e gli altri nei pc portatili degli agenti, in pratica cosa dovrei fare
Dal server centrale viene creato per ogni agente il portafoglio cliente per il giorno dopo, l'agente si reca dai clienti e popola il database con i dati, al rientro in sede dovrebbe riversare i dati da lui inseriti nel database centrale.
Come posso gestire la situazione? mettendo anche in conto che magari qualche agente può acquisire qualche cliente nuovo durante il giro giornaliero e quindi deve essere inserito nel database centrale.
I dati da sincronizzare devono essere inseriti in un file txt per poter effettuare la sincronizzazione dei database
Uso visual studio 2012 win form e mysql
Grazie in anticipo
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
mar 22 ott 2013 - 22:39
Ciao, trovo il quesito un po' troppo generico per potere dare una risposta precisa, ma ci proverò...
Se non ho capito male hai bisogno di sincronizzare un database centrale con quello del cliente in modalità offline (e quindi senza utilizzare un servizio connesso come un webservice), in entrambe le direzioni, e come prima cosa mi verrebbe in mente di gestire il tutto utilizzando degli stati di sincronizzazione. In pratica arricchirei i record del database con uno stato per conoscere con precisione se un record è già stato scaricato oppure no, ovviamente in entrambi i database, e questo stato andrebbe gestito per cliente ovviamente, specialmente considerando se le tabelle da sincronizzare sono tabelle in comune con più clienti.
Facciamo l'esempio di una tabella così:
Customers
----------------
CustomerId
FirstName
LastName
Questa tabella sarà sia nel db centrale che dal cliente, e per sapere quali record devono essere scaricati per l'agente e viceversa, vanno create delle tabelle di supporto.
Nel db centrale metterei due tabelle:
Agents
----------------
AgentId
FirstName
LastName
UsersSync
----------------
UserId
AgentId
Status (New, Changed)
E nel db del cliente/agente (oltre alla tabella Customers):
UsersSync
----------------
UserId
Status (New, Changed)
In questo modo il db centrale riesce a gestire gli stati di sincronizzazione di più agenti, e quindi per ogni agente sa perfettamente quali dati nuovi o cambiati gli deve esportare al prossimo giro, mentre l'agente deve solo sapere quelli che deve mandare al db centrale.
Quando si effettuano operazioni dalla centrale, e ad esempio si modifica o aggiunge un customer, devono essere inserite nella UsersSync tante righe quanti sono gli agenti, con lo stato opportuno (new o changed), così quando arriva il momento di scaricare i dati dell'agente si sa perfettamente cosa esportare dalla tabella Customers, e non appena esportato si rimuove la riga dalla UsersSync, oppure gli si aggiorna lo status a Exported e magari si mette anche qualche data di riferimento tipo ChangedDate e ExportedDate, giusto per essere in grado eventualmente di recuperare l'ultima esportazione se qualcosa nel passaggio all'agenzia dovesse andare storta. Stessa cosa avviene dal db dell'agente.
Sono andato vicino a quello che chiedevi?
ciao
-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
mer 23 ott 2013 - 15:13
Grazie per la risposta,
si hai centrato il problema, solo che il problema è mio in quanto non ho mai fatto niente dele genere e quindi
1) come lancio la procedura di sincronizzazione?
2) essendo pc non connessi in rete!
3) bisogna esportare i dati in un file testo?
4) come importo i dati nei database?
Avrai capito che sono autodidatta è cerco di imparare
Grazie
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
sab 26 ott 2013 - 22:22
>Grazie per la risposta,
>si hai centrato il problema, solo che il problema è mio in quanto
>non ho mai fatto niente dele genere e quindi
scusa se rispondo solo ora, ma ho avuto un po' da fare in questi giorni, ma ecco le risposte...
>1) come lancio la procedura di sincronizzazione?
penso che dovrà essere una procedura sviluppata nella tua applicazione che viene lanciata dall'applicazione win form, e che immagino chiederà l'input di un file contenente i dati da importare, precedentemente esportati dal server centrale che a sua volta dovrà avere un applicazione di backend per potere esportare su file i dati per ogni agente a cui devi aggiornare il database.
>2) essendo pc non connessi in rete!
>3) bisogna esportare i dati in un file testo?
Utilizzando un esportazione su file puoi riuscire a fare questo passaggio di dati senza essere connesso: per il server centrale puoi creare un applicazione o win form oppure una console application (che eventualmente trasformi poi in un servizio windows con Topshelf
http://topshelf-project.com/
) per creare un processo automatizzato, ad esempio ogni notte. Questa applicazione andrà a creare un file per agenzia contenente i dati che sa di dovere esportare per ogni agenzia sfruttando la struttura a database che ti ho consigliato.
>4) come importo i dati nei database?
Dall'applicazione winform dell'agente farai un interfaccia che chiede l'input di un file, che sarà la base dei dati da importare nel suo database, e allo stesso modo farai l'esportazione viceversa, dall'agente verso il server centrale. Il server centrale potrà avere una cartella comune di deposito file, dove gira quell'applicazione console/winservice, che periodicamente controlla se esistono file da elaborare, e se si, li elabora importando i dati, e poi toglie il file dalla cartella. In questo modo non c'è bisogno di un particolare software winform lato server, ma può bastare una semplice cartella condivisa in rete, o un accesso ftp dove copiare tutti i file esportati dagli agenti.
>Avrai capito che sono autodidatta è cerco di imparare
>Grazie
>Mau67
ciao
-------------------------------------------------------
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
dom 27 ott 2013 - 17:10
Ciao ci sarebbe la possibilità di avere qualche esempio di codice da visionare per fare tutto quello che hai descritto?
te ne sarei grato.
Buona domenica
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
mer 30 ott 2013 - 12:52
è un po' tanto quello che mi chiedi, perchè non so se avrò tempo per fartelo, se in questi giorni riesco a farti un qualcosa di esempio te lo posto, ma non ci sperare troppo
Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
mer 30 ott 2013 - 14:45
Ok grazie
Mau67
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
ven 28 feb 2014 - 15:15
Ciao sei ancora disposto in base ai tuoi impegni ad aiutarmi per risolvere questo problema?
Grazie
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
dom 2 mar 2014 - 11:19
Ciao, purtroppo sono in ferie e tornerò la prossima settimana e immagino sarò presissimo, appena torno vedrò se riesco a trovare un po' di tempo
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
dom 2 mar 2014 - 11:27
Ok grazie buone ferie
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
sab 15 mar 2014 - 17:02
1955_SyncSample.zip
Ciao,
rieccomi, sono riuscito a farti un piccolo esempio (vedi allegato), questo è il massimo che posso farti per il tempo che ho
, ovviamente ho tralasciato diversi punti che dovrai implementare tu in base anche alle tue necessità funzionali, ma diciamo che il succo è quello.
Per farlo funzionare, accendi le due wpf application e poi:
1 - premi "Inizializza Database Master" sull'applicazione "Sync Sample - Master"
2 - premi "Inizializza Database Slave" sull'applicazione "Sync Sample - Agent Slave"
3 - premi "Simula Cambiamenti Clienti" sull'applicazione "Sync Sample - Master"
4 - premi "Esporta per Database Agente" sull'applicazione "Sync Sample - Master"
5 - Incolla (CTRL+V) nell'apposita textbox di importazione, sull'applicazione "Sync Sample - Agent Slave"
6 - premi "Importa da Database Master" sull'applicazione "Sync Sample - Agent Slave"
ora puoi verificare che il database dell'agente è stato sincronizzato con le modifiche del master.
Il tutto sfrutta entity framework e sql compact, ma solo perchè mi risultava veloce e semplice, tu ovviamente puoi utilizzare qualsiasi altro meccanismo di accesso al database.
spero ti possa essere d'aiuto
Ciao!
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
ven 21 mar 2014 - 20:20
Grazie per il tempo dedicato è ottimo il progetto ti ringrazio immensamente.
Ciao alla prossima
Mau67
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
sab 22 mar 2014 - 01:55
>Grazie per il tempo dedicato è ottimo il progetto ti ringrazio
>immensamente.
>Ciao alla prossima
Alla prossima
Ciao!
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !