6

小規模オフィス環境にインストールされているデスクトップ Windows アプリケーションがあります。

アプリケーションは.MDB、ネットワーク ドライブに保存されているデータベースとしてデータベース ファイルを使用します。

.MDB構成ファイルは、文字ドライブを使用してサーバー上のファイルのパスを指定します。f:\data\db.mdb

アプリケーションは、起動時にこのデータベース ファイルにアクセスする必要があります。アプリケーションの起動時にネットワーク ドライブが接続され、アクセス可能であることを確認するにはどうすればよいですか?

Windows がネットワーク ドライブを再接続しない場合があり、それらを接続する唯一の方法は、ドライブのマッピング時に [ログオン時に再接続] がチェックされている場合でも、[マイ コンピューター] でそれらをダブルクリックすることです。

\\machine_name\shareドライブ文字の代わりに使用することで解決できますか?

4

5 に答える 5

5

ドライブが同じ文字にマップされるとは限らないため、UNCパスを使用する必要があります。

UNCパスを決定する

F:\data\db.mdbまず、ここにある手法の1つを使用して、ローカルコンピューターに存在するファイルのUNCパスを決定します。

基本的に、Windowsエクスプローラーがネットワークにマップされたドライブを一覧表示する方法を確認し、これを使用してUNCパスを推測します。

WMIを使用して可用性を確認する

ドライブが、アプリケーションの使用を計画しているすべてのローカルコンピュータに実際にマップされていると仮定して、Win32_MappedLogicalDiskクラスを使用して、マップされたネットワークドライブの可用性を判断します。

ここに、特定のネットワークドライブが使用可能かどうかを判断するために適応できるサンプルコードがいくつかあります([マップされたドライブ情報]セクションまでスクロールダウンします)。.ProviderNameUNCパスと一致することを確認して、どちらが正しいドライブであるかを確認してから、の値を確認して.Availability、マップされたネットワークドライブにアクセスできるかどうかを判断します。

于 2012-01-24T19:52:12.257 に答える
5

「ドライブ文字の代わりに\machine_name\ shareを使用するのが解決策でしょうか?」と質問しました。

はい、そうかもしれません。UNCパスは、次の2つの問題を回避します。

  1. ドライブ文字に接続されていない共有
  2. 共有は接続されていますが、予想とは異なるドライブ文字にマップされています

不明な点は、アプリケーション内の何かがMDBのUNCパスを複雑にするのか、それとも完全な取引ブレーカーにするのかということです。

于 2012-01-19T17:12:29.003 に答える
1

ネットワーク ドライブ マッピングの可能性は確実に放棄する必要があります。

  • この手法を使用すると、データベースを使用して各コンピューターを「物理的に」操作する必要があり、ネットワークドライブに文字を割り当てる必要があります。
  • すべてのコンピュータ ユーザーは簡単に変更できます
  • ネットワークからの切断により、ユーザーはディスクドライブに「手動で」再接続する必要がある場合があります

あなたはドメインにいますが、名前を使用することはお勧めしません。コンピューターは、さまざまな理由から、特に IP が定期的に変更されている場合、ネットワーク上で「簡単に」見つけられるとは限らないからです。

ディスクに固定 IP を割り当てる方法を確実に見つける必要があります。これは、考えることができる最も安定した永続的なソリューションです。ドメイン管理者に手配を依頼してください。

ネットワーク ディスクの存在をテストすることは、非常に簡単に行うことができます。mdb ファイルを直接開こうとするなど、複数の解決策があります。ファイルの存在をテストすることもできます (ファイル オブジェクトを使用すると思います)。コードから起動できる外部プログラムや Windows API を使用することもできます。「VB test IP」などをググって、都合のよい解決策を見つけてください。

編集: windows には、いくつかの VB コードで ping をシミュレートする提案さえあります。ここで確認してください

EDIT2: 私のアプリの 1 つで、この 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

アプリケーションが開始される直前に、このスクリプトが実行されていることを確認してください。

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

これにより、指定した文字で共有ドライブがマップされます!

于 2012-01-24T00:27:57.343 に答える