Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

12下一頁(yè)
返回列表 發(fā)新帖
查看: 13094|回復(fù): 15
打印 上一主題 下一主題

[A高7]如何使用VBA代碼將插入OLE字段中的對(duì)象還原成一個(gè)文件

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2004-6-24 05:42:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
通過(guò)VBA編程使用DAO或ADO方式將文件寫(xiě)入表OLE字段

與 直接在OLE字段中按右鍵菜單->插入對(duì)象 選擇文件插入

這兩種方式實(shí)際上是不相同的.

1.使用VBA編程插入的文件,在OLE字段上雙擊不會(huì)打開(kāi)相應(yīng)的容器程序

2.使用插入對(duì)象方法插入的文件,無(wú)法直接通過(guò)DAO或ADO方法讀出,因?yàn)椴迦氲奈募蠴LE頭文件,而不僅是插入的文件的內(nèi)容

我們知道,使用VBA編程寫(xiě)入OLE字段的文件或?qū)ο罂梢栽偈褂肰BA代碼還原成一個(gè)文件,那如何實(shí)現(xiàn)將用"插入對(duì)象"方式插入OLE字段的對(duì)象,通過(guò)VBA代碼匯出到一個(gè)文件,匯出的文件擴(kuò)展名需與插入前的擴(kuò)展名一樣,而且匯出的文件格式完整,能夠正常打開(kāi).
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2004-6-25 21:20:00 | 只看該作者
BMP文件可以,有人做過(guò),其它不知行

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2004-6-26 19:34:00 | 只看該作者
這個(gè)題值得做,做出來(lái)比較有意義

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2004-7-1 08:16:00 | 只看該作者
記得以前effiel 和cg1和我都有關(guān)相關(guān)的探討,但都未完全解決這道難題。我現(xiàn)在只能實(shí)現(xiàn)excel word bmp一些已知擴(kuò)展名的文件導(dǎo)出。對(duì)未知文件擴(kuò)展名的則未找到適當(dāng)?shù)姆椒ā?br />
5#
發(fā)表于 2004-8-26 05:18:00 | 只看該作者
我用asp顯示過(guò)ole字段中的word文件,方法是查找word文件開(kāi)頭的特征字,把之前的砍掉,但總感覺(jué)是湊出來(lái)的。我想ole文件頭應(yīng)該有一些格式,有誰(shuí)能找到格式說(shuō)明就行,例如偏移字段在哪等。
6#
發(fā)表于 2004-8-26 17:28:00 | 只看該作者
可能xls、doc、bmp等格式各有不同!
7#
發(fā)表于 2004-8-26 21:12:00 | 只看該作者
MS <B >Access <B >OLE <B >Object to Disk <B >File Export



--------------------------------------------------------------------------------



'Written : 9 Jun 2004

'Modified : 27 Jul 2004

'Author : Sonam Gurung 2004

'Module to export bmp <B >file data from <B >OLE Field to disk <B >file

'===========================



Option Compare Database

Option Explicit



'Constants That User Can Modify

Const table = "table1"

Const unid = "id"

Const field = "data"

Const dirpath = "c:\"

'End of Constant Declaration



Sub SaveOLEToFile()

Dim db As Database, rs As DAO.Recordset, q As String, fname As String, b() As Byte

Set db = CurrentDb()

q = "select " & unid & "," & field & " from " & table

Set rs = db.OpenRecordset(q)

While Not rs.EOF

fname = dirpath & "\" & Trim(Str(rs.Fields(0).Value)) & ".tif"

ReDim b(rs.Fields(1).Size)

b = rs.Fields(1).Value

Open fname For Binary <B >Access Write As #1

Put #1, , b

Close #1

TrimFile (fname)

rs.MoveNext

Wend

rs.Close

Set rs = Nothing

End Sub



Sub TrimFile(ByVal fname As String)

Dim b() As Byte, l As Long

ReDim b(4)

Open fname For Binary As #1

For l = 1 To LOF(1)

Seek #1, l

Get #1, , b

If b(0) = asc("B") And b(1) = asc("M") And b(2) = asc("B") and b(3)="K" Then Seek #1, l: Exit For

Next l

ReDim b(LOF(1) - l)

Get #1, , b

Close #1



Open fname For Binary As #1

Put #1, , b

Close #1

End Sub

[此貼子已經(jīng)被作者于2004-8-26 13:15:00編輯過(guò)]

點(diǎn)擊這里給我發(fā)消息

8#
發(fā)表于 2008-4-23 18:36:57 | 只看該作者
整理一下,未測(cè)試

MS Access OLE Object to Disk File Export

--------------------------------------------------------------------------------

'Written : 9 Jun 2004
'Modified : 27 Jul 2004
'Author : Sonam Gurung 2004
'Module to export bmp file data from OLE Field to disk file
'===========================

Option Compare Database
Option Explicit

'Constants That User Can Modify
Const table = "table1"
Const unid = "id"
Const field = "data"
Const dirpath = "c:\"
'End of Constant Declaration

Sub SaveOLEToFile()
        Dim db As Database, rs As DAO.Recordset, q As String, fname As String, b() As Byte
        Set db = CurrentDb()
        q = "select " & unid & "," & field & " from " & table
        Set rs = db.OpenRecordset(q)
        While Not rs.EOF
                fname = dirpath & "\" & Trim(Str(rs.Fields(0).Value)) & ".tif"
                ReDim b(rs.Fields(1).Size)
                b = rs.Fields(1).Value
                Open fname For Binary Access Write As #1
                Put #1, , b
                Close #1
                TrimFile (fname)
                rs.MoveNext
        Wend
        rs.Close
        Set rs = Nothing
End Sub

Sub TrimFile(ByVal fname As String)
        Dim b() As Byte, l As Long
        ReDim b(4)
        Open fname For Binary As #1
        For l = 1 To LOF(1)
                Seek #1, l
                Get #1, , b
                If b(0) = asc("B") And b(1) = asc("M") And b(2) = asc("B") and b(3)="K" Then Seek #1, l: Exit For
        Next l
        ReDim b(LOF(1) - l)
        Get #1, , b
        Close #1

        Open fname For Binary As #1
        Put #1, , b
        Close #1
End Sub
9#
發(fā)表于 2008-5-17 00:36:59 | 只看該作者
好好學(xué)習(xí),天天向上。
10#
發(fā)表于 2009-3-27 17:31:13 | 只看該作者

好貼,頂頂更健康

好貼,頂頂更健康
















古之立大事者,不惟有超世之才,亦必有堅(jiān)忍不拔之志。---魔獸劍圣異界縱橫
極品家丁 龍蛇演義 惡魔法則 斗羅大陸 異界槍神 凡人修仙傳 魔獸領(lǐng)主 超級(jí)農(nóng)民 極品公子 飛升之后
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 06:31 , Processed in 0.101213 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表