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

如何將文件保存在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