2010-04-19 2 views
0

Есть ли способ получить вложение из формы в столбец SQL Server с помощью VBA? Есть несколько примеров использования привязок и расшифровки кодировки, хотя это так?Infopath Attachment Field; Отправить в SQL Server

Поддерживает ли SQL-сервер вложения как-то?

Спасибо заранее, ВС

ответ

0

Вы можете хранить файлы в сервере SQL в (Max) Колонка VARBINARY. Это сохранит то, что вы когда-либо вложили, чтобы вы могли получить его позже. Если вы используете SQL Server 2008, вы также можете использовать функцию фильтрации, которая очень эффективна и работает точно так же.

Вот какой код в проекте доступа/VBA у меня есть, который будет загружать файл, который хранится на сервере SQL и сохраняет его на диске

Public Sub Download_file(lMaterial_ID As Long, strSave_folder As String) 
'Download the file lMaterial_ID and save it 
Dim adStream As ADODB.Stream 
Dim rst As ADODB.Recordset 
On Error GoTo Error_trap 
On Error GoTo 0 
'check if we have an open connection, if we do use it 
Select Case dbCon.State 
    Case adStateOpen 
     'connection is open, do nothing 
    Case adStateConnecting 
     'still conecting wait 
     Do Until dbCon.State = adStateOpen 
      Application.Echo True, "Connection to DB" 
     Loop 
    Case adStateClosed 
     'connection closed, try to open it 
     If Len(strSQL_con_string) = 0 Then 
      Set_SQL_con 
     End If 
     dbCon.ConnectionString = strSQL_con_string 
     dbCon.Provider = "sqloledb" 
     dbCon.Open 
End Select 

Me.acxProg_bar.Value = 0 
Me.acxProg_bar.Visible = True 
Me.Repaint 

Set adStream = New ADODB.Stream 
adStream.Type = adTypeBinary 
adStream.Open 


Set rst = New ADODB.Recordset 
rst.Open "SELECT Material_FS, Material_file_name FROM tblMaterials WITH (NOLOCK) WHERE Material_ID=" & lMaterial_ID, dbCon, adOpenForwardOnly, adLockReadOnly 
Me.acxProg_bar.Value = 60 
Me.Repaint 
If IsNull(rst.Fields("Material_FS").Value) = False Then 
    adStream.Write rst.Fields("Material_FS").Value 
    Me.acxProg_bar.Value = 80 
    Me.Repaint 
    adStream.SaveToFile strSave_folder & "\" & rst.Fields("Material_file_name").Value, adSaveCreateOverWrite 
End If 
rst.Close 
dbCon.Close 
Me.acxProg_bar.Value = 0 
Me.acxProg_bar.Visible = False 
Me.Repaint 


Exit Sub 

Error_trap: 

If dbCon Is Nothing = False Then 
    If dbCon.State = adStateOpen Then dbCon.Close 
End If 

DoCmd.Hourglass False 
MsgBox "An error happened in sub Download_file, error description, " & Err.Description, vbCritical, "MCTS" 
Me.acxProg_bar.Value = 0 
Me.acxProg_bar.Visible = False 
Me.Repaint 
End Sub 
Смежные вопросы