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