怎么直接打开存储在数据库二进制字段内的文件

如何直接打开存储在数据库二进制字段内的文件
请教高手如何实现直接读取数据库内的文件并用系统自带的软件打开他,而不需要先下载到本地保存,在用软件打开这个临时文件
文件有可能是dwg、bmp、doc等各种格式的文档,数据存储在MS   SQL   SERVER的   Image字段内。

------解决方案--------------------
关注
------解决方案--------------------
我先给一下直接打开图片的例子,用本地的图片测试:
Option Explicit
Private Declare Function CreateStreamOnHGlobal Lib "ole32 " (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32 " (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32 " (ByVal lpsz As Any, pclsid As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32 " (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32 " (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (Destination As Any, Source As Any, ByVal Length As Long)
Private Const GMEM_ZEROINIT = &H40


Private Function GetPictureFromByteStream(bImageData() As Byte) As IPicture
Dim lngByteCount As Long
Dim hMem As Long
Dim lpMem As Long
Dim IID_IPicture(15)
Dim IStream As stdole.IUnknown

On Error GoTo Err_Init

lngByteCount = UBound(bImageData) + 1 ' 计算数组大小
hMem = GlobalAlloc(&H2 Or GMEM_ZEROINIT, lngByteCount) ' 按数组大小分配一块内存空间
If hMem <> 0 Then
' 若分配内存成功
lpMem = GlobalLock(hMem) ' 锁定内存, 返回第一块的指针
If lpMem <> 0 Then
CopyMemory ByVal lpMem, bImageData(0), lngByteCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, IStream) = 0 Then
If CLSIDFromString(StrPtr( "{7BF80980-BF32-101A-8BBB-00AA00300CAB} "), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(IStream), lngByteCount, 0, IID_IPicture(0), GetPictureFromByteStream)
End If
End If
End If
End If

GlobalFree hMem

Exit Function

Err_Init:
MsgBox Err.Number & " - " & Err.Description
End Function


Private Sub Command1_Click()
Dim bytData() As Byte
Dim f As String
Dim Fn As Integer
f = App.Path & "\p.jpg "
If Dir(f) = " " Then
MsgBox "File not found "
Exit Sub
End If
Fn = FreeFile
Open f For Binary As #Fn
ReDim bytData(LOF(1) - 1)
Get #Fn, , bytData
Close #Fn
Set Picture1.Picture = GetPictureFromByteStream(bytData())
End Sub

------解决方案--------------------
思路是简单的。将存在数据库中的文件导到本地的一个临时目录产生成文件。在程序中调用关联就可以打开文件了。
这是关联用法:
If Len(Trim(strFile)) <> 0 Then
Call Shell( "rundll32.exe shell32.dll,OpenAs_RunDLL " & strFile, vbNormalFocus)
------解决方案--------------------
//有直接打开word、dwg文档的方法不

应该说没有一个通用的方法,如果只是word、dwg这两种文件格式的话,或许还可以想想办法,加上个 "等 "字的话,基本上就不用考虑了
------解决方案--------------------