Gustav Brock
Gustav at cactus.dk
Mon Jul 17 03:32:23 CDT 2006
Hi Marty That CreateGuid doesn't work for me - returns three chars only. We use this function which also looks much simpler to me: Public Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Declare Function CoCreateGuid Lib "ole32.dll" ( _ ByRef pguid As GUID) As Long Private Declare Function StringFromGUID2 Lib "ole32.dll" ( _ ByRef rguid As Any, _ ByVal lpstrClsId As Long, _ ByVal cbMax As Long) As Long Public Function GetGUIDString() As String ' Create a GUID and return its string representation. ' ' 2002-12-15. Cactus Data ApS, CPH. ' Length of GUID string per definition. Const clngGUID As Long = 38 ' Length of buffer with added space for zero terminator. Const clngBuffer As Long = clngGUID + 1 Dim udtGuid As GUID Dim strGUID As String * clngGUID Dim abytGUID() As Byte ' Dim byte array. abytGUID() = String(clngBuffer, vbNullChar) ' Create GUID. If CoCreateGuid(udtGuid) = 0 Then ' GUID was successfully created. If StringFromGUID2(udtGuid, VarPtr(abytGUID(0)), clngBuffer) = clngBuffer Then ' GUID was successfully copied into byte array abytGUID in Unicode. ' Convert byte array to Ansi GUID string stripping zero terminator. strGUID = abytGUID End If End If GetGUIDString = strGUID End Function Performance is about 100000 GUIDs/second/GHz /gustav >>> martyconnelly at shaw.ca 17-07-2006 02:41:25 >>> There were some service pack changes Office 2003 SP2 to acwizmain.mde. I doubt if it was this, http://support.microsoft.com/kb/821549 However if you just need a random query name why not just create a GUID string 'Paul Brower - 02152001 Private Const RPC_S_OK As Long = 0& Private Const RPC_S_UUID_LOCAL_ONLY As Long = 1824& Private Const RPC_S_UUID_NO_ADDRESS As Long = 1739& Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(7) As Byte End Type Private Declare Function UuidCreate& Lib "rpcrt4" (lpGUID As GUID) Private Declare Function UuidToString& Lib "rpcrt4" Alias "UuidToStringA" (lpGUID As GUID, lpGUIDString&) Private Declare Function RpcStringFree& Lib "rpcrt4" Alias "RpcStringFreeA" (lpGUIDString&) Private Declare Function lstrlen& Lib "kernel32" Alias "lstrlenA" (ByVal lpString&) Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes&) Public Function CreateGUID() As String 'More GUID routines here ' http://www.trigeminal.com/code/guids.bas Dim nGUID As GUID, lpStrGUID&, nStrLen&, sGUID$ Dim sBuffer() As Byte, bNoError As Boolean If UuidCreate(nGUID) <> RPC_S_UUID_NO_ADDRESS Then If UuidToString(nGUID, lpStrGUID) = RPC_S_OK Then nStrLen = lstrlen(lpStrGUID) ReDim sBuffer(nStrLen - 1) As Byte CopyMemory sBuffer(0), ByVal lpStrGUID, nStrLen Call RpcStringFree(lpStrGUID) sGUID = StrConv(sBuffer, vbUnicode) CreateGUID = UCase$(sGUID) Exit Function End If End If CreateGUID = "Error" End Function