6

我有一个安装在小型办公环境中的桌面 Windows 应用程序。

该应用程序使用.MDB数据库文件作为其存储在网络驱动器上的数据库。

.MDB配置文件使用盘符指定服务器上文件的路径:例如。f:\data\db.mdb

应用程序在启动时需要访问此数据库文件。应用程序启动时,如何确保网络驱动器已连接并可访问?

有时 Windows 不会重新连接网络驱动器,连接它们的唯一方法是在“我的电脑”中双击它们,即使在映射驱动器时勾选了“登录时重新连接”。

解决方案是使用\\machine_name\share驱动器号而不是驱动器号吗?

4

5 回答 5

5

您问:“解决方案是使用 \machine_name\share 而不是驱动器号吗?”

我想,是的,它可能是。UNC 路径避免了 2 个问题:

  1. 共享未连接到驱动器号
  2. 共享已连接,但映射到与您预期不同的驱动器号

未知的是您的应用程序中的任何内容是否会使 MDB 的 UNC 路径变得复杂或彻底破坏交易。

于 2012-01-19T17:12:29.003 回答
5

您应该使用 UNC 路径,因为不是每个人都会将您的驱动器映射到同一个字母。

确定 UNC 路径

F:\data\db.mdb首先,我将使用此处找到的一种技术确定您的文件存在于本地计算机上的 UNC 路径:

基本上,您查看 Windows 资源管理器列出网络映射驱动器的方式,然后使用它来推断 UNC 路径。

使用 WMI 检查可用性

假设驱动器实际上映射到计划使用该应用程序的每台本地计算机上,请使用Win32_MappedLogicalDisk 类来确定映射的网络驱动器的可用性。

我在这里有一些示例代码,可用于确定给定的网络驱动器是否可用(向下滚动到映射驱动器信息部分)。您检查.ProviderName以匹配 UNC 路径,因此您知道哪个是正确的驱动器,然后检查 的值.Availability以确定是否可以访问映射的网络驱动器。

于 2012-01-24T19:52:12.257 回答
1

您绝对应该放弃网络驱动器映射的可能性:

  • 使用这种技术会迫使您使用您的数据库“物理地”操作每台计算机,您必须在其中为网络驱动器分配一个字母。
  • 每个计算机用户都可以轻松更改它
  • 与网络的任何断开都可能会迫使用户“手动”重新连接到磁盘驱动器

尽管您在域中,但我不建议您使用名称,因为由于多种原因,计算机可能并不总是“容易”在网络上找到它,特别是当它的 IP 定期更改时。

您绝对应该找到一种为您的磁盘分配固定 IP 的方法:这是您能想到的最稳定和永久的解决方案。请您的域管理员为您安排。

然后可以很容易地测试您的网络磁盘是否存在。有多种解决方案,包括尝试直接打开 mdb 文件。您还可以测试文件的存在(通过我认为的文件对象),甚至可以使用您可以从代码启动的任何外部程序或 Windows API。请在您方便的时候搜索“VB 测试 IP”或类似内容以找到解决方案。

编辑:windows 甚至建议用一些 VB 代码模拟 ping。在这里检查

EDIT2:我在我的一个应用程序中发现了这个 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 ...
于 2012-01-20T06:52:41.760 回答
0

您没有明确说明您的应用程序是用什么编写的,但是在您第一次尝试连接到数据库之前,大概是在启动屏幕或类似性质的东西中,请检查 f:\data\db.mdb 是否存在。

于 2012-01-16T21:32:10.390 回答
0

确保在应用程序启动之前运行此脚本:

net use f: \\machine_name\share /user:[username] [password] /persistent:yes

这会将共享驱动器映射到您指定的字母上!

于 2012-01-24T00:27:57.343 回答