#If VBA7 Then Declare PtrSafe Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As LongPtr) #Else Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long) #End If Sub SaveToFileADOStream() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset, strm As New ADODB.Stream Dim rs2 As New ADODB.Recordset Dim fileBin() As Byte, fileBinSize As Long, bOffset As Long Dim fileBin2() As Byte, strSQL As String strSQL = "Select AttachmentField_Name As FileName " & _ "From table_Name " 'このSQLだと超絶遅い ' strSQL = "Select AttachmentField_Name.FileName As FileName, " & _ ' "AttachmentField_Name.FileData As FileData " & _ ' "From table_Name" Set cn = Application.CurrentProject.AccessConnection rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly Set rs2 = rs(0).Value fileBin = rs2.Fields("FileData") fileBinSize = UBound(fileBin) bOffset = fileBin(0) ReDim fileBin2(fileBinSize - bOffset) CopyMemory fileBin2(0), fileBin(bOffset), fileBinSize - bOffset With strm .Open .Type = adTypeBinary .Write fileBin2 .SaveToFile CurrentProject.Path & "\" & _ rs2("FileName"), adSaveCreateOverWrite .Close End With Set strm = Nothing rs2.Close: Set rs2 = Nothing rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
2011/01/06
access2010 access2007 ADO.Stream SaveToFile
添付ファイル型フィールドに保存されているファイルをローカルに保存する。
ラベル:
access 2010,
ADO,
MS-Access,
VBA
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