Vb保存一幅图到Access数据库.docx

上传人:b****6 文档编号:6507857 上传时间:2023-01-07 格式:DOCX 页数:14 大小:19.50KB
下载 相关 举报
Vb保存一幅图到Access数据库.docx_第1页
第1页 / 共14页
Vb保存一幅图到Access数据库.docx_第2页
第2页 / 共14页
Vb保存一幅图到Access数据库.docx_第3页
第3页 / 共14页
Vb保存一幅图到Access数据库.docx_第4页
第4页 / 共14页
Vb保存一幅图到Access数据库.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Vb保存一幅图到Access数据库.docx

《Vb保存一幅图到Access数据库.docx》由会员分享,可在线阅读,更多相关《Vb保存一幅图到Access数据库.docx(14页珍藏版)》请在冰豆网上搜索。

Vb保存一幅图到Access数据库.docx

Vb保存一幅图到Access数据库

Vb保存一幅图到Access数据库

在我们做的许多管理系统中,除了保存大量的文字信息以外,有时候也需要保存一定数量的图片。

例如:

一个人事管理系统,就需要对每个人的照片进行保存,以便可以方便的对每个人的信息进行处理。

    Office中的Access数据库除了保存文本,还可以保存图片,保存图片的数据类型就是"OLE对象":

它用来保存Excel电子表格、Word文档、图形、声音或其他二进制数据。

    我现在用一个例子介绍利用vb保存图片的方法,首先我们要介绍vb中处理二进制数据的语句:

