Access自动删除引用并自动重新添加引用的函数-判断了32位及64位Windows和Office的多种情况
- 2017-07-23 19:46:00
- zstmtony 原创
- 6002
Access自动删除指定的引用,然后再自动重新添加这个引用的通用代码-判断了32位及64位Windows和32位Office及64位Office的多种情况
在编写Access通用平台或通用开发库时,或使用第三方控件或链接库时,由于这个开发库可能经常会更新,由于更新后,开发库的对象和属性和方法都有所改变
必须要手工对这个对象重新引用,如果一次两次还可以手工操作,如果经常更新,就需要写一个通用删除和添加引用的函数了
自动重新添加Ocx dll 等控件或链接库的引用(DevlibOcx引用)
Option Compare Database
Option Explicit
Private Const POINTERSIZE As Long = 4
Private Const ZEROPOINTER As Long = 0
Const MAX_LEN = 200 '字符串最大长度
Private Declare Sub apiCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function GetSystemWow64Directory Lib "kernel32" Alias "GetSystemWow64DirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'Access或Excel VBA或VB6判断windows系统是32位还是64位
'来判断系统是32bit还是64bit,主要通过API来实现,先在窗体模块里申明以下API定义:
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, bWow64Process As Boolean) As Long
'然后在窗体或模块中再建立一个判断系统是32位还是64位的函数,返回值是布尔值,如果系统是32位,此函数返回值是Flase 如果是64位,返回值是True,函数代码如下:
Public Function Is64bit() As Boolean
Dim handle As Long, bolFunc As Boolean
bolFunc = False
handle = GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process")
If handle > 0 Then
IsWow64Process GetCurrentProcess(), bolFunc
End If
Is64bit = bolFunc
End Function
'获取64位 windows及32位windows系统 的系统目录 ,正常都是System32
Public Function GetSystemDir() As String
Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
Dim nLength As Long '字符串的实际长度
Dim length As Long
Dim strPath As String
'获得System目录
length = GetSystemDirectory(sTmp, MAX_LEN)
strPath = Left(sTmp, length)
GetSystemDir = strPath
End Function
'获取64位windows系统下32位的系统目录 ,正常是SysWow64
Public Function GetSystemWow64Dir() As String
Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
Dim nLength As Long '字符串的实际长度
Dim length As Long
Dim strPath As String
'获得System目录
length = GetSystemWow64Directory(sTmp, MAX_LEN)
strPath = Left(sTmp, length)
GetSystemWow64Dir = strPath
End Function
'自动重新添加Ocx dll 等控件或链接库的引用(DevlibOcx引用)
Public Function ReAddDevLibReference()
Dim ref As Reference
Dim strMDE As String
On Error Resume Next
strMDE = CurrentDb.Properties("MDE")
On Error GoTo 0
If strMDE = "" Then
#If Win64 Then
If Dir(GetSystemDir & "\DevLibOcx.dll") = "" Then
MsgBox GetSystemDir & "\DevLibOcx.dll 文件不存在,请检查文件是否丢失!"
End If
#Else
If Is64bit Then
If Dir(GetSystemWow64Dir & "\DevLibOcx.dll") = "" Then
MsgBox GetSystemWow64Dir & "\DevLibOcx.dll 文件不存在,请检查文件是否丢失!"
End If
Else
If Dir(GetSystemDir & "\DevLibOcx.dll") = "" Then
MsgBox GetSystemDir & "\DevLibOcx.dll 文件不存在,请检查文件是否丢失!"
End If
End If
#End If
For Each ref In Application.References
If ref.FullPath Like "*DevLibOcx.dll" Then
Application.References.Remove ref
Exit For
End If
Next
#If Win64 Then ’ 64bit Office or 32bit Office Application.References.AddFromFile GetSystemDir & "\DevLibOcx.dll"
#Else
If Is64bit Then
Application.References.AddFromFile GetSystemWow64Dir & "\DevLibOcx.dll"
Else
Application.References.AddFromFile GetSystemDir & "\DevLibOcx.dll"
End If
#End If
End If
End Function
Access数据库自身
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
文章分类
联系我们
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |