Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

OLE格式图片的调取

石三少  发表于:2010-07-19 16:05:33  
复制

    '员工照片为员工工号的时候我可以如下语句调取,如果是员工工号后面加上 ‘.jpg’的时候我怎么写
    Dim Rs As New ADODB.Recordset
    With Rs
        .ActiveConnection = CurrentProject.Connection
        .Source = "SELECT 图标.图片 FROM 图标 INNER JOIN 员工资料新增修改 ON 图标.图片说明 = 员工资料新增修改.工号"
        .Open
    End With
    Img照片.PictureData = Rs.Fields!图片

 

Top
萧云 发表于:2010-07-20 11:31:19

'如果我没有记错 ACCESS2007 版本的Img控件应该可以显示。
'
'还看一看朱亦文写过代码吧。

 

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

 

'获取图像数据并将其显示在pic中,返回True表示成功
'参数说明:
' - pic   用来显示读出来的图像的图片框控件
' - id    存放在数据库中的图像ID(自动编号)
' - m     为0时将取出的图像显示在pic中,为1时出现导出图像对话框
' - filename 当m设为1时这个参数提供一个默认文件名,m为0时可以不设置

Public Function ReadPictureData(ByRef pic As PictureBox, ByVal id As Long, Optional ByVal m As Byte, Optional ByVal FileName As String) As Boolean
  On Error GoTo err
  Dim Data() As Byte, i As Integer
  Dim Conn1 As New ADODB.Connection      '以ADO方式打开的数据库
  Dim Rs1 As New ADODB.Recordset         '数据集合
  Dim nLow As Long, cbMem As Long, hMem As Long, lpMem As Long
  Dim istm As stdole.IUnknown
  Dim IID_IPicture As Guid
  Dim ipic As IPicture
  Dim mPic As IPictureDisp
 
  '读取出数据
  If Rs1.State <> 0 Then Rs1.Close
  If Conn1.State <> 0 Then Conn1.Close
  Conn1.Open LinkStr
  SQL = "select Picture from tab_App where ID = " & id
  Rs1.Open SQL, Conn1, 1, 1
  If Rs1.RecordCount < 1 Then GoTo err
  Data() = Rs1("Picture").GetChunk(7500000)
  If Rs1.State <> 0 Then Rs1.Close
  If Conn1.State <> 0 Then Conn1.Close
  If m = 1 Then
    '导出图像
    i = FreeFile
    Open FileName For Output As #i
    Close #i
    i = FreeFile
    Open FileName For Binary Access Write As #i
      Put #i, 1, Data
    Close #i
    ReadPictureData = True
    Exit Function
  End If
 
  '将内存数据data()变成可显示的IPictureDisp图像后显示
  pic.AutoSize = True
  nLow = LBound(Data)
  On Error GoTo 0
  cbMem = (UBound(Data) - nLow) + 1
  hMem = GlobalAlloc(GMEM_MOVEABLE, cbMem)
  If hMem Then
    lpMem = GlobalLock(hMem)
    If lpMem Then
      MoveMemory ByVal lpMem, Data(nLow), cbMem
      Call GlobalUnlock(hMem)
      If (CreateStreamOnHGlobal(hMem, CTrue, istm) = S_OK) Then _
         If (CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture) = S_OK) Then _
            Call OleLoadPicture(ByVal ObjPtr(istm), cbMem, CFalse, IID_IPicture, mPic)
    End If
  End If
  If mPic Is Nothing Then GoTo err
  Set pic.Picture = mPic
  pic.AutoSize = False
  Set mPic = Nothing
  '返回成功
  ReadPictureData = True
  Exit Function
err:
  If Rs1.State <> 0 Then Rs1.Close
  If Conn1.State <> 0 Then Conn1.Close
  ReadPictureData = False
  If err.Number <> 0 Then MsgBox err.Description, 48, "显示图像"
End Function

 

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


'以上代码你可以稍做修改直接用在你的程序中.

 

 



萧云 发表于:2010-07-20 11:33:53
注意上述代码中的控件是 PictureBox 因此需要使用 FORM2.0 控件

总记录:2篇  页次:1/1 9 1 :