通过Access将附件添加到远程SQL Server

时间:2015-04-23 10:43:59

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

我正在使用Access 2010和SQL Server 2008.我必须在我的一个表单中捕获附件并将附件移动到SQL Server。服务器是远程的,我不允许提供相对于服务器的文件路径。 以下是我尝试过但没有成功的事情: 1.使用ADODB.Stream但我在使用转换函数(将数据转换为varbinary)后获取文件值后使用对象的.Read函数时出错 2.尝试在表单中创建附件类型,并将附件插入到本地访问数据库表中,数据类型为附件。我无法将此表中的数据移动到SQL服务器表。

任何指针或解决方案都会有很大的帮助。

谢谢

2 个答案:

答案 0 :(得分:1)

我明白了。谢谢你们所有的建议。 我所做的只是创建一个ADODB.Stream对象,读取文件并将其传递给sql server中的proc,该服务器插入数据。

插入数据的代码如下所示  Dim conn As ADODB.Connection     Dim cmd作为ADODB.Command     Dim coll As Collection

Set conn = New ADODB.Connection
Set coll = New Collection

stConnect = GetADOConnectionString()
conn.ConnectionString = stConnect
conn.Open
If conn.State = 1 Then ' open
  Set cmd = New ADODB.Command
  cmd.CommandType = adCmdStoredProc
  cmd.CommandText = "proc_insert_review_doc"
  cmd.ActiveConnection = conn

  coll.Add cmd.CreateParameter("@LoanID", adVarChar, adParamInput, 10, LoanId)
  coll.Add cmd.CreateParameter("@WorkStreamID", adVarChar, adParamInput, 10, WorkstreamID)
  coll.Add cmd.CreateParameter("@QuestionSetID", adVarChar, adParamInput, 10, QuestionSetID)
  coll.Add cmd.CreateParameter("@FileValue", adVarBinary, adParamInput, , FileValue)


  For Each coll_i In coll
      cmd.Parameters.Append (coll_i)
  Next coll_i

  cmd.Execute

  Set cmd = Nothing
  conn.Close

Else
    MsgBox "Failed to open a connection to the database server!", vbCritical
End If
  Set conn = Nothing

结束功能

答案 1 :(得分:0)

我会做那样的事情,使用记录集对我来说更容易......

dim Conn as ADODB.Connection
dim RS as ADODB.RecordSet
dim binObj as ADODB.Stream
Conn.ConnectionString="Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Password=;Initial Catalog=khc405;Network Library=dbmssocn; Data Source=db1;"
Conn.Open
Set RS = New ADODB.Recordset
                                    sql = "SELECT * FROM SOMETABLE WHERE FILENAME='HOWTO.PDF'
                                    RS.Open sql, GLBcn, adOpenDynamic, adLockOptimistic
                                    If Not (RS.BOF And RS.eof) Then
                                        Set binObj = New ADODB.Stream
                                        binObj.Type = adTypeBinary
                                        binObj.Open
                                        binObj.LoadFromFile (App.Path & "\SomeFolder\" & ''HOWTO.PDF''
                                        RS!FILEDATA = binObj.Read
                                        RS!FileName ='HOWTO.PDF'
                                        RS.Update
                                        binObj.Close
                                        Set binObj = Nothing
     End If

我从 - 得到这个 - http://www.sqlservercentral.com/Forums/Topic243427-169-1.aspx

祝你好运