現在、社内システムの開発中です。
LAN系がAとBの二つがあり、1台両方のLANに属しているPC X (Windows)があります。
このとき、LAN AのPCから LAN BのファイルサーバYの閲覧を行おうとしております。
ある程度はやってみたのですが、Access でファイルが読み込めないことが発覚しました。
良い方法はありませんでしょうか。
現在は、PC X にAccess VBAを置いて、LAN A上のPCからWMIにて Xにログイン、
バッチを叩いてAccess VBAを実行しています。
Access VBA はLAN B上のサーバにクエリを発行してaccdb上にコピーした後、
クエリで選択されたLAN B上のパスのテキストファイルからデータをクロールします。
あとは Access を Xの共有フォルダ上においておき、
LAN Aからアクセスを開いてテーブルをコピーするだけでデータをクロールできるようにしよう、と考えておりました。
発生している問題・エラーメッセージ
LAN AからAccessを実行した際、 LAN B ファイルサーバ Y 上のテキストファイルが見つかりません。 WMI は添付の通りで、Xが見れるファイルはすべて見れると思っておりました。 実態は違うのでしょうか。 回避策はありませんでしょうか。 WMIの設定を変える必要があるのでしょうか。 お手数ですが、ご指導のほどよろしくお願いいたします。
該当のソースコード
VBScript
1'RemoteCrawl.vbs (A上で実行) 2RemoteExecute "PCX",".\PCXUSER","","cmd.exe /c D:\共有フォルダ\データベース\DoAccess.vbs" 3 4Function RemoteExecute(strServer, strUser, strPassword, CmdLine) 5Const Impersonate = 3 6RemoteExecute = -1 7Set Locator = CreateObject("WbemScripting.SWbemLocator") 8Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword) 9Service.Security_.ImpersonationLevel = Impersonate 10Set Process = Service.Get("Win32_Process") 11result = Process.Create(CmdLine, , , ProcessId) 12If (result <> 0) Then 13WScript.Echo "Creating Remote Process Failed: " & result 14Wscript.Quit 15End If 16RemoteExecute = ProcessId 17End Function
VBScript
1'DoAccess.vbs(b上で実行) 2Set objArgs = Wscript.Arguments 3runXLmacro 4 5Function runXLmacro() 6On Error Resume Next 7Dim AcApp 8Set AcApp = CreateObject("Access.Application") 9AcApp.visible = true 10AcApp.OpenCurrentDatabase "D:\共有フォルダ\データベース\データ収集.accdb" 11AcApp.Run("Crawl") 12 13if err.Number <> 0 then 14Set fso = CreateObject("Scripting.FileSystemObject") 15Set tso = fso.CreateTextFile("Error.txt", true) 16tso.Write(err.description) 17tso.Close 18End if 19 20End Function
VBA
1'Access データ収集.accdb 2Public Sub Crawl() 3 'LAN B 上のSQL Server からファイルパスをSelectしてローカルテーブルにInsert(これは問題なく完了) 4 GetURLs 5 6 'ファイルサーバ Y からテキストファイルを開いてローカルテーブルにInsert 7 InsertCrawlData 8End Sub 9 10 11Public Sub InsertCrawlData() 12 13 Dim rs As ADODB.Recordset 14 Set rs = New ADODB.Recordset 15 16 Dim rs2 As ADODB.Recordset 17 Set rs2 = New ADODB.Recordset 18 19 rs.Open "Select Path From FilePaths ", cn, adOpenDynamic, adLockPessimistic 20 rs2.Open "TextDataTable", cn, adOpenDynamic, adLockPessimistic 21 22 Do While Not rs.EOF 23 24 On Error Resume Next 25 'テキストセット 26 27 Dim ts As TextStream 28 Set ts = fso.GetFile(Trim(rs("Path").Value)).OpenAsTextStream 29 30 InsertMain ts, rs, rs2 31 32 Err.Number = 0 33 rs.MoveNext 34 Loop 35 36End Sub 37 38Public Sub InsertMain(ts As TextStream, rs As ADODB.Recordset, rs2 As ADODB.Recordset) 39 Dim s As String 40 41 Do Until ts.AtEndOfStream 42 43 s = ts.ReadLine 44 If Err.Number = 0 Then 45 rs2.AddNew 46 rs2("Path").Value = s 47 End If 48 rs2.Save 49 Loop 50End Sub
試したこと
・Xをリモートデスクトップで起動してAccessを実行→◎
・ファイルサーバYをXのネットワークドライブにする→×
補足情報(FW/ツールのバージョンなど)
A上のPC Windows 10
X Windows 7
Y Windoes Server 2016
WMI の参照元 https://okwave.jp/qa/q6806531.html
回答1件
あなたの回答
tips
プレビュー