Create GUID in Access 2003 Application

G

Guest

Hi All,

I need to insert a new record with a GUID Primary Key into a table.

Does anyone know how to create the new GUID in Access to pass it into the
INSERT script or is there a way to retrieve the GUID that is created by the
db (newid() function)?

Thanks heaps for any help, tipp,...
 
S

StCyrM

Hello

Simply copy and paste the following in a new module.

Best Regards

Maurice St-Cyr
Micro Systems Consultants, Inc.





Option Compare Database

' Samples:
' {3201047B-FA1C-11D0-B3F9-004445535400}
' {0547C3D5-FA24-11D0-B3F9-004445535400}

Option Explicit
DefLng A-Z

' The following is from Topic: Windows Conferencing API, GUID, MSDN April
1997
' typedef struct _GUID {
' unsigned long Data1;
' unsigned short Data2;
' unsigned short Data3;
' unsigned char Data4[8];
'} GUID;
'
'Holds a globally unique identifier (GUID), which identifies a particular _
object class and interface. This identifier is a 128-bit value.
'
'For more information about GUIDs, see the Remote Procedure Call (RPC) _
documentation or the OLE Programmer's Reference.
'

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As String * 1
End Type

Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As
Long

Const mciLen As Integer = 4 'each part's length

Public Function CreateGUID() As String
Dim sGUID As String 'store result here
Dim tGUID As GUID 'get into this structure
If CoCreateGuid(tGUID) = 0 Then 'use API to get the GUID
With tGUID 'build return string
sGUID = "{" & PadLeft(Hex(.Data1), mciLen * 2) & "-"
sGUID = sGUID & PadLeft(Hex(.Data2), mciLen) & "-"
sGUID = sGUID & PadLeft(Hex(.Data3), mciLen) & "-"
sGUID = sGUID & FormatGUIDData4(.Data4())
End With
sGUID = sGUID & "}" 'ending brace
CreateGUID = sGUID
End If
End Function

Private Function FormatGUIDData4(aryData4() As String * 1) As String
Dim i As Integer 'loop thru the array
Dim sGUID As String 'store result here
Dim sTemp1 As String 'first part here
Dim sTemp2 As String 'second part here
For i = LBound(aryData4()) To UBound(aryData4()) 'process string array
If i < 2 Then 'first part
sTemp1 = sTemp1 & Hex(Asc(aryData4(i)))
Else 'second part
sTemp2 = sTemp2 & Hex(Asc(aryData4(i)))
End If
Next
sGUID = PadLeft(sTemp1, mciLen) & "-" & PadLeft(sTemp2, mciLen * 3) 'pad
left with zeros
FormatGUIDData4 = sGUID 'return what we created
End Function

Private Function PadLeft(sString As String, iLen As Integer) As String
' Pad with left zreos if needed
Dim sTemp As String
sTemp = Right$(String$(iLen, "0") & sString, iLen)
PadLeft = sTemp
End Function
 
G

Guest

Thanks Maurice, this did the trick

StCyrM said:
Hello

Simply copy and paste the following in a new module.

Best Regards

Maurice St-Cyr
Micro Systems Consultants, Inc.





Option Compare Database

' Samples:
' {3201047B-FA1C-11D0-B3F9-004445535400}
' {0547C3D5-FA24-11D0-B3F9-004445535400}

Option Explicit
DefLng A-Z

' The following is from Topic: Windows Conferencing API, GUID, MSDN April
1997
' typedef struct _GUID {
' unsigned long Data1;
' unsigned short Data2;
' unsigned short Data3;
' unsigned char Data4[8];
'} GUID;
'
'Holds a globally unique identifier (GUID), which identifies a particular _
object class and interface. This identifier is a 128-bit value.
'
'For more information about GUIDs, see the Remote Procedure Call (RPC) _
documentation or the OLE Programmer's Reference.
'

Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As String * 1
End Type

Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As
Long

Const mciLen As Integer = 4 'each part's length

Public Function CreateGUID() As String
Dim sGUID As String 'store result here
Dim tGUID As GUID 'get into this structure
If CoCreateGuid(tGUID) = 0 Then 'use API to get the GUID
With tGUID 'build return string
sGUID = "{" & PadLeft(Hex(.Data1), mciLen * 2) & "-"
sGUID = sGUID & PadLeft(Hex(.Data2), mciLen) & "-"
sGUID = sGUID & PadLeft(Hex(.Data3), mciLen) & "-"
sGUID = sGUID & FormatGUIDData4(.Data4())
End With
sGUID = sGUID & "}" 'ending brace
CreateGUID = sGUID
End If
End Function

Private Function FormatGUIDData4(aryData4() As String * 1) As String
Dim i As Integer 'loop thru the array
Dim sGUID As String 'store result here
Dim sTemp1 As String 'first part here
Dim sTemp2 As String 'second part here
For i = LBound(aryData4()) To UBound(aryData4()) 'process string array
If i < 2 Then 'first part
sTemp1 = sTemp1 & Hex(Asc(aryData4(i)))
Else 'second part
sTemp2 = sTemp2 & Hex(Asc(aryData4(i)))
End If
Next
sGUID = PadLeft(sTemp1, mciLen) & "-" & PadLeft(sTemp2, mciLen * 3) 'pad
left with zeros
FormatGUIDData4 = sGUID 'return what we created
End Function

Private Function PadLeft(sString As String, iLen As Integer) As String
' Pad with left zreos if needed
Dim sTemp As String
sTemp = Right$(String$(iLen, "0") & sString, iLen)
PadLeft = sTemp
End Function



I need to insert a new record with a GUID Primary Key into a table.

Does anyone know how to create the new GUID in Access to pass it into the
INSERT script or is there a way to retrieve the GUID that is created by the
db (newid() function)?

Thanks heaps for any help, tipp,...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top