PDA

Visualizza la versione completa : [Firebird-Delphi] Merge database


bomberone74
17-09-2012, 20:22
Salve a tutti,
qualcuno conosce qualche componente o utility che mi permetta di sincronizzare due database firebird con struttura identica?

Ho un software che lavora in rete e mi hanno chiesto la possibilità di poterlo usare in locale a casa di ogni utente per poi sincronizzare tutte le modifiche effettuate una volta che ritorna in ufficio.

Grazie.

Nettuno95
17-09-2012, 23:32
mmmm hai preso in considerazione alcuni fattori ...
L'ultimo che fa l'update vince ???

Definisci "sincronizzare" ???
Se hai 2 utenti e tutti e 2 cambiano il campo XXX della tabella YY ... chi vince ???
Il lunedì Mario Rossi, il martedì Givanni Verdi ... e così via, solo perchè il DB di Mario Rossi o Giovanni Verdi viene fatto girare x ultimo ???

Hai pensato ad una soluzione che ti permette di mettere il DB su web e tutti lavorano 'On Line".
A meno che ogni utente non abbia la sua "work area" allora....
A partire dalla versione XE Delphi mette a disposizione un datasnap avanzato che ti permette di colloquiare con DB remoti

bomberone74
18-09-2012, 12:40
Si hai ragione sul discorso update. Nel mio specifico caso vince l'ultimo che esegue il merge. Ad ogni modo l'utente off-line può solamente inserire record nuovi e non modificarne di già esistenti.
Il mio problema è che su una tabella l'utente A on-line crea il codice nuovo 100 che è il primo libero e allo stesso tempo l'utente B off-line crea il codice nuovo 100 (il primo libero anche per lui) e quando eseguono il merge vi è un conflitto. Qua non so cosa fare, perchè il record dell'utente B dovrebbe essere inserito con 101.

Non so proprio come fare questa cosa

Nettuno95
18-09-2012, 16:49
L'ideale sarebbe un web service che interrogato ti restituisce il numerino giusto, ma se sei off-line non lavori, altra idea potrebe essere attribuire agli utenti range predefiniti di codici User_1 range 1-10000, User_2 10001-20000 ect ect ect
e, nel caso, nel momento in cui fai il merge ricalcolare con i codici giusti, ma alla fine sono tutti accrocchi.... e la probabilità di errore è dietro l'angolo.

bomberone74
18-09-2012, 17:25
Si hai ragione. Avevo pensato anche io ad una soluzione con range di codici predefiniti, ma oltre allo sbattimento di sviluppare tutto la possibilità di bug non la evito al 100%

lanciafiamme
18-09-2012, 17:27
Bhè la soluzione mi sembra abbastanza semplice, devi avere un campo chiave che viene calcolato al momento, e non autoincrementante.
Puoi sbizzarrirti come vuoi, a cominciare da una funzione tipo md5 (o crc32 se le righe son poche) dove "fondi" pezzi del record che vuoi inserire, magari aggiungendo nome del computer, data e ora, poi "mischi" tutto et voilà.
:D

lanciafiamme
18-09-2012, 17:28
Originariamente inviato da Nettuno95
L'ideale sarebbe un web service che interrogato ti restituisce il numerino giusto Assolutamente NO, considerata la latenza di internet se c'è una cosa da NON fare è prendere una chiave in questo modo
:fighet:

PS non è che sia tutta farina del mio sacco, però mi piace atteggiarmi come se lo fosse :yuppi:

Nettuno95
18-09-2012, 17:41
Assolutamente NO, considerata la latenza di internet se c'è una cosa da NON fare è prendere una chiave in questo modo
Con DXE2 e il datasnap il giochino lo fai in 2 min puntando direttamente al Generator sul server...
Nel caso di errore dovuto al "WEB" hai un ritorno nullo/errore e non fai nessun append :)

bomberone74
18-09-2012, 17:46
Si però devi avere DEX2 in versione Enterprise come minimo per sviluppare con datasnap...

Nettuno95
18-09-2012, 19:16
Basta anche DXE....
ma tieni conto che domani a Milano c'e' la presentazine di DXE3 ... quanti soldoni che spillano :fighet:
:)

Loading