我在MS Access中有一个按钮,该按钮创建一个包含一些图像,PDF和一个Access .mdb文件的文件夹,然后打开WinSCP来运行命令以将该文件夹上载到FTP服务器。
我遇到的一个问题是,由于“缺少.ldb文件”,上传有时会失败。基本上发生的是,当创建.mdb时,Access会临时创建它的锁定.ldb文件,有时.ldb文件直到WinSCP开始运行后才会消失。然后,WinSCP会检查所有文件并上传它们,到达.ldb,然后由于不再存在而失败。
起初,我认为排除.ldb文件是可以的,但是没有用。
所以现在我认为仅跳过不存在的文件是最简单的解决方案。
这可能吗?
(也许甚至在脚本开始时会有延迟,这是另一个解决方案?)
要上传的代码:
Dim strSFTPDir As String
strSFTPDir = "C:\Program Files (x86)\WinSCP\"
Dim UploadsDir As String
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads\*"
Call Shell(strSFTPDir & "winscp.com /log=""C:\-TabletSoftware-\TabletBE\upload.log"" /command ""open ftp://username:password@ip/"" ""put -filemask=|*.ldb " & UploadsDir & " "" ""exit"" ", vbNormalFocus)
另外,如果有人知道如何使用包含空格的目录,那将很有帮助。
编辑:好吧,我认为,它可以正常工作,但是由于错误最初只是偶尔发生,所以只有时间才能证明。 该修补程序是在运行WinSCP之前的Access中提供的。直到删除.ldb只是一个循环。
Do While (Dir(StnPth & "\To Mail.ldb") <> "")
Loop
答案 0 :(得分:1)
如果需要handle correctly,则需要使用WinSCP 5.15,在这种情况下,选择文件进行文件传输(*
中的UploadsDir
),但被排除在外排除掩码(-filemask=|*.ldb
),但在put
启动之后但WinSCP到达该文件之前已被删除。
如果使用WinSCP的旧版本,则只能选择所需的文件,而不是全部选择,然后排除某些文件。
使用lcd
command将工作目录更改为UploadsDir
(不使用*
更加容易,这样您就只能在put
command中枚举正文件掩码了。 / p>
With multiple masks, you need to use target folder at the end(使用./
上传到当前工作目录)。
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads"
Call Shell(... """lcd " + UploadsDir + """ ""put *.mdb *.other *.yetanother ./"" ""exit"" ", ...)