设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 523|回复: 2
打印 上一主题 下一主题

如何用语句控制或改变OLE 对象内容?????[原创]

[复制链接]
跳转到指定楼层
1#
发表于 2003-3-31 16:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据库中有一表,某一字段用图片表示某状态类型为OLE对象 ,输入时要用插入对象
能否用语言控制或改OLE对象内容???如能,怎么样改?

[em00]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2003-4-1 00:34:00 | 只看该作者
好像有旧贴。

点击这里给我发消息

3#
发表于 2003-4-1 01:35:00 | 只看该作者
我常用的两个函数,是根据新闻组上面改进的,现在可适用ORACLE,针对ADO的
Private Function ReadbolbToFile(blobColumn As ADODB.Field, ByVal FILENAME) As Boolean
Dim FileNumber      As Integer      '文件号
Dim DataLen             As Long         '文件长度
Dim Chunks              As Long         '数据块数
Dim ChunkAry()      As Byte         '数据块数组
Dim ChunkSize       As Long         '数据块大小
Dim Fragment        As Long         '零碎数据大小
Dim lngI                As Long '计数器
         On Error GoTo ErrorHandle
        ReadbolbToFile = False
        ChunkSize = 2048                    '定义块大小为 2K
        If IsNull(blobColumn) Then Exit Function
   
        DataLen = blobColumn.ActualSize         '获得图像大小
        If DataLen < 8 Then Exit Function   '图像大小小于8字节时认为不是图像信息
            FileNumber = FreeFile               '产生随机的文件号
        Open FILENAME For Binary Access Write As FileNumber     '打开存放图像数据文件
        Chunks = DataLen \ChunkSize        '数据块数
        Fragment = DataLen Mod ChunkSize    '零碎数据
        If Fragment > 0 Then            '有零碎数据,则先读该数据
                ReDim ChunkAry(Fragment - 1)
                ChunkAry = blobColumn.GetChunk(Fragment)
                Put FileNumber, , ChunkAry      '写入文件
        End If
        ReDim ChunkAry(ChunkSize - 1)             '为数据块重新开辟空间
        For lngI = 1 To Chunks                              '循环读出所有块
                ChunkAry = blobColumn.GetChunk(ChunkSize)   '在数据库中连续读数据块
                Put FileNumber, , ChunkAry()    '将数据块写入文件中
        Next lngI
        Close FileNumber            '关闭文件
        ReadbolbToFile = True
        Exit Function
ErrorHandle:
        ReadbolbToFile = False
        MsgBox Err.Description, vbCritical, "读图像数据出错!"
End Function

Private Function AppendBlobFromFile(blobColumn As ADODB.Field, ByVal FILENAME) As Boolean
Dim FileNumber      As Integer      '文件号
        Dim DataLen             As Long         '文件长度
Dim Chunks              As Long         '数据块数
Dim ChunkAry()      As Byte         '数据块数组
Dim ChunkSize       As Long         '数据块大小
Dim Fragment        As Long         '零碎数据大小
Dim lngI                As Long '计数器

On Error GoTo ErrorHandle
AppendBlobFromFile = False
ChunkSize = 2048                    '限制每次读取的块大小为 2K

FileNumber = FreeFile               '产生随机的文件号
Open FILENAME For Binary Access Read As FileNumber      '打开图像文件
DataLen = LOF(FileNumber)           '获得文件长度
    If IsNull(blobColumn) Then Exit Function

If DataLen = 0 Then                 '文件长度为0
Close FileNumber
    AppendBlobFromFile = True
    Exit Function
End If
   
Chunks = DataLen \ ChunkSize        '数据块的个数
Fragment = DataLen Mod ChunkSize
If Fragment > 0 Then            '先写零碎数据
ReDim ChunkAry(Fragment - 1)
    Get FileNumber, , ChunkAry()        '读出文件
    blobColumn.AppendChunk ChunkAry '调用AppendChunk函数写数据
End If
   
ReDim ChunkAry(ChunkSize - 1)       '为数据块开辟空间
For lngI = 1 To Chunks                  '循环读出所有数据块
    Get FileNumber, , ChunkAry()        '读出一块数据
    blobColumn.AppendChunk ChunkAry     '在数据库中增加数据块
Next lngI
   
Close FileNumber            '关闭文件
AppendBlobFromFile = True
Exit Function
ErrorHandle:
AppendBlobFromFile = False
MsgBox Err.Description, vbCritical, "写图像数据出错!"
End Function
不对请注意,直接用插入对象与用代码写入的在文件头上还是有一些不同。不过,上面这两个函数针对读写这两个功能已经足够
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-29 02:59 , Processed in 0.096705 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表