Seite 1 von 1

Tipp: Eindeutige IDs generieren

Verfasst: Fr, 26. Jun 2015 20:03
von Tom
Wir haben hier ja wiederholt die Diskussion über AutoIncrement-Felder und die Problematik mit eindeutigen Zählern in Netzwerken gehabt.

Wenn es jedoch nur darum geht, eine eindeutige Identifizierung zu erlauben, ist die UUID das Mittel der Wahl. Eine UUID ist ein "Universally Unique Identifier", also ein Merkmal, das sogar weltweit eindeutig ist. Seit der Version 1.9 enthält Xbase++ Wrapper-Funktionen für die entsprechende Windows-Funktionalität. Mit:

myUuid := UuidCreate()

lässt sich ein solcher Identifier erzeugen - zunächst binär. Mit:

cUuid := UuidToChar(myUuid)

entsteht daraus eine 36 Zeichen lange Zeichenfolge (hexadezimal, gruppiert, z.B. "6f792f1f-e17f-4591-9d23-5c024551e839"), bei der mit extrem hoher Wahrscheinlichkeit (1 / 5*10^36) davon auszugehen ist, dass sie erstens auf dem System und zweitens sogar global noch nie verwendet wurde.

Erzeugt man also interne "Nummerierungen" - für Kunden, Rechnungen, Angebote, Einträge in abhängigen Tabellen usw. -, so kann man sich die Herumhempelei mit Zählern, Zählertabellen und ähnlichem Kokolores sparen, wenn es nur darum geht, Datensätze anderen eindeutig zuzuordnen. Ich mache das schon seit einer Weile so, habe hier aber nur in anderen Kontexten Hinweise auf UuidCreate() gefunden. "Interne Nummer" kann man leichterhand hierdurch ersetzen, muss dann allerdings mit alphanumerischen Indexen hantieren.

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 8:39
von mini990
Toller Tipp, danke!

Eine Frage: Ich verwende die Version 1.90.355 vom 10.4.2009
Meine Dokumentation (Helpfiles) sind vom 26.4.2006

Die Funktion UuIDCreate() ist dort - natürlich - nicht enthalten.
Sind die "neuen" Funktionen irgendwo nachlesbar?

Gruß Stefan

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 9:51
von Jan
Stefan,

in der 1.9 SL1 (das ist die 1.9.355 von 2009) ist UuidCreate() enthalten. Deine Doku ist aber die von der 1.9 (aus 2006). Und in der gab es die in der Tat noch nicht.

Jan

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 10:08
von mini990
Wenn ich mich recht entsinne (ist ja schon Jahre her...) war kein aktueller Helpfile beim Update dabei.
Kann ich das irgendwo nachlesen?

Gruß Stefan

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 10:28
von Jan
Schau mal bitte in Dein Postfach

Jan

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 11:11
von Manfred
hm, ich habe jetzt einmal etliche Folgen erzeugt. Sehe ich das richtig, dass die immer nach dem gleichen Schema aufgebaut sind?

Zeichenfolge "-" zeichenfolge "-" usw. und die Zeichenfolgen habe immer die gleiche Anzahl in ihrem Auftreten an der jeweiligen Stelle?

Re: Tipp: Eindeutige IDs generieren

Verfasst: Sa, 27. Jun 2015 12:14
von Tom
Hallo, Manfred.

Ja, der gruppierte Aufbau wiederholt sich. Siehe auch hier:

https://de.wikipedia.org/wiki/Universal ... Identifier

Re: Tipp: Eindeutige IDs generieren

Verfasst: Mo, 06. Feb 2017 8:36
von AUGE_OHR
muss nochmal vorsichtshalber anfragen

Code: Alles auswählen

*     hWndRoot := oDXEobj:GetHWnd()
      hWndRoot := Bin2u(UuidCreate())
ich benötige einen Ersatz für o:GethWnd() weil das DataRef nicht hat.

Frage : welchen Bereich gibt o:GetHWnd() aus ?

mit Bin2u() sind es nur positive Werte während ich mit Bin2l() ja auch negative Werte bekomme ... was ist nun richtig :-k