'在窗体(Form)中加入如下控件: '1个PictureBox控件 用来显示图像 Name:Picture1 '1个CommonDialog控件 用来选择要保存的图像 Name:CommonDialog1 '1个Label控件 用来显示数据库中图片的相关信息 '6个CommandButton控件:1.Name:cmdSelect Caption:Select 选择图片 ' 2.Name:cmdSave Caption:Save 保存图片 ' 3.Name:cmdDel Caption:Del 删除图片 ' 4.Name:cmdShow Caption:Show 顺序显示图片 ' 5.Name:cmdClose Caption:Close 清除图像的图片 ' 6.Name:cmdEnd Caption:End 结束程序 '示例代码如下:Option Explicit Dim Conn As ADODB.Connection Dim rs As ADODB.Recordset Dim StmPic As ADODB.Stream Dim StrPicTemp As String Dim BolPic As Boolean Dim i As Long'图片显示过程 Sub ShowPicture() If Not IsNull(rs.Fields(1)) Then Set StmPic = New ADODB.Stream StrPicTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片 With StmPic .Type = adTypeBinary .Open '打开 .Write rs.Fields(1) '写入数据库中的二进制文件 .SaveToFile StrPicTemp, adSaveCreateOverWrite .Close End With Picture1.Picture = LoadPicture(StrPicTemp) '载入临时文件中的图像 Else Picture1.Picture = LoadPicture() End If End Sub'窗体载入时连接数据库,打开数据集,初始化窗体 Private Sub Form_Load() Set Conn = New ADODB.Connection Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db1.mdb;" & _ "Persist Security Info=False" Set rs = New ADODB.Recordset rs.Open "select * from picture_info", Conn, _ adOpenKeyset, adLockOptimistic If rs.RecordCount > 0 Then rs.MoveLast '移到最后一张图像,保证按下浏览按钮时,从第一张图像开始显示 i = rs.RecordCount Label1.Caption = "共 " & rs.RecordCount & " 张图片" Else Label1.Caption = "数据库中没有图片" End If BolPic = False End Sub'选择图像 Private Sub cmdSelect_Click() Dim FileName As String BolPic = False Label1.Caption = "共 " & rs.RecordCount & _ " 张图片,你想添加的是第 " & _ rs.RecordCount + 1 & " 张" Picture1.Picture = LoadPicture() CommonDialog1.Filter = "图像文件(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif" '筛选图像文件 CommonDialog1.FilterIndex = 2 CommonDialog1.ShowOpen If CommonDialog1.FileName = "" Then '按下取消按钮恢复原来显示状态 If StrPicTemp <> "" Then Picture1.Picture = LoadPicture(StrPicTemp) Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张" Exit Sub Else Label1.Caption = "共 " & rs.RecordCount & " 张图片" Exit Sub End If End If FileName = CommonDialog1.FileName Picture1.Picture = LoadPicture(FileName) '预览图片 End Sub'保存所选择的图像 Private Sub cmdSave_Click() BolPic = False If CommonDialog1.FileName = "" Then MsgBox "你没选择图片,保存什么?没图像的话,快去照相,保存自己吧!", _ vbOKOnly + vbExclamation, "自娱咋乐?" Exit Sub End If If CommonDialog1.FileName <> "" Then Set StmPic = New ADODB.Stream StmPic.Type = adTypeBinary StmPic.Open StmPic.LoadFromFile (CommonDialog1.FileName) rs.AddNew rs.Fields(1).Value = StmPic.Read rs.Update StmPic.Close Call ShowPicture CommonDialog1.FileName = "" '清空是防止重复按Save鍵,造成重复保存图像 i = rs.RecordCount Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张" End If End Sub'删除当前显示的图像 Private Sub cmdDel_Click() Dim X As String BolPic = False If rs.RecordCount = 0 Then MsgBox "数据库中没有图片,你想删除什么?笑话!", _ vbOKOnly + vbExclamation, "你真搞笑" Exit Sub End If If StrPicTemp = "" Then MsgBox "你没选择图片,你想删除什么啊?", _ vbOKOnly + vbExclamation, "你真搞笑" Exit Sub End If Picture1.Picture = LoadPicture(StrPicTemp) X = MsgBox(" 图片删除后不能恢复! 确认删除第 " & _ i & " 张图片吗? ", vbOKCancel + vbExclamation, "警告") If X = vbCancel Then Exit Sub End If rs.Delete adAffectCurrent rs.Update StrPicTemp = "" '清空该图像的临时文件 CommonDialog1.FileName = "" Picture1.Picture = LoadPicture() '清空图片框中的图片 If rs.RecordCount > 0 Then If Not rs.EOF Then rs.MoveNext End If If rs.EOF Then rs.MoveFirst i = 1 End If Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张" Call ShowPicture Else Label1.Caption = "数据库中没有图片" End If End Sub'顺序读取显示数据库中的图像 Private Sub cmdShow_Click() If rs.RecordCount = 0 Then MsgBox "数据库中没有图片,看什么啊?发呆啊?", _ vbOKOnly + vbExclamation, "快快添加" Exit Sub End If If rs.RecordCount > 0 Then If BolPic = False Then If Not rs.EOF Then rs.MoveNext i = i + 1 End If If rs.EOF Then rs.MoveFirst i = 1 End If ElseIf BolPic = True Then BolPic = False End If Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张" CommonDialog1.FileName = "" Call ShowPicture End If End Sub'清除当前显示的图像 Private Sub cmdClose_Click() CommonDialog1.FileName = "" If StrPicTemp <> "" And BolPic = False Then Picture1.Picture = LoadPicture() '清空图片框中的图片 BolPic = True Exit Sub End If If StrPicTemp <> "" And BolPic = True Then MsgBox "第 " & i & " 张图像已被你清除了呀!,还清除啥呀?!!真笨!!!", _ vbOKOnly + vbExclamation, "来来去去一场空" BolPic = True End If If StrPicTemp = "" Then MsgBox "原本没有显示图像,清除啥呀?好笨!", vbOKOnly + vbExclamation, _ "来来去去一场空" BolPic = False Exit Sub End If End Sub'退出程序 Private Sub cmdEnd_Click() Unload Me End Sub'卸载窗体关闭连接和数据集、清空临时文件、清空图片控件中的图片 Private Sub Form_Unload(Cancel As Integer) Picture1.Picture = LoadPicture() CommonDialog1.FileName = "" StrPicTemp = "" rs.Close Conn.Close End Sub
'表中有2个字段:1.ID Type:自动编号
' 2.Picture Type:OLE对象'运行VB,选择“工程\引用”命令,
'引用“Microsoft AetiveX Date 2.x Library”
'在窗体(Form)中加入如下控件:
'1个PictureBox控件 用来显示图像 Name:Picture1
'1个CommonDialog控件 用来选择要保存的图像 Name:CommonDialog1
'1个Label控件 用来显示数据库中图片的相关信息
'6个CommandButton控件:1.Name:cmdSelect Caption:Select 选择图片
' 2.Name:cmdSave Caption:Save 保存图片
' 3.Name:cmdDel Caption:Del 删除图片
' 4.Name:cmdShow Caption:Show 顺序显示图片
' 5.Name:cmdClose Caption:Close 清除图像的图片
' 6.Name:cmdEnd Caption:End 结束程序
'示例代码如下:Option Explicit
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim StmPic As ADODB.Stream
Dim StrPicTemp As String
Dim BolPic As Boolean
Dim i As Long'图片显示过程
Sub ShowPicture()
If Not IsNull(rs.Fields(1)) Then
Set StmPic = New ADODB.Stream
StrPicTemp = "c:\temp.tmp" '临时文件,用来保存读出的图片
With StmPic
.Type = adTypeBinary
.Open '打开
.Write rs.Fields(1) '写入数据库中的二进制文件
.SaveToFile StrPicTemp, adSaveCreateOverWrite
.Close
End With
Picture1.Picture = LoadPicture(StrPicTemp) '载入临时文件中的图像
Else
Picture1.Picture = LoadPicture()
End If
End Sub'窗体载入时连接数据库,打开数据集,初始化窗体
Private Sub Form_Load()
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\db1.mdb;" & _
"Persist Security Info=False"
Set rs = New ADODB.Recordset
rs.Open "select * from picture_info", Conn, _
adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
rs.MoveLast '移到最后一张图像,保证按下浏览按钮时,从第一张图像开始显示
i = rs.RecordCount
Label1.Caption = "共 " & rs.RecordCount & " 张图片"
Else
Label1.Caption = "数据库中没有图片"
End If
BolPic = False
End Sub'选择图像
Private Sub cmdSelect_Click()
Dim FileName As String
BolPic = False
Label1.Caption = "共 " & rs.RecordCount & _
" 张图片,你想添加的是第 " & _
rs.RecordCount + 1 & " 张"
Picture1.Picture = LoadPicture()
CommonDialog1.Filter = "图像文件(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif" '筛选图像文件
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then '按下取消按钮恢复原来显示状态
If StrPicTemp <> "" Then
Picture1.Picture = LoadPicture(StrPicTemp)
Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张"
Exit Sub
Else
Label1.Caption = "共 " & rs.RecordCount & " 张图片"
Exit Sub
End If
End If
FileName = CommonDialog1.FileName
Picture1.Picture = LoadPicture(FileName) '预览图片
End Sub'保存所选择的图像
Private Sub cmdSave_Click()
BolPic = False
If CommonDialog1.FileName = "" Then
MsgBox "你没选择图片,保存什么?没图像的话,快去照相,保存自己吧!", _
vbOKOnly + vbExclamation, "自娱咋乐?"
Exit Sub
End If
If CommonDialog1.FileName <> "" Then
Set StmPic = New ADODB.Stream
StmPic.Type = adTypeBinary
StmPic.Open
StmPic.LoadFromFile (CommonDialog1.FileName)
rs.AddNew
rs.Fields(1).Value = StmPic.Read
rs.Update
StmPic.Close
Call ShowPicture
CommonDialog1.FileName = "" '清空是防止重复按Save鍵,造成重复保存图像
i = rs.RecordCount
Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张"
End If
End Sub'删除当前显示的图像
Private Sub cmdDel_Click()
Dim X As String
BolPic = False
If rs.RecordCount = 0 Then
MsgBox "数据库中没有图片,你想删除什么?笑话!", _
vbOKOnly + vbExclamation, "你真搞笑"
Exit Sub
End If
If StrPicTemp = "" Then
MsgBox "你没选择图片,你想删除什么啊?", _
vbOKOnly + vbExclamation, "你真搞笑"
Exit Sub
End If
Picture1.Picture = LoadPicture(StrPicTemp)
X = MsgBox(" 图片删除后不能恢复! 确认删除第 " & _
i & " 张图片吗? ", vbOKCancel + vbExclamation, "警告")
If X = vbCancel Then
Exit Sub
End If
rs.Delete adAffectCurrent
rs.Update
StrPicTemp = "" '清空该图像的临时文件
CommonDialog1.FileName = ""
Picture1.Picture = LoadPicture() '清空图片框中的图片
If rs.RecordCount > 0 Then
If Not rs.EOF Then
rs.MoveNext
End If
If rs.EOF Then
rs.MoveFirst
i = 1
End If
Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张"
Call ShowPicture
Else
Label1.Caption = "数据库中没有图片"
End If
End Sub'顺序读取显示数据库中的图像
Private Sub cmdShow_Click()
If rs.RecordCount = 0 Then
MsgBox "数据库中没有图片,看什么啊?发呆啊?", _
vbOKOnly + vbExclamation, "快快添加"
Exit Sub
End If
If rs.RecordCount > 0 Then
If BolPic = False Then
If Not rs.EOF Then
rs.MoveNext
i = i + 1
End If
If rs.EOF Then
rs.MoveFirst
i = 1
End If
ElseIf BolPic = True Then
BolPic = False
End If
Label1.Caption = "共 " & rs.RecordCount & " 张图片,这是第 " & i & " 张"
CommonDialog1.FileName = ""
Call ShowPicture
End If
End Sub'清除当前显示的图像
Private Sub cmdClose_Click()
CommonDialog1.FileName = ""
If StrPicTemp <> "" And BolPic = False Then
Picture1.Picture = LoadPicture() '清空图片框中的图片
BolPic = True
Exit Sub
End If
If StrPicTemp <> "" And BolPic = True Then
MsgBox "第 " & i & " 张图像已被你清除了呀!,还清除啥呀?!!真笨!!!", _
vbOKOnly + vbExclamation, "来来去去一场空"
BolPic = True
End If
If StrPicTemp = "" Then
MsgBox "原本没有显示图像,清除啥呀?好笨!", vbOKOnly + vbExclamation, _
"来来去去一场空"
BolPic = False
Exit Sub
End If
End Sub'退出程序
Private Sub cmdEnd_Click()
Unload Me
End Sub'卸载窗体关闭连接和数据集、清空临时文件、清空图片控件中的图片
Private Sub Form_Unload(Cancel As Integer)
Picture1.Picture = LoadPicture()
CommonDialog1.FileName = ""
StrPicTemp = ""
rs.Close
Conn.Close
End Sub
http://office.9zp.com/dispbbs.asp?boardID=7&ID=2078