Newsgroup: it.comp.lang.visual-basic
Titolo: Come generare GUID e realmente sono unici ???

Come posso generare, da codice, un GUID e posso realmente fidarmi che siano 
unici?
Chiedo questo perche' girovagando per la rete si trovano persone disposte a 
giurare che il GUID appena generato e' uguale ad uno gia' presente nel 
sistema!!!
Conoscete un altro modo efficace di generare un valore che sia univoco anche 
da parte di macchine diverse?
Ciao e grazie
RobertoA

 ha scritto nel messaggio 
news:43e4ee1b$1...@newsgate.x-privat.org...

Si può ricavarlo un uniqueidentifier dal db.
Un esadecimale della data.
Ma per essere sicuri, dopo la costruzione, è sempre meglio verificare se è 
presente in tabella.
Ave
giuseppeD
---
Non l'avrei giammai creduto
(Don Giovanni)


Forse non mi sono spiegato bene.
Ho diversi pc che mantengono, off line, ognuno la propria anagrafica.
Di tanto in tanto il pc1 deve sincronizzarsi col pc2 e quindi importera' 
tutte le anagrafiche che l'operatore del pc2 ha inserito.
La volta successiva che pc1 e pc2 si sincronizzeranno e' evidente che pc1 
non dovra' importare tutte le anagrafiche di pc2 ma solo quelle nuove, 
create dopo la prima sincronizzazione.
Inoltre per le anagrafiche gia' importate la prima volta dovra' aggiornare i 
dati se diversi da quelli all'interno del proprio archivio.
Quindi mi servirebbe un sistema, non legato al db, che permetta di generare 
dei valori univoci anche se creati da macchine diverse.
Se legassi la cosa al db, sicuramente esisterebbero dei doppioni tra pc1 e 
pc2, doppioni che conterrebbero dati diversi.
Ciao e grazie
RobertoA

 pc2, doppioni che conterrebbero dati diversi.
Questo è il problema che si pone per esempio ai venditori che inviono gli 
ordini acquisiti al db centrale.
Scorriamo le idee.
1- ogni db può essere considerato come una succursale, quindi il contatore 
può essere composto da un acronimo iniziale e da un numero sequenziale.
Es. ABA0001 ; ABA0002 ; ecc. per il primo
TAT0001; ecc. per il secondo
2- Il problema che hanno la sincronizzazione dei db Access.
Se hai Access, apri un db > Strumenti > Replica
Con access puoi costruire una tabella contatore con valori campo Casuale.
Sfido a ottenere due valori uguali.
Non si vuole essere legati al db.
- Si può utilizzare il SN dell'HD per la costruzione dell'identificativo.
Ave
giuseppeD
---
CCR 

 dell'identificativo.
Il SN *non* e' un dato univoco. Su alcuni modelli di
portatili ad esempio e' *uguale* per tutta la serie.
Io utilizzo due campi, per l'identificazione univoca di
aggiornamenti. Il "nome utente", inserito a livello
software (non quello di windows per intenderci), ed il
"timestamp" (yyyymmddhhNNss) che e' anche campo di
confronto per avere il record piu' aggiornato.
Entrambi sono campi aggiuntivi in quei record che
devono essere sincronizzati e che vengono valorizzati
su insert o update.
hth,
Lokar 

 Lokar
Ave
giuseppeD 

RobertoA wrote:

Ciao,
ti rispondo al volo (ultimamente sono molto impegnato e seguo raramente il 
ng)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/html/8d5cedea-8c2b-4918-99db-1a000989f178.asp
"...The CoCreateGuid function calls the RPC function UuidCreate, which 
creates a GUID, a globally unique 128-bit integer. Use the CoCreateGuid 
function when you need an absolutely unique number that you will use as a 
persistent identifier in a distributed environment.To a very high degree 
of certainty, this function returns a unique value – no other invocation, 
on the same or any other system (networked or not), should return the same 
value..."
"How To Use CoCreateGUID API to Generate a GUID with VB"
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176790
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca