会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 数据表 > 正文

如何将文件保存在OLE字段里(OLE写入/读出)?

时间:2009-04-06 08:44 来源:access911.net 作者:佚名 阅读:

 

 

 

 

 

 

 

 

问题:


如何将文件保存在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
'上述代码来源于AccXP网站

(责任编辑:admin)

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: