程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> access如何將文件保存在OLE字段裡(OLE寫入/讀出)

access如何將文件保存在OLE字段裡(OLE寫入/讀出)

編輯:關於Access數據庫

問題:

如何將文件保存在OLE字段裡(OLE寫入/讀出)?
 

回答:


注意:以下代碼是將文件以二進制存儲在OLE字段中,與手動(右鍵單擊OLE字段,選"插入對象")將文件嵌入到OLE字段中是不同的。以二進制方法存儲文件無法直接在字段中編輯,必須讀出存為文件才能編輯,編輯完成後再寫入到OLE字段中。
如何將文件保存在OLE字段裡(OLE寫入/讀出)?
OLE文件讀入和讀出

支持的類型使所有文件,當然,你在讀入數據的時候,最好做一個字段保存文件的類型,在保存文件的時候,就可以根據類型選擇要保存的類型了。 

Option Compare Database
Option Explicit 
 

Public Function GetFromFile(strTable As String, strFIEld As String, strFilter As String, objFileName As String) As Boolean

'============================================================
' 過程函數名: CommModule.GetFromFile 類型:Function
' 參數:
'     strTable (String)  :准備保存圖形數據的表名稱
'     strFIEld (String)  :准備保存圖形數據的字段名稱
'     strFilter (String)  :打開表的過濾字符串,用於定位並確保被打開的表的數據的唯一性
'     objFileName (String) :准備輸入到表裡邊的圖象文件名稱
' 返回:如果保存成功,返回True,如果失敗,返回False
'-------------------------------------------------------------
' 說明:把圖象文件的數據保存到表裡邊
'-------------------------------------------------------------
' 修訂歷史:
'=============================================================
Dim recset   As ADODB.Recordset, FileData() As Byte, FileNo As Long, FileSize As Long, strSQL As String

  strSQL = "Select " & strFIEld & " From " & strTable & " Where " & strFilter & ";"
  Set recset = New ADODB.Recordset
  recset.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  GetFromFile = True
  If recset(strFIEld).Type <> DB_OLE Or Not IsFileName(objFileName) Then
    GetFromFile = False     '如果字段不是OLE字段,或者文件不存在,返回錯誤
    GoTo EndGetFromFile
  End If
  If recset.EOF Then       '如果記錄不存在,返回錯誤
    GetFromFile = False
    GoTo EndGetFromFile
  End If
  FileSize = GetFileSize(objFileName) '如果被打開的文件大小為零,返回錯誤
  If FileSize <= 0 Then
    GetFromFile = False
    GoTo EndGetFromFile
  End If
  ReDim FileData(FileSize)      '重新初始化數組
  FileNo = FreeFile          '獲取一個空閒的文件號
  Open objFileName For Binary As #FileNo '打開文件
  Get #FileNo, , FileData()      '讀取文件內容到數組
  Close #FileNo            '關閉文件
  recset(strFIEld).value = FileData() '保存數據
  recset.Update            '更新數據
  Erase FileData           '釋放內存
EndGetFromfile:
  recset.Close            '關閉RecordSet
  Set recset = Nothing        '釋放內存
End Function

Public Function SaveToFile(strTable As String, strFIEld As String, strFilter As String, strFileName As String) As Boolean
'============================================================
' 過程函數名: CommModule.SaveToFile 類型:Function
' 參數:
'     strTable (String)  :保存圖形數據的表名稱
'     strFIEld (String)  :保存圖形數據的字段名稱
'     strFilter (String)  :打開表的過濾字符串,用於定位並確保被打開的表的紀錄的唯一性
'     strFileName (String) :准備保存的圖象的文件名稱
' 返回:如果保存成功,返回True,如果失敗,返回False
'-------------------------------------------------------------
' 說明:把由GetFromFile函數保存到表中OLE字段的數據還原到文件
'-------------------------------------------------------------
' 修訂歷史:
'=============================================================
Dim recset   As ADODB.Recordset, FileData() As Byte, FileNo As Long, FileSize As Long, strSQL As String

  strSQL = "Select " & strFIEld & " From " & strTable & " Where " & strFilter & ";"
  Set recset = New ADODB.Recordset
  recset.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  SaveToFile = True
  If recset(strFIEld).Type <> DB_OLE Then
    SaveToFile = False     '如果字段不是OLE字段,返回錯誤
    GoTo EndSaveToFile
  End If
  If recset.EOF Then       '如果記錄不存在,返回錯誤
    SaveToFile = False
    GoTo EndSaveToFile
  End If
  FileNo = FreeFile
  Open strFileName For Binary As #FileNo
  ReDim FileData(recset(strFIEld).ActualSize) '重新初始化數組
  FileData() = recset(strField).GetChunk(recset(strFIEld).ActualSize) '把OLE字段的內容保存到數組
  Put #FileNo, , FileData()  '把數組內容保存到文件
  Close #FileNo
  Erase FileData
EndSaveTofile:
  recset.Close
  Set recset = Nothing
End Function

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved