【发布时间】:2018-01-30 21:07:12
【问题描述】:
我有一个 MS Access 应用程序,它的表单上有一个按钮,可以移动文件、更新记录字段并使用以下参数打开网页: 1) 访问记录的 ID 2) 更新字段的值 3) 密码。
除了打开网页,一切正常。
我把这篇文章加红了:How to open a URL from MS Access with parameters 并写了一行 CreateObject("Shell.Application")...
FSO.MoveFolder FLD_READY & "\" & rs.Fields(order_int_ID), FLD_SERVER & "\" & rs.Fields(order_int_ID)
rs.Edit: rs.Fields(order_stage) = os07: rs.Update
CountFile = CountFile + 1
CreateObject("Shell.Application").Open "https://example.com/status/" & "/" & rs.Fields(order_int_ID) & "/" & 'os07' & "/" & 'secretword'
你能告诉 - 它有什么问题吗?我应该如何更改它以使其正常工作?
这是整个脚本。提到的块几乎在它的末尾。
' Order_stage status
Private Const os06 = "06"
Private Const os07 = "07"
' Transfer to server
Private Const FTP_TRANSFER_TYPE_UNKNOWN As Long = 0
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000
Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800
Private szErrorMessage As String
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const FTP_TRANSFER_TYPE_ASCII = &H1
Private dwType As Long
Private Const FtpConnectionFile = "D:\ftp_connection.txt"
Private Const FTP_UP_HOME = "public_html/"
'Folders
Private Const FLD_READY = "d:\10-5-0-Ready"
Private Const FLD_SERVER = "d:\10-6-0-Server"
Private Sub Ctl10_50___SERVER_Click()
Dim ftpHost As String
Dim ftpPort As Long
Dim ftpUser As String
Dim ftpPassword As String
Dim CountFile As Integer
Dim hOpen As Long
Dim hConn As Long
Dim hPut As Long
Dim ftpCurrentDirectory As String
Dim szDir As String
Dim strTextLine As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim oFolder As Object
Dim oSubFolder As Object
Dim oFile As Object
Dim strFileExt As String
Dim Strt As Integer
Dim i As Integer: i = 0
Dim iFile As Integer: iFile = FreeFile
Open FtpConnectionFile For Input As #iFile
Do Until EOF(1)
Line Input #1, strTextLine
Select Case i
Case Is = 0: ftpHost = Trim(strTextLine)
Case Is = 1: ftpPort = CLng(Trim(strTextLine))
Case Is = 2: ftpUser = Trim(strTextLine)
Case Is = 3: ftpPassword = Trim(strTextLine)
Case Is = 4: Exit Do
End Select
i = i + 1
Loop
Close #iFile
hOpen = InternetOpenA("FTP Client", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
If hOpen = 0 Then
ErrorOut Err.LastDllError, "InternetOpen"
End If
dwType = FTP_TRANSFER_TYPE_ASCII
hConn = InternetConnectA(hOpen, ftpHost, ftpPort, ftpUser, ftpPassword, 1, 0, 0)
If hConn = 0 Then
ErrorOut Err.LastDllError, "InternetConnect"
End If
If (FtpCreateDirectory(hConn, FTP_UP_HOME) = False) Then
ErrorOut Err.LastDllError, "FtpCreateDirectory"
Else
End If
If (FtpSetCurrentDirectory(hConn, FTP_UP_HOME) = False) Then
ErrorOut Err.LastDllError, "FtpCreateDirectory"
Else
End If
For Each oFolder In FSO.GetFolder(FLD_CHECK).SubFolders
For Each oFile In oFolder.Files
strFileExt = FSO.GetExtensionName(oFile)
'MsgBox (strFileExt)
If strFileExt = "psd2" Then
Dim rs2 As Recordset
Set rs2 = CurrentDb.OpenRecordset("SELECT A_INCOMING_ORDERS.order_int_ID, A_INCOMING_ORDERS.order_stage FROM A_INCOMING_ORDERS WHERE (A_INCOMING_ORDERS.order_int_ID = '" & oFolder.Name & "')")
Do While Not rs2.EOF
rs2.Edit: rs2.Fields(order_stage) = os40: rs2.Update
rs2.MoveNext
Loop
rs2.Close
FSO.MoveFolder oFolder.Path, FLD_ALTER & "\" & oFolder.Name
End If
Next
Next
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT A_INCOMING_ORDERS.order_int_ID, A_INCOMING_ORDERS.order_stage FROM A_INCOMING_ORDERS WHERE (A_INCOMING_ORDERS.order_stage = '" & os06 & "');")
CountFile = 0
Do While Not rs.EOF
If (FSO.FolderExists(FLD_READY & "/" & rs.Fields(order_int_ID))) Then
If (FtpCreateDirectory(hConn, rs.Fields(order_int_ID)) = False) Then
ErrorOut Err.LastDllError, "FtpCreateDirectory"
Else
End If
For Each oFile In FSO.GetFolder(FLD_READY & "/" & rs.Fields(order_int_ID)).Files
hPut = FtpPutFileA(hConn, FLD_READY & "/" & rs.Fields(order_int_ID) & "/" & oFile.Name, "/" & FTP_UP_HOME & "/" & rs.Fields(order_int_ID) & "/" & oFile.Name, 2, 0)
If hPut = 0 Then
ErrorOut Err.LastDllError, "FtpPutFileA"
Else
End If
Next
FSO.MoveFolder FLD_READY & "\" & rs.Fields(order_int_ID), FLD_SERVER & "\" & rs.Fields(order_int_ID)
rs.Edit: rs.Fields(order_stage) = os07: rs.Update
CountFile = CountFile + 1
CreateObject("Shell.Application").Open "https://example.com/status/" & "/" & rs.Fields(order_int_ID) & "/" & 'os07' & "/" & 'secretword'
End If
rs.MoveNext
Loop
rs.Close
InternetCloseHandle hConn
InternetCloseHandle hOpen
MsgBox "Count: " & CountFile
End Sub
【问题讨论】:
-
...问题到底是什么?如果您有问题或特定的一段代码不起作用/您不知道如何解决:在问题中描述它。对于诸如“请您编写我的代码来完成这个和那个”之类的问题,您不会在这里得到任何答案...
-
感谢您的来信!那么,问题来了:如何在这种 MS Access vba 脚本中生成带参数的 URL?
-
你有 +60 行代码和一个复杂的介绍。如果问题真的是“如何在 VBA 中生成 URL?”答案是:创建一个字符串并将 URL 放入其中。请花一些时间来问你的问题,这样帮助者就不必加班(或读心术)来帮助你。这里的每个人都喜欢提供帮助。但我们不是来解决不必要的谜题的。
-
好的...让我们划分问题...您能告诉我生成带有参数的URL的字符串应该是什么样子吗?请理解:我不是程序员。我的程序员目前不可用,我需要尽快更改会计系统。所以,如果可以的话,请帮助我。我认为这个字符串应该插入到脚本的底部(几乎)。
-
非常感谢您的帮助! ...帮助什么?您发布了一段代码,但没有提供任何问题、错误和不需要的结果。请相应地进行编辑(请参阅标签下方的编辑链接),而不是在此处的 cmets 中。