Put、Get。

  Put、Get语句语法如下:

  Put[#]filenumber,[recnumber],varname

  Get[#]filenumber,[recnumber],varname

  Filenumber:

必需的。

任何有效的文件号

  Recnumber:

可选的。

Variant(Long)。

记录号(Random方式的文件)或字节数(Binary方式的文件),指明在此处开始写入

  Varname:

必需的。

包含要写入磁盘的数据的变量名

    说明:

文件中的第一个记录或字节位于位置1,第二个记录或字节位于位置2,依次类推。

若省略recnumber,则将上一个Get或Put语句之后的下一个记录或字节写入。

所有用于分界的逗号都必须罗列出来。

  

   现在我们来开始建一个工程,功能是保存一个文档,同时可以保存一幅图片。

   首先我们建一个表(表名为photo),字段如下:

  

  

  字段名类型标题

  class类别文档的分类

  photoOLE对象保存图片文件

  photo_ext文本图片的扩展名

  inputtime日期/时间文档输入的时间

  modifytime日期/时间文档的修改时间

  

  subject文本文本

  

  

  现在我们就可以创建finput窗口文件来保存图片。

  首先我们要连接我们的数据库,代码如下:

  DimcnstrAsString

  cnstr="Provider=Microsoft.Jet.OLEDB.4.0;PersistSecurityInfo=False;"_

  amp;"DataSource="amp;App.Pathamp;"\realize.mdb;JetOLEDB:

database"

  cn.Opencnstr

  cn.CursorLocation=adUseClient

  这段代码可以放在form_load事件中,当做一个多窗口的系统时,最好放到一个模块文件中,这样在其它窗口中都可以调用这个cn连接。

  下面是具体的窗口代码:

   VERSION5.00

   Object="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";"comdlg32.ocx"

   Object="{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0";"richtx32.ocx"

   BeginVB.Formfinput

   BorderStyle=0'None

   Caption="文档输入"

   ClientHeight=6240

   ClientLeft=0

   ClientTop=0

   ClientWidth=8955

   ControlBox=0'False

   LinkTopic="Form1"

   MDIChild=-1'True

   ScaleHeight=6240

   ScaleWidth=8955

   ShowInTaskbar=0'False

   BeginMSComDlg.CommonDialogCommonDialog1

   Left=8040

   Top=3840

   _ExtentX=847

   _ExtentY=847

   _Version=393216

   End

   BeginVB.ComboBoxCombo1

   Height=300

   Left=7080

   TabIndex=10

   Top=480

   Width=1335

  End

   BeginVB.CommandButtonCommand3

   Caption="关闭"

   Height=375

   Left=5280

   TabIndex=8

   Top=5640

   Width=1095

  End

   BeginVB.CommandButtonCommand2

   Caption="保存"

   Height=375

   Left=2520

   TabIndex=7

   Top=5640

   Width=1095

  End

   BeginVB.CommandButtonCommand1

   Caption="浏览"

   Height=255

   Left=8040

   TabIndex=6

   Top=4800

   Width=735

  End

   BeginVB.TextBoxText2

   Height=375

   Left=1200

   TabIndex=5

   Top=4800

   Width=6375

  End

   BeginRichTextLib.RichTextBoxRichTextBox1

   Height=3615

   Left=1200

   TabIndex=3

   Top=960

   Width=6375

   _ExtentX=11245

   _ExtentY=6376

   _Version=393217

   Enabled=-1'True

   TextRTF=$"finput.frx":

0000

  End

   BeginVB.TextBoxText1

   Height=375

   Left=1200

   TabIndex=2

   Top=443

   Width=4695

  End

   BeginVB.LabelLabel4

   Caption="类别"

   Height=255

   Left=6240

   TabIndex=9

   Top=480

   Width=615

  End

   BeginVB.LabelLabel3

   Caption="图片"

   Height=255

   Left=480

   TabIndex=4

   Top=4800

   Width=495

  End

   BeginVB.LabelLabel2

   Caption="内容"

   Height=255

   Left=480

   TabIndex=1

   Top=960

   Width=495

  End

   BeginVB.LabelLabel1

   Caption="标题"

   Height=255

   Left=480

   TabIndex=0

    Top=503

   Width=495

  End

  End

   AttributeVB_Name="finput"

   AttributeVB_GlobalNameSpace=False

   AttributeVB_Creatable=False

   AttributeVB_PredeclaredId=True

   AttributeVB_Exposed=False

   OptionExplicit

  

   PrivateSubCommand1_Click()

   CommonDialog1.DefaultExt=App.Path

   CommonDialog1.Filter="Pictures(*.bmp;*.jpg;*.gif) *.bmp;*.jpg;*.gif"'注意要加引号

   CommonDialog1.ShowOpen

   Text2.Text=CommonDialog1.FileName

  EndSub

  

   '保存文档的标题,和文档的内容,以及相应的图片

   PrivateSubCommand2_Click()

   '判断是否所写的文档是否已经存在数据库了,如果没有,则保存,否则

   '不能保存(利用一个"临时rs"查询标题)

   Dimsubject,sqlAsString

   Dimtemp_photoAsStream

   DimrsAsNewADODB.Recordset

   Dimrs1AsNewADODB.Recordset'定义rs1得到类别的id

   Dimclass_idAsInteger'定义得到类别的ID号

   subject=Trim(Text1.Text)'获得标题

   sql="select*frompaperwheresubject='"+subject+"'"

   '开始查询

   rs.Opensql,cn,adOpenDynamic,adLockPessimistic

   '判断标题是否存在

  

   Ifrs.EOFThen'文档不存在,开始保存

   DimtempdateAsDate'临时时间变量

   tempdate=Date

  

  

   rs.AddNew

  

   '得到类别的ID

   sql="selectcl_number,classfromclasswhereclass='"+Combo1.Text+"'"

   rs1.Opensql,cn,adOpenDynamic,adLockPessimistic

   rs("class")=rs1("cl_number")

   rs1.Close'关闭rs1

  

   rs("subject")=subject

   rs("content")=RichTextBox1.Text

   IfTrim(Text2.Text)<>""Then'假如有图片,开始得到图片文件

   Dimimage_data()AsByte'定义图片保存的变量

  

   OpenTrim(Text2.Text)ForBinaryAs#1

   ReDimimage_data(LOF

(1)-1)

   Get#1,,image_data()

   rs("photo").AppendChunkimage_data()

   EndIf

  

   rs("inputtime")=tempdate

   rs("modifytime")=tempdate

   rs.Update'可能出现保存不成功的现象,所以要考虑可能会出现错误

   MsgBox("保存成功!

")'保存成功

   Text1.Text=""

   RichTextBox1.Text=""

   Text2.Text=""'此处清空选择图片的框

  

   Else'存在,不能保存,显示错误信息

   MsgBox("文档已经存在,不能保存,请修改!

")

  EndIf

  

   rs.Close'关闭结果集

  EndSub

  

   PrivateSubCommand3_Click()

   UnloadMe

   EndSub

  

   PrivateSubForm_Load()

   Me.Left=0

   Me.Top=0

   fmain.Width=Me.Width+340

   fmain.Height=Me.Height+1550

   '显示文档的类别

   DimrsAsNewADODB.Recordset

   DimsqlAsString

   sql="select*fromclass"

   rs.Opensql,cn,1,1

   DoWhileNotrs.EOF'类别不空,则添加进去,对应类别的number为索引

   Combo1.AddItemrs("class")

   rs.MoveNext

  Loop

   Ifrs.RecordCount<>0Then'只有查询结果集不为空时,才能设定显示第一项,利用纪录总数不为0判定

   Combo1.ListIndex=0'不能用notrs.eof判定,因为现在cursor已经到了最后

  EndIf

   rs.Close

  EndSub

  当然,在上面这段代码中,还用到了另一个表(表名为class),字段如下:

  

  

  

  字段名类型意义

  class文本文档类别的名称

  cl_number数字类别的编号

  

  上面的代码可以较好的保存我们的文档和图片,我们还需要显示我们的图片和文档,现在我们还要显示我们的图片,我做了一个显示窗口(fshow),现在我假设数据库中有一条记录,subject为"ipx协议简介",里面有一个图片(ipx体系结构),窗口代码如下:

  VERSION5.00

   Object="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0";"mscomctl.ocx"

   Object="{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0";"richtx32.ocx"

   BeginVB.Formfshow

   BorderStyle=0'None

   Caption="显示图片"

   ClientHeight=7125

   ClientLeft=0

   ClientTop=0

   ClientWidth=10275

   LinkTopic="Form1"

   MDIChild=-1'True

   ScaleHeight=7125

   ScaleWidth=10275

   ShowInTaskbar=0'False

   BeginVB.FrameFrame2

   Height=6615

   Left=2880

   TabIndex=1

   Top=240

   Width=7335

   BeginVB.CommandButtonCommand1

   Caption="关闭"

   Height=375

   Left=5880

   TabIndex=5

   Top=5880

   Width=1215

  End

   BeginRichTextLib.RichTextBoxRichTextBox1

   Height=4095

   Left=120

   TabIndex=4

   Top=1200

   Width=6975

   _ExtentX=12303

   _ExtentY=7223

   _Version=393217

   TextRTF=$"fshow.frx":

0000

  End

   BeginVB.ImageImage1

   Height=855

   Left=120

   Stretch=-1'True

   Top=5640

   Width=1095

  End

   BeginVB.LineLine4

   X1=5520

   X2=5520

   Y1=5520

   Y2=6600

  End

   BeginVB.LineLine3

   X1=0

   X2=7320

   Y1=5520 

   Y2=5520

  End

   BeginVB.LineLine2

   X1=0

   X2=7320

   Y1=960

   Y2=960

  End

   BeginVB.LabelLabel1

   BackColor=amp;H80000009amp;

   Height=615

   Left=120

   TabIndex=3

   Top=240

   Width=7095

  End

  End

   BeginVB.FrameFrame1

   Height=6735

   Left=120

   TabIndex=0

   Top=240

   Width=2535

   BeginMSComctlLib.TreeViewTreeView1

   Height=6375

   Left=120

   TabIndex=2

   Top=240

   Width=2295

   _ExtentX=4048

   _ExtentY=11245

   _Version=393217

   PathSeparator=""

   Style=7

   Appearance=1

  End

  End

   BeginVB.LineLine1

   BorderColor=amp;H80000001amp;

   X1=2760

   X2=2760

   Y1=120

   Y2=6960

  End

  End

   AttributeVB_Name="fshow"

   AttributeVB_GlobalNameSpace=False

   AttributeVB_Creatable=False

   AttributeVB_PredeclaredId=True

   AttributeVB_Exposed=False

   OptionExplicit

  

  PrivateSubCommand1_Click()

   UnloadMe

  EndSub

  

   PrivateSubForm_Load()

   Dimtemptop,templeftAsLong

   Me.Left=0

   Me.Top=0

   fmain.Width=Me.Width+340

   fmain.Height=Me.Height+1550

   fmain.Top=(Screen.Height-fmain.Height)/2

   fmain.Left=(Screen.Width-fmain.Width)/2

  

  '显示结果

   DimrsAsNewADODB.Recordset

   Dimimage_filenameAsString

   Dimtemp_image()AsByte

   DimsqlAsString

   sql="select*frompaperwheresubject='ipx协议简介'"

   rs.Opensql,cn,adOpenDynamic,adLockReadOnly

   Label1.Caption=rs("inputtime")

   temp_image()=rs("photo")

   image_filename=App.Path+"\temp."+rs("photo_ext")

   rs.Close

   '建立临时文件

   Openimage_filenameForBinaryAs#1

   Put#1,,temp_image()

   Close#1

   Image1.Picture=LoadPicture(image_filename)

   '删除临时文件

   Killimage_filename

  EndSub

    上面代码只能显示一条记录,而且需要先赋条件,显示图片用的是先建一个临时文件,然后把二进制数据读到这个文件里,同时要赋给正确的扩展名,然后可以显示图片,注意,要及时删除临时文件。

  总结:

这种方法只是保存图片的其中一种,还有其它保存到数据库的方法,希望大家不断的交流其它的保存图片的方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1