技術(shù) 點
- 技術(shù)
- 點
- V幣
- 點
- 積分
- 1204
|
本帖最后由 yhf 于 2012-9-13 14:57 編輯
數(shù)據(jù)庫ADP+SQL:表中有一" image"類型的字段"照片",請教在窗體顯示、添加、刪除照片的代碼,謝謝!
以前在網(wǎng)上找到過以下代碼,在MDB中沒問題,但在ADP中顯示“類型不匹配”:
Option Compare Database
Option Explicit
Public ImgPath As String
Public Function LoadBImage(ByVal NewForm As Form, _
ByVal NewID As String, _
ByVal NewIDValue As Variant, _
ByVal NewField As String, _
ByVal NewImage As Image)
'==============================================================================
'-函數(shù)名稱: LoadBImage
'-功能描述: 以二進(jìn)制數(shù)據(jù)格式加載圖片,并保存于數(shù)據(jù)庫,一般為當(dāng)前數(shù)據(jù)庫,
' 若窗體引用記錄集為外部ACCESS數(shù)據(jù)庫,同樣適用,調(diào)用函數(shù)SaveImage
'-輸入?yún)?shù)說明: 參數(shù)1: 必選 應(yīng)用顯示圖片的窗體,[對象變量]
' 參數(shù)2: 必選 窗體記錄集的主鍵名,[文本變量]
' 參數(shù)3: 必選 窗體某一記錄的主鍵值,一般為當(dāng)前記錄,[未定義變量]
' 參數(shù)4: 必選 圖片所在的字段名,[文本變量]
' 參數(shù)5: 必選 應(yīng)用顯示的圖片控件,[對象變量]
'-返回參數(shù)說明: 無
'-使用語法示例: Call LoadBImage(Me, "id", me.id, "圖片", me.image1)
'-參考:
'-使用注意: NewForm, NewImage 為對象,使用時不能加引號
' 因為要使用文本流對象,請使用前引用 Microsoft ActiveX Objects 2.5以上
'-兼容性: 2000,XP,2003 compatible
'-作者: duomu
'-更新日期: 2007-09-6
'===============================================================================
Dim Result As Integer
Dim FileName As String
On Error GoTo HandleErr
If Len(ImgPath) = 0 Then ImgPath = CurrentProject.Path
With Application.FileDialog(1)
.Title = "選擇照片"
.Filters.Clear
' .Filters.Add "所有文件", "*.*"
.Filters.Add "JPEG", "*.jpg"
' .Filters.Add "位圖文件", "*.bmp"
.FilterIndex = 1
.AllowMultiSelect = False
.InitialFileName = "" ' ImgPath
Result = .Show
If Result = -1 Then
FileName = Trim(.SelectedItems.Item(1))
Call SaveBImage(FileName, NewForm, NewID, NewIDValue, NewField, NewImage)
Else
LoadBImage = 1
Exit Function
End If
ImgPath = FileName
NewImage.Picture = FileName
End With
ExitHere:
Exit Function
HandleErr:
MsgBox err.Description
Resume ExitHere
End Function
Public Function SaveBImage(ByVal FileName As String, _
ByVal NewForm As Form, _
ByVal NewID As String, _
ByVal NewIDValue As Variant, _
ByVal NewField As String, _
ByVal NewImage As Image)
'===============================================================================
'-函數(shù)名稱: SaveBImage
'-功能描述: 以二進(jìn)制數(shù)據(jù)格式加載圖片,并保存于數(shù)據(jù)庫,一般為當(dāng)前數(shù)據(jù)庫,
' 若窗體引用記錄集為外部ACCESS數(shù)據(jù)庫,同樣適用,調(diào)用函數(shù)SaveImage
'-輸入?yún)?shù)說明: 參數(shù)1: 必選 圖片路徑,[文本變量]
' 參數(shù)2: 必選 應(yīng)用顯示圖片的窗體,[對象變量]
' 參數(shù)3: 必選 窗體記錄集的主鍵名,[文本變量]
' 參數(shù)4: 必選 窗體某一記錄的主鍵值,一般為當(dāng)前記錄,[未定義變量]
' 參數(shù)5: 必選 圖片所在的字段名,[文本變量]
' 參數(shù)6: 必選 應(yīng)用顯示的圖片控件,[對象變量]
'-返回參數(shù)說明: 無
'-使用語法示例: 略
'-參考: LoadBImage()過程
'-使用注意: NewForm, NewImage 為對象,使用時不能加引號
' 因為要使用文本流對象,請使用前引用 Microsoft ActiveX Objects 2.5以上
'-兼容性: 2000,XP,2003 compatible
'-作者: duomu
'-更新日期: 2007-09-6
'===============================================================================
Dim ObjRst As DAO.Recordset
Dim ObjStream As ADODB.Stream
On Error GoTo HandleErr
Set ObjRst = NewForm.Recordset
Set ObjStream = New ADODB.Stream
If Not IsNull(FileName) Then
With ObjStream
.Type = adTypeBinary
.Open
.LoadFromFile FileName
End With
End If
If ObjRst.Fields(NewID).Type = dbText Then
ObjRst.FindFirst "[" & NewID & "]" & " = '" & NewIDValue & "'"
Else
ObjRst.FindFirst "[" & NewID & "]" & " = " & NewIDValue
End If
If Not ObjRst.NoMatch Then
ObjRst.Edit
ObjRst(NewField) = ObjStream.Read
ObjRst.Update
End If
ObjStream.Close
Set ObjStream = Nothing
ExitHere:
Exit Function
HandleErr:
MsgBox err.Description
Resume ExitHere
End Function
Public Function DisplayBImage(ByVal NewForm As Form, _
ByVal NewID As String, _
ByVal NewIDValue As Variant, _
ByVal NewField As String, _
ByVal NewImage As Image)
'===============================================================================
'-函數(shù)名稱: DisplayBImage
'-功能描述: 顯示以二進(jìn)制數(shù)據(jù)格式保存在數(shù)據(jù)庫內(nèi)的圖片
'-輸入?yún)?shù)說明: 參數(shù)1: 必選 應(yīng)用顯示圖片的窗體,[對象變量]
' 參數(shù)2: 必選 窗體記錄集的主鍵名,[文本變量]
' 參數(shù)3: 必選 窗體某一記錄的主鍵值,一般為當(dāng)前記錄,[未定義變量]
' 參數(shù)4: 必選 圖片所在的字段名,[文本變量]
' 參數(shù)5: 必選 應(yīng)用顯示的圖片控件,[對象變量]
'-返回參數(shù)說明: 無
'-使用語法示例: Call DisplayBImage(Me, "id", me.id, "圖片", me.image1)
'-參考:
'-使用注意: NewForm, NewImage 為對象,使用時不能加引號
' 因為要使用文本流對象,請使用前引用 Microsoft ActiveX Objects 2.5以上
'-兼容性: 2000,XP,2003 compatible
'-作者: duomu
'-更新日期: 2007-09-6
'===============================================================================
Dim ObjRst As DAO.Recordset
Dim ObjStream As ADODB.Stream
On Error GoTo HandleErr
Set ObjRst = NewForm.Recordset
Set ObjStream = New ADODB.Stream
If IsNull(NewIDValue) Then NewImage.Picture = "": Exit Function
If ObjRst.Fields(NewID).Type = dbText Then
ObjRst.FindFirst "[" & NewID & "]" & " = '" & NewIDValue & "'"
Else
ObjRst.FindFirst "[" & NewID & "]" & " = " & NewIDValue
End If
If Not ObjRst.NoMatch Then
If Len(ObjRst(NewField)) > 0 Then
With ObjStream
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write ObjRst(NewField)
.SaveToFile CurrentProject.Path & "\image.jpg", adSaveCreateOverWrite
End With
Else
NewImage.Picture = ""
Exit Function
End If
End If
NewImage.Picture = CurrentProject.Path & "\image.jpg"
NewImage.SizeMode = acOLESizeZoom
ObjStream.Close
Kill CurrentProject.Path & "\image.jpg"
Set ObjStream = Nothing
ExitHere:
Exit Function
HandleErr:
MsgBox err.Description
Resume ExitHere
End Function
Public Function DeleteBImage(ByVal NewForm As Form, _
ByVal NewID As String, _
ByVal NewIDValue As Variant, _
ByVal NewField As String, _
ByVal NewImage As Image)
'===============================================================================
'-函數(shù)名稱: LoadImage
'-功能描述: 刪除以二進(jìn)制數(shù)據(jù)格式保存在數(shù)據(jù)庫內(nèi)的圖片
'-輸入?yún)?shù)說明: 參數(shù)1: 必選 應(yīng)用顯示圖片的窗體,[對象變量]
' 參數(shù)2: 必選 窗體記錄集的主鍵名,[文本變量]
' 參數(shù)3: 必選 窗體某一記錄的主鍵值,一般為當(dāng)前記錄,[未定義變量]
' 參數(shù)4: 必選 圖片所在的字段名,[文本變量]
' 參數(shù)5: 必選 應(yīng)用顯示的圖片控件,[對象變量]
'-返回參數(shù)說明: 無
'-使用語法示例: Call LoadImage(Me, "id", me.id, "圖片", me.image1)
'-參考:
'-使用注意: NewForm, NewImage 為對象,使用時不能加引號
' 因為要使用文本流對象,請使用前引用 Microsoft ActiveX Objects 2.5以上
'-兼容性: 2000,XP,2003 compatible
'-作者: duomu
'-更新日期: 2007-09-6
'===============================================================================
Dim ObjRst As DAO.Recordset
On Error GoTo HandleErr
Set ObjRst = NewForm.Recordset
If ObjRst.Fields(NewID).Type = dbText Then
ObjRst.FindFirst "[" & NewID & "]" & " = '" & NewIDValue & "'"
Else
ObjRst.FindFirst "[" & NewID & "]" & " = " & NewIDValue
End If
If Not ObjRst.NoMatch Then
ObjRst.Edit
ObjRst(NewField) = ""
ObjRst.Update
End If
NewImage.Picture = ""
ExitHere:
Exit Function
HandleErr:
MsgBox err.Description
Resume ExitHere
End Function
|
|