Avatar of 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
Microsoft Access.NET ProgrammingWindows Server 2012VBA

Avatar of undefined
Last Comment
Jim Dettman (EE MVE)
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.

Avatar of katerina-p


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).
Avatar of Jim Dettman (EE MVE)
Jim Dettman (EE MVE)
Flag of United States of America image

Blurred text
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Microsoft Access
Microsoft Access

Microsoft Access is a rapid application development (RAD) relational database tool. Access can be used for both desktop and web-based applications, and uses VBA (Visual Basic for Applications) as its coding language.

Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews


IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo