2010-04-19 4 views
0

Existe-t-il un moyen d'obtenir la pièce jointe du formulaire à une colonne SQL Server à l'aide de VBA? Il y a quelques exemples sur les attachements encodind et décodage, mais est-ce le cas?Champ d'attachement Infopath; Envoyer dans SQL Server

Le serveur SQL prend-il en charge les pièces jointes?

Merci à l'avance, Sun

Répondre

0

Vous pouvez stocker des fichiers dans le serveur SQL dans une colonne varbinary (max). Cela va stocker ce que vous avez mis là-bas afin que vous puissiez le récupérer plus tard. Si vous utilisez SQL server 2008, vous pouvez également utiliser la fonction filestream qui est très puissante et fonctionne exactement de la même manière.

Voici un code dans un projet d'accès/VBA que j'ai qui va télécharger un fichier qui est stocké dans le serveur SQL et enregistrez-le sur le disque

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 
Questions connexes