Tipp: Eindeutige IDs generieren
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Tipp: Eindeutige IDs generieren
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.
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.
Herzlich,
Tom
Tom
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Tipp: Eindeutige IDs generieren
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
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
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Tipp: Eindeutige IDs generieren
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
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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Tipp: Eindeutige IDs generieren
Wenn ich mich recht entsinne (ist ja schon Jahre her...) war kein aktueller Helpfile beim Update dabei.
Kann ich das irgendwo nachlesen?
Gruß Stefan
Kann ich das irgendwo nachlesen?
Gruß Stefan
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Tipp: Eindeutige IDs generieren
Schau mal bitte in Dein Postfach
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Tipp: Eindeutige IDs generieren
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?
Zeichenfolge "-" zeichenfolge "-" usw. und die Zeichenfolgen habe immer die gleiche Anzahl in ihrem Auftreten an der jeweiligen Stelle?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Tipp: Eindeutige IDs generieren
Hallo, Manfred.
Ja, der gruppierte Aufbau wiederholt sich. Siehe auch hier:
https://de.wikipedia.org/wiki/Universal ... Identifier
Ja, der gruppierte Aufbau wiederholt sich. Siehe auch hier:
https://de.wikipedia.org/wiki/Universal ... Identifier
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Tipp: Eindeutige IDs generieren
muss nochmal vorsichtshalber anfragen
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
Code: Alles auswählen
* hWndRoot := oDXEobj:GetHWnd()
hWndRoot := Bin2u(UuidCreate())
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
gruss by OHR
Jimmy
Jimmy