UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
Moderator: Moderatoren
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
Hi Folks,
hat jemand Erfahrung mit dem Einsatz von UUIds unter Clipper im Verbund mit XBase? Seek-Tests unter Clipper mit mehreren Millionen Datensätzen deren Key mit UUIdCreate() erstelllt wurde, sind problemlos gelaufen. Ist deren Einsatz somit problemlos möglich?
hat jemand Erfahrung mit dem Einsatz von UUIds unter Clipper im Verbund mit XBase? Seek-Tests unter Clipper mit mehreren Millionen Datensätzen deren Key mit UUIdCreate() erstelllt wurde, sind problemlos gelaufen. Ist deren Einsatz somit problemlos möglich?
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Eine UUID ist nichts weiter als irgendein String. Welche Probleme sollte das ergeben? Da die UUID immer gleich lang ist, haben EXACT und SOFTSEEK und andere auch keinen negativen Einfluss.
Code: Alles auswählen
? UuidToChar(UuidCreate()) // z.B. 5b741013-cb04-4137-927c-a29d2ee7b29c
Herzlich,
Tom
Tom
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Hallo Tom,
kann bei bei seiner Berechnung kein Char(0) oder sonst ein kritisches Zeichen gebildet werden?
kann bei bei seiner Berechnung kein Char(0) oder sonst ein kritisches Zeichen gebildet werden?
Gruß Klaus
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Klaus,
nein - das kommt im Hexadezimalen als Zeichen nicht vor. Nur die 16 Zeichen 0-9 und a-f
Viele Grüße,
Martin
nein - das kommt im Hexadezimalen als Zeichen nicht vor. Nur die 16 Zeichen 0-9 und a-f
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
... und der "-" als Trenner zur Gliederung der Blöcke.
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.
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
das ist so wenn ich die UUID mit UuidToChar() umwandle. Als Key verwende ich aber den 16stelligen Wert von UuidCreate() direkt, und der sieht zimmlich wild aus.
Gruß Klaus
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Jan,
das ist sicherlich nur Repräsentation (wie bei picture).
Klaus,
ich gehe mal davon aus, dass das bei Deiner Anzeige dann immer als ASCII-Code interpretiert wird:
5b741013-cb04-4137-927c-a29d2ee7b29c
chr( 91 ) + chr( 116 ) + chr( 16 ) + chr( 19 ) + ...
Da kann dann schon mal was komisches angezeigt werden. Darum solltest Du die auch immer als Hexcode ablegen. Das ist in jeder Welt identisch (ASCII, ANSI, EBCDIC,...)
Viele Grüße,
Martin
das ist sicherlich nur Repräsentation (wie bei picture).
Klaus,
ich gehe mal davon aus, dass das bei Deiner Anzeige dann immer als ASCII-Code interpretiert wird:
5b741013-cb04-4137-927c-a29d2ee7b29c
chr( 91 ) + chr( 116 ) + chr( 16 ) + chr( 19 ) + ...
Da kann dann schon mal was komisches angezeigt werden. Darum solltest Du die auch immer als Hexcode ablegen. Das ist in jeder Welt identisch (ASCII, ANSI, EBCDIC,...)
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Danke schon mal.
@Martin: Alaska schreibt in der Hilfe, dass die UUId direkt als Key verwandt werden kann. Da stehts nicht von Konvertierung. Wenn ich mir die Tabelle mit dem DBF Viewer 2000 ansehen, sehe ich folgendes Bild
Nicht vertrauenserweckend.
@Martin: Alaska schreibt in der Hilfe, dass die UUId direkt als Key verwandt werden kann. Da stehts nicht von Konvertierung. Wenn ich mir die Tabelle mit dem DBF Viewer 2000 ansehen, sehe ich folgendes Bild
Nicht vertrauenserweckend.
- Dateianhänge
-
- image214.jpg (172.62 KiB) 8362 mal betrachtet
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Weil UUIDCreate() verdammte Binärdaten liefert. Schau doch einfach mal in die Hilfe, Klaus. Da bekommst Du diverse Probleme. Deshalb gibt es ja UUIDToChar().
Herzlich,
Tom
Tom
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Was findest Du in Hilfe, was ich nicht finde?
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
The function UUIDCreate() returns a binary character string.
Einfach UUIDToChar() drauf und fertig. Dafür ist die Funktion da. Binärdaten in DBFs sind keine gute Idee.
Einfach UUIDToChar() drauf und fertig. Dafür ist die Funktion da. Binärdaten in DBFs sind keine gute Idee.
Herzlich,
Tom
Tom
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Danke Tom. Es steht aber auch
With the function UuidCreate() an Universally Unique IDentifier can be created. This identifier can be used as primary key in a database
With the function UuidCreate() an Universally Unique IDentifier can be created. This identifier can be used as primary key in a database
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Aber nicht in "any database". Dafür gibt's UUIDToChar, damit das z.B. auch in DBFs funktioniert. Und damit man die UUIDs auch irgendwie lesen kann und so. Davon abgesehen stimmt die Aussage ja auch, nur eben nicht direkt und nicht in allen Fällen. Die DBFDBE nimmt Konvertierungen vor, und DBFs sind für Binärdaten einfach nicht geeignet. Blobs in Fox können das, und entsprechende SQL-Datentypen sowieso. Aber DBF nicht.
Herzlich,
Tom
Tom
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
hallo Klaus,
bitte aber nur direkt als Primary Key verwenden, wenn das zugrundeliegende Datenbanksystem dies als nativen Datentyp anbietet (wie zB ADS). Ansonsten _immer_ nach Char wandeln. Wie willst Du denn einen Seek auf Binärdaten sauber durchführen?
bitte aber nur direkt als Primary Key verwenden, wenn das zugrundeliegende Datenbanksystem dies als nativen Datentyp anbietet (wie zB ADS). Ansonsten _immer_ nach Char wandeln. Wie willst Du denn einen Seek auf Binärdaten sauber durchführen?
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
ich bin ganz bei euch; darum ja auch die Anfrage hier im Forum. Was mich überraschte war, das der oben erwähnte Test mit mehreren Millionen Datensätzen keine Probleme erbrachte. Da es mich interessiert, werden ich die Frage einmal an den Support richten. Vielleicht haben die eine Antwort.
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Ich denke, solange man den Kontext nicht verlässt, könnte das sogar mit den Binärdaten funktionieren. Also wenn es nur innerhalb einer Anwendung geschieht (die gute alte "Crypt()"-Funktion hat ja ähnliche Ergebnisse geliefert). Aber ich würde zwecks Les- und Nachvollziehbarkeit immer die ToChar-Variante verwenden (Was heißt "würde" - das mache ich ja so). Und es könnte sein, dass das beim Umkopieren von Tabellen problematisch wird.
Herzlich,
Tom
Tom
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Ah, ja, guter Einwand. Meine Hoffnung ist, mit der binären Version Zeit beim Suchen im Index zu sparen. Aber vielleicht spielt es dabei keine nennenswerte Rolle welcher Typ (binär oder character) eingetragen ist. Mal sehen, was der Support dazu schreibt.
Gruß Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper
Da es keine binären Felder gibt, findet doch ohnehin eine stringbasierte Suche statt, Klaus. Wo Du aufs Jahr ein paar Nanosekunden einsparen kannst, das ist beim Weglassen von UUIDToChar() beim einmaligen Erzeugen und Speichern der UUID. Ansonsten erzeugst Du dadurch, dass Du Binärstrings speicherst und weit aus dem ASCII-7-Zeichensatz raus bist, eigentlich jetzt noch Konvertierungsoverhead.
Herzlich,
Tom
Tom
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper
Ja, Tom, das befürchte ich auch. Zwischenzeitlich liegt die Antwort des Supports vor. Die Kernaussage:
Bezüglich der Verwendung von UUIDs als Schlüsselwerte in DBF-Tabellen gibt es technisch gesehen keine Einwände
bestätigt meinen Test.
Der Support fügt als weiteres Kritierium, besser die Zeichenkette zu speichern, dessen Lesbarkeit für uns Menschen an. Ich werde also eueren Rat befolgen...
Danke nochmals an alle!
Bezüglich der Verwendung von UUIDs als Schlüsselwerte in DBF-Tabellen gibt es technisch gesehen keine Einwände
bestätigt meinen Test.
Der Support fügt als weiteres Kritierium, besser die Zeichenkette zu speichern, dessen Lesbarkeit für uns Menschen an. Ich werde also eueren Rat befolgen...
Danke nochmals an alle!
Gruß Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
hm,
wie immer. Ich habe mal wieder die A-Karte gezogen. Ich bin gerade dabei eine Tabelle mit vielen Sätze auf einmal zu befüllen und dabei nutze ich die Funktion UuidToChar(Uuidcreate()).
Und was soll ich euch sagen, nach 15 Durchläufen ca. wird eine ID erzeugt, die kurz vorher schonmal erzeugt wurde. Ich denke das kann nicht sein?
wie immer. Ich habe mal wieder die A-Karte gezogen. Ich bin gerade dabei eine Tabelle mit vielen Sätze auf einmal zu befüllen und dabei nutze ich die Funktion UuidToChar(Uuidcreate()).
Und was soll ich euch sagen, nach 15 Durchläufen ca. wird eine ID erzeugt, die kurz vorher schonmal erzeugt wurde. Ich denke das kann nicht sein?
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!!
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
Bei 100.000ten erzeugter Key, war bisher kein doppelter Schlüssel dabei...
Gruß Klaus
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
ok, ich weiß ja nicht genau, wie der erzeugt wird. Wie machst Du das denn? So nach und nach, oder in einer Schleife?
Ich kann ja auch nur sagen, was mir aufgefallen ist.
Ich kann ja auch nur sagen, was mir aufgefallen ist.
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: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
Es ist technisch unmöglich, dass auf einem Rechner derselbe Key mehrfach erzeugt wird. Und die Wahrscheinlichkeit dafür, dass es auf zwei unterschiedlichen System passiert, ist astronomisch klein. Der Fehler muss woanders liegen.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21224
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
das durchläuft eine Schleife
Code: Alles auswählen
TEXT INTO cSqlStmt WRAP CHR(13) TRIMMED
INSERT INTO {#tabelle#} (id, {#cFelder#}) VALUES ('{#cid#}' , {#cValues#})
ENDTEXT
cSqlStmt := StrTran(cSqlStmt,"{#tabelle#}",cTabellenName)
cSqlStmt := StrTran(cSqlStmt,"{#cFelder#}",cFelder)
cSqlStmt := StrTran(cSqlStmt,"{#cValues#}",cValue)
cSqlStmt := StrTran(cSqlStmt,"{#cid#}",erzeugeuuid())
********************************
FUNCTION erzeugeUuid()
LOCAL xuuid := Uuidcreate() // erstmal eine kryptische id erzeugen
LOCAL cUuid := UuidToChar(xuuid) // jetzt wird es eine lesbare ID
RETURN cUuid
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!!
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: UUId als Key in Dbase-Tabellen unter Clipper [Erledigt]
Der Fehler muss im SQL-Statement liegen. Da muss ich passen.
Gruß Klaus