Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

GUID (AutoWert =Replikations-ID) als Abfragekriterium

168 views
Skip to first unread message

Ulrich Wrede

unread,
Aug 15, 2013, 6:00:24 AM8/15/13
to
Hallo

ich möchte GUID (Tabellen-Datentyp; AutoWert=Replaktions-ID) als
Primärschlüssel verwenden. Ich versprechen mir davon, das ein Datentransfer
zwischen verschiedenen Datenbanken leicht möglich ist.

Nun habe ich das erste mal einen GUID Wert in einer Abfrage mittels
Formularfeld abzufragen:
1) [Formulare]![Formular1]![GUID_Feld]
(Einige werden jetzt schon wissen, was nun kommt, für Unbedarfte, wie meiner
einer, meine weitere Vorgehensweise))
=>Keine Datensätze
Ich war ziemlich erstaunt.

2) Ich habe dann den Wert des Feldes aus der Abfrage ohne Kritierium und in
der Entwurfsansicht als Kriterium eingefügt
{guid {8C9E0932-511C-4745-9A79-E11CAE07F281}}
Es wurden Datensätze geliefert.
Was mir erst später aufgefallen ist, dass im Kriterium {guid xxxx}
hinzugefügt wurde.

3) Nachforschungen mit einer beliebten Suchmaschine haben die Funktion
StringFromGuid zu Tage gefördert.
StringFromGuid([Formulare]![Formular1]![GUID_Feld]) liefert aber auch keine
Datensätze

4) im Direktfenster
?StringFromGuid([Forms]![Formular1]![GUID_Feld])
{guid {8C9E0932-511C-4745-9A79-E11CAE07F281}}
optisch entspricht des der Position 2) liefert aber keine Daten siehe 3)

5) Nachforschungen mit einer beliebten Suchmaschine haben neben
umfangreichen Diskussionen (meist Englisch) über die Sinnhaftigkeit von GUID
zu Tage gefördert.
Aber unter anderem auch dies:
http://www.utteraccess.com/forum/lofiversion/index.php/t651220.html
Wieder auf Englisch und für mich deshalb nicht so leicht zu verstehen. Was
ich aber wirklich nicht glauben kann, das man so etwas basteln muss, wie
randybass es getan hat
und sich tierisch freut Bill Gates eines ausgewischt zu haben, nur um diesen
GUID-Wert abzufragen.

Sehen ich den Wald vor lauter Bäumen nicht? Gibt es eine einfache Lösung?


Alternativen wären:
- beim Im- und Exporten die Autowertproblematik lösen
- eingene Schlüssel aus Werten des Objetes zusammenbasteln (z.B.
Nachnahme&Vorname&Geburtsdatum)
- mit Funktionen GUID als Textstring erzeugen

Schöne Grüße
Ulrich











Ulrich Wrede

unread,
Aug 15, 2013, 1:19:07 PM8/15/13
to
Hallo,

ich habe weiter ge�bt.

Public Function testGuid1()
'testGuid1 = (Forms![Formular1]![GUID_Feld]) '= ????????
'testGuid1 = StringFromGUID(Forms![Formular1]![GUID_Feld]) '={guid
{8C9E0932-511C-4745-9A79-E11CAE07F281}}

'Liefert Datensatz in der Abfrage
testGuid1 = Mid(StringFromGUID(Forms![Formular1]![GUID_Feld]), 7, 38)
'={8C9E0932-511C-4745-9A79-E11CAE07F281}
End Function

Also folgende Funktion w�rde die entsprechenden Datens�tze liefern. Man
beachte der Verweis auf das Formular ist direkt in der Funktion

Public Function testGuid1()
testGuid1 = Mid(StringFromGUID(Forms![Formular1]![GUID_Feld]), 7, 38)
End Function

Folgende Funktion geht nicht. Hier wird das Kontroll als Parameter
�bergeben. Ergebnis= Ausdruck zu komplex

Public Function testGuid2(formSteuerelement As Control) As String
testGuid2 = Mid(StringFromGUID(formSteuerelement), 7, 38) 'Ausdruck zu
komplex
End Function

Folgende Funktionen werden zwar ausgewert, liefern aber keine Datens�tze

Public Function testGuid3(strGuid As String) As String
testGuid3 = Mid(StringFromGUID(strGuid), 7, 38) 'liefert keinen Datensatz
End Function

Public Function testGuid4(varGuid As Variant) As String
testGuid4 = Mid(StringFromGUID(varGuid), 7, 38) 'liefert keinen Datensatz
End Function

Gru�
Ulrich


Ulrich Wrede

unread,
Aug 24, 2013, 11:14:13 AM8/24/13
to
Hallo,

ich werden die GUID jetzt mit einer Funktion erzeugen und sie dann als Text
speichern.
Die eingebauten Autowert GUID erscheinen mit zu kompliziert in der
Verarbeitung.

Ulrich Wrede


Ulrich Möller

unread,
Sep 12, 2013, 6:06:57 PM9/12/13
to
Hi Ulrich,

ein Problem ist zumindest, das ein Control zwar an das GUID-Feld
gebunden werden kann, dessen Value Eigenschaft aber für Abfragen nicht
weiter verwendet werden kann. Access speichert im Control ein
Variant/Byte() Array mit der Länge 16, in dem die GUID aufgenommen wird.
Damit können die Standardroutinen aber nichts anfangen.

Jet wiederum kann offenbar mit Strings der Form '{ guid { ....
}}'umgehen und konvertiert diese automatisch in das GUID-Format
(DAO-Fieldtypwert = 15).

Du müßtest also den von Control.Value gelieferten Wert nehmen, mit
StringFromGUID konvertieren und dann einer Parameterabfrage mit einem
Parameter-Typ Text übergeben.

Ergänzende Routinen siehe auch http://www.trigeminal.com/code/guids.bas

Habe ich so aber noch nicht ausprobieren können, aber vielleicht ist das
eine Anregung.

Grüße

Ulrich

Ulrich Möller

unread,
Sep 12, 2013, 7:35:28 PM9/12/13
to
Habe einmal ein bisschen gespielt und es geht auch einfacher.

Beispiel-Abfrage:
SELECT tblTestGUID.ID
FROM tblTestGUID
WHERE stringfromguid(tblTestGUID.ID]) = [Formulare]![frmMain]![cboGUIDs]

wobei ID das entsprechende Feld mit dem GUID-Wert in der Tabelle und
cboGUID eine Kombobox mit der Datenherkunft "SELECT tblTestGUID.ID FROM
tblTestGUID" ist. (Nur zum Testen.)

Warum einfach, wenn es auch kompliziert geht?

Grüße

Ulrich


Ulrich Wrede

unread,
Sep 13, 2013, 12:50:23 AM9/13/13
to
Hallo Ulrich,

danke f�r die Hinweise und �berlegungen.
Wie ich oben schon erw�hnt habe, benutze ich GUID-Werte, die als Text
gespeichert werden, somit hoffe ich einen eindeutigen Werte zu haben, wenn
ich Datens�tze zwischen Datenbanken transferiere.

Sch�ne Gr��e
Ulrich


0 new messages