[AccessD] Math in VBA

MartyConnelly martyconnelly at shaw.ca
Fri Jul 20 15:36:33 CDT 2007


If you just need a random 16 byte string how about creating a GUID

Private Type GUID
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(7) As Byte
End Type

Private Declare Function CoCreateGuid Lib "OLE32.DLL" _
     (pGuid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "OLE32.DLL" (rguid As GUID, _
ByVal lpsz As String, cbMax As Long) As Long

'More GUID routines here
' http://www.trigeminal.com/code/guids.bas

Sub testguid()

  Dim pudtGUID As GUID
  Dim pstrGUID As String
  Dim plngRet As Long
 
  pstrGUID = String(256, 0)

  Debug.Print CoCreateGuid(pudtGUID)
 
  plngRet = StringFromGUID2(pudtGUID, pstrGUID, Len(pstrGUID))
  Debug.Print plngRet
  Debug.Print "GUID = " & Left(pstrGUID, plngRet)
  Debug.Print pstrGUID

End Sub

Mark A Matte wrote:

>Thanks Everyone,
>
>I ended up using a loop to get my powers...before I was the power by 1 for 
>each record...now I added a new loop to get the actual number if you 
>calculated out to the nth power.  I was in the quadrillions when I finished. 
>  Thanks Again,
>
>Mark
>
>    Power = Power - 1
>    PowerNum = CDec(36)
>    For PNLoop = 1 To Power - 1
>    PowerNum = CDec(PowerNum * CDec(36))
>    Next
>
>
>  
>
>>From: "Gustav Brock" <Gustav at cactus.dk>
>>Reply-To: Access Developers discussion and problem 
>>solving<accessd at databaseadvisors.com>
>>To: <accessd at databaseadvisors.com>
>>Subject: Re: [AccessD] Math in VBA
>>Date: Thu, 19 Jul 2007 21:25:42 +0200
>>
>>Hi Mark
>>
>>Chris is right. You have to keep the _numeric_ expressions within that of a 
>>Long if you wish to maintain accuracy.
>>
>>Thus:
>>? CDec(36 ^10)
>> 3656158440062980
>>? CDec(36 ^ 5) * CDec(36 ^ 5)
>> 3656158440062976
>>
>>because CDec(36 ^ 5) = 60466176.
>>
>>/gustav
>>
>>    
>>
>>>>>cjeris at fas.harvard.edu 19-07-2007 20:37 >>>
>>>>>          
>>>>>
>>-----BEGIN PGP SIGNED MESSAGE-----
>>Hash: SHA1
>>
>>Mark A Matte wrote:
>>    
>>
>>>ttt = CDec(36 * 36 * 36)
>>>      
>>>
>>6^6 = 46656 overflows a 16-bit signed integer.  Now we can all line up
>>and kick someone in the head for leaving a 16-bit signed integer type in
>>a program written after 1995.
>>
>>Try
>>ttt = CDec(36) * CDec(36) * CDec(36)
>>
>>Also, be careful!
>>    
>>
>>>tt = CDec(36 ^ 10)
>>>      
>>>
>>That ^ is the _floating_point_ exponentiation operator!  The result is
>>not the integer 6^20; if you look at tt, you will see that it ends in a
>>0, which no power of 6 does.  What you get there is the decimal
>>conversion of the floating-point exponentiation.
>>
>>peace, Chris Jeris
>>    
>>

-- 
Marty Connelly
Victoria, B.C.
Canada




More information about the AccessD mailing list