查找访问版本 [英] Find Version of Access
问题描述
下面有确定Access版本的代码. 它可以在大多数PC上快速运行.我们也有四个终端服务器.在两个终端服务器上,它运行良好.在另外两个代码上,此代码需要15秒钟才能运行.
I have code below which determines the version of Access. It runs quickly on most PCs. We also have four terminal servers. On two of the terminal servers it runs fine. On the other two, this code takes over 15 seconds to run.
所有四个终端服务器都具有Access 2003运行时.我不知道为什么在两台服务器上运行需要更长的时间.会是权限吗?还是Access运行时的安装方式存在一些错误?
All four terminal servers have Access 2003 runtime. I can't figure out why it would take longer to run on two servers. Would it be permissions? Or some mistake in the way the Access runtime was installed?
如果有一种更好,更快的确定版本的方法,我也会对此感兴趣. 谢谢 阿威索莫(Awesomo)
If there is a better, quicker way of determining the Version, I'd be interested in that too. Thanks Awesomo
' Determine the Access version by creating an
' Access.Application object and looking at
' its Version property.
Private Function GetAccessVersionName() As String
Dim obj As Object = CreateObject("Access.Application")
Dim result As String = "Access.Application." & _
obj.Version
obj.Quit()
Return result
End Function
' Get the Access version number from the name.
Private Function GetAccessVersionNumber() As Integer
Dim txt As String = GetAccessVersionName()
Dim pos2 As Integer = txt.LastIndexOf(".")
Dim pos1 As Integer = txt.LastIndexOf(".", pos2 - 1)
txt = txt.Substring(pos1 + 1, pos2 - pos1 - 1)
Return CInt(txt)
End Function
' Get the nice style of the Access version name.
Public Function GetAccessVersionNiceName() As String
Try
Select Case GetAccessVersionNumber()
Case 8
Return "Access 97"
Case 9
Return "Access 2000"
Case 10
Return "Access XP"
Case 11
Return "Access 2003"
Case 12
Return "Access 2007"
Case Else
Return "unknown"
End Select
Catch ex As Exception
Return "unknown"
End Try
End Function
推荐答案
我认为问题在于对 CreateObject()的调用.这将使Access运行起来,我估计在某些计算机上可能需要15秒钟.这是获取版本号的另一种方法,该版本号应该快得多–它使用了注册表中的信息.
I think the problem is the call to CreateObject(). This will run up Access which I guess can take 15 seconds on some machines. Here’s a alternative way to get the version number which should be a lot faster – it uses the information in the registery.
Imports Microsoft.Win32
Public Class AccessInterop
Public Shared Function GetAccessVersionNiceName() As String
Try
Dim ClassName As String = GetAccessClassName()
Select Case GetAccessVersionNumber(ClassName)
Case 8
Return "Access 97"
Case 9
Return "Access 2000"
Case 10
Return "Access XP"
Case 11
Return "Access 2003"
Case 12
Return "Access 2007"
Case 13
Return "Access 2010"
Case Else
Return "unknown"
End Select
Catch ex As Exception
Return "unknown"
End Try
End Function
Private Shared Function GetAccessClassName() As String
Dim RegKey As RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("Access.Application\CurVer")
If RegKey Is Nothing Then
Throw New ApplicationException("Can not find MS Access version number in registry")
Else
Return RegKey.GetValue("")
End If
End Function
Public Shared Function GetAccessVersionNumber(ByVal ClassName As String) As Integer
Dim VersionNumber As String = ClassName
While VersionNumber.IndexOf(".") > -1
VersionNumber = VersionNumber.Substring(VersionNumber.IndexOf(".") + 1)
End While
Return VersionNumber.Trim
End Function
End Class
这篇关于查找访问版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!