Link to home
Create AccountLog in
Avatar of katerina-p
katerina-p

asked on

MS Access 2016 .Net Framework Reference

Problems with MS Access Reference(s) after changing from a server with 2008 R2 to 2012 R2 (and a new install of Access 2016)
The following code is what has initially highlighted the issue.

Public Function fSHA256Base64(s As String, k As String) As String
      Dim lngLoop                   As Long
      Dim oUTF, oEnc
      Dim hmac()                    As Byte
      Dim strText                   As String
      Dim strTemp                   As String

12890 strText = s
12900 Set oUTF = CreateObject("System.Text.UTF8Encoding")
12910 Set oEnc = CreateObject("System.Security.Cryptography.HMACSHA256")

12920 oEnc.Key = oUTF.GetBytes_4(k)
12930 hmac = oEnc.ComputeHash_2(oUTF.GetBytes_4(s))
12940 strTemp = Base64Encode(hmac())
12950 fSHA256Base64 = strTemp
End Function

Open in new window


Line 12900 throws run time error -2146232576 (80131700) ‘Automation Error’.

SVR with 2008R2 had referenced System.tlb from the v2.0.50727 .Net Framework folder.
SVR with 2012R2 has referenced from the v4.0.30319 folder.


However, when I change new server from v4 to the v2 file, even though it appears to have changed it (judging by the 'Location' reference), the next time I open the Reference panel it has changed back to v4! This happens even on a new file where the .net wasn’t even referenced to begin with. Ie I add system.tlb from the v2 folder. When I next open references the ref location is the v4 folder!


1)      Have I correctly identified the .net version as the cause of the actual error?
2)      How can I force the reference to the older version / stop it changing itself?

Many thanks
Avatar of Jim Dettman (EE MVE)
Jim Dettman (EE MVE)
Flag of United States of America image

Not sure I understand how you got away with it in the first place, but you can't call .Net managed code directly from VBA without going through a CCW (COM Callable Wrapper), which serves as a go between from VBA to .Net.  This wrapper gets developed in .Net.

Since these are basic function, I'm sure there is direct VBA code floating around (I'm sure there is for UTF8Encoding) and what I'd do is drop the .Net calls entirely and use the VBA Equivalents.

Jim.
Avatar of katerina-p
katerina-p

ASKER

Jim, Thanks for your comment. I can't help on that - this is extremely old code which I've dragged through multiple versions of Access and Windows!

However the behavior on the references is still something I'd like to understand. There are multiple other references I have to set each time I open Access 2106 (eg, from XML 6 down to 5).
ASKER CERTIFIED SOLUTION
Avatar of Jim Dettman (EE MVE)
Jim Dettman (EE MVE)
Flag of United States of America image

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer