MartyConnelly
martyconnelly at shaw.ca
Mon Jul 17 15:07:32 CDT 2006
I am running WinXP home. Unless it is having problems with the old VB 5 version of dimension statements I usually beat my machine with a rolled up newspaper until this stops happening. Gustav Brock wrote: >Hi Marty > >Strange. I copied/pasted your code into a module in A97 on WinXP Pro SP2. >But no GUID, only three chars returned. > >/gustav > > > >>>>martyconnelly at shaw.ca 17-07-2006 18:40:34 >>> >>>> >>>> >Both methods work for me on Access97 and 2003 WinXP SP2. >My method was kind of old dating back to 1999 or 2000 >Maybe a difference in one of the dll's > >However CoCreateGuid seems to be the more prevalent >method used today. > > > >Gustav Brock wrote: > > > >>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 >> >> > > > > -- Marty Connelly Victoria, B.C. Canada