使用ADODB.Stream上传varbinary - 如果在计算机上打开文件以插入SQL varbinary(max)字段,如何使用LoadFromFile?

时间:2014-02-26 17:57:51

标签: sql sql-server-2008 vba ms-access adodb

目标

我正尝试从Microsoft Access执行以下操作:

  • 将varbinary(max)字段插入SQL 2008数据库
    • 读取二进制文件(Excel / Word)
    • 插入SQL数据库

这似乎很简单。

背景

看起来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的方式不同,那么我根本不会使用它。

0 个答案:

没有答案