我正尝试从Microsoft Access执行以下操作:
这似乎很简单。
看起来ADODB.Stream是最好的方法。我不相信这是最好的。我的SQL服务器环境中禁用了文件流。
我编写的代码可以在VBA中完成我想要的所有未打开的文件。我不想要求用户在使用VBA读取文件之前关闭文件。
这是我目前的代码:
Dim mStream As ADODB.Stream
Set mStream = New ADODB.Stream
Dim fName As String
fName = "C:\tmp.docx"
mStream.Type = adTypeBinary
mStream.Open
mStream.LoadFromFile fName 'this fails if the file is open
Dim mCmd As ADODB.Command
Set mCmd = New ADODB.Command
With mCmd
' define query
.CommandText = "INSERT INTO testingvarbinary (testVarBinary) " & _
"VALUES (?)"
.CommandType = adCmdText
' add parameter
.Parameters.Append .CreateParameter("@P1", adVarBinary, adParamInput, mStream.Size, mStream.Read)
End With
mCmd.ActiveConnection = CurrentProject.Connection
mCmd.Execute
我想过尝试简单地将文件复制到C:\ tmp或者其他东西并阅读那个文件,但似乎应该有办法做到这一点。
如何修改上述代码以适用于用户已打开的文件?在this thread中,似乎有一种方法可以使用.Open
命令来执行此操作,但是我甚至没有成功地让.Open
返回任何内容,更不用说整个文件了。我没有找到使用Open
而不是LoadFromFile
作为我计算机上实际文件的单个示例。
如果VBA中的方式与使用ADODB.Stream的方式不同,那么我根本不会使用它。