我有一个安装在小型办公环境中的桌面Windows应用程序。
应用程序使用.MDB
数据库文件作为其数据库,存储在网络驱动器上。
配置文件使用字母驱动器指定服务器上.MDB
文件的路径:例如。 f:\data\db.mdb
应用程序在启动时需要访问此数据库文件。应用程序启动时,如何确保网络驱动器已连接并可访问?
有时Windows不会重新连接网络驱动器,连接它们的唯一方法是在“我的电脑”中双击它们,即使在映射驱动器时勾选“登录时重新连接”也是如此。
解决方案是使用\\machine_name\share
代替驱动器号吗?
答案 0 :(得分:5)
您应该使用UNC路径,因为不是每个人都会将您的驱动器映射到同一个字母。
首先,我将使用以下技术之一确定F:\data\db.mdb
本地计算机上存在的文件的UNC路径:
基本上,您查看Windows资源管理器列出网络映射驱动器的方式,然后使用它来推断UNC路径。
假设驱动器实际映射到计划使用该应用程序的每台本地计算机上,请使用Win32_MappedLogicalDisk class确定映射网络驱动器的可用性。
我有一些示例代码here,可以调整以确定给定的网络驱动器是否可用(向下滚动到映射的驱动器信息部分)。您检查.ProviderName
以匹配UNC路径,以便知道哪个是正确的驱动器,然后检查.Availability
的值以确定是否可以访问映射的网络驱动器。
答案 1 :(得分:3)
你问,“解决方案是使用\ machine_name \ share而不是驱动器号吗?”
我想,是的,它可能是。 UNC路径避免了2个问题:
未知的是,您的应用程序中的任何内容是否为MDB创建了UNC路径,无论是并发症还是平坦的交易破坏者。
答案 2 :(得分:1)
您绝对应该放弃网络驱动器映射的可能性:
虽然您在域名中,但我不建议您使用名称,因为计算机由于多种原因,可能并不总是在网络上“轻松”找到它,特别是当其IP定期更改时。
您绝对应该找到一种为磁盘分配固定IP的方法:它是您可以考虑的最稳定,最永久的解决方案。请您的域管理员为您安排。
然后可以非常轻松地测试网络磁盘的存在。有多种解决方案,包括尝试直接打开mdb文件。您还可以测试文件的存在(通过我认为的文件对象),甚至可以使用您可以从代码中启动的任何外部程序或Windows API。请谷歌'VB测试IP'或类似的东西,以方便您找到解决方案。
编辑:Windows甚至提出用一些VB代码模拟ping的建议。检查hereEDIT2:我在我的一个应用程序中找到了这个VBA代码,它可以快速检查网络上某个文件是否存在(并且可以访问)。它基本上设置为测试是否有新版本的用户界面。
Function fileIsAvailable(x_nom As Variant) As Boolean
On Error GoTo ERREUR
Application.Screen.MousePointer = 11
Dim fso as object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(x_nom) Then
fileIsAvailable = False
Else
fileIsAvailable = True
End If
Set fso = Nothing
Application.Screen.MousePointer = 0
On Error GoTo 0
Exit Function
ERREUR:
Application.Screen.MousePointer = 0
debug.print Err.Number, Err.description
End Function
您可以通过提供文件的网络名称轻松调用此功能,例如:
if fileIsAvailable("\\192.168.1.110\myFileName.mdb") then ...
答案 3 :(得分:0)
您没有明确说明您的应用程序是什么写入的,但是在您第一次尝试连接数据库之前,可能是在启动画面或某种性质的情况下,请检查f:\ data \ db。 MDB 存在。
答案 4 :(得分:0)
确保在启动应用程序之前运行此脚本:
net use f: \\machine_name\share /user:[username] [password] /persistent:yes
这将在您指定的字母上映射共享驱动器!