利用Vb保存一幅图到Access数据库_第1页
利用Vb保存一幅图到Access数据库_第2页
利用Vb保存一幅图到Access数据库_第3页
利用Vb保存一幅图到Access数据库_第4页
利用Vb保存一幅图到Access数据库_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-在我们做的许多管理系统中,除了保存大量的文字信息以外,有时候也需要保存一定数量的图片。例如:一个人事管理系统,就需要对每个人的照片进展保存,以便可以方便的对每个人的信息进展处理。 Office中的Access数据库除了保存文本,还可以保存图片,保存图片的数据类型就是"OLE对象":它用来保存 E*cel 电子表格、 Word 文档、图形、声音或其他二进制数据。 我现在用一个例子介绍利用vb保存图片的方法,首先我们要介绍vb中处理二进制数据的语句:Put、Get。 Put、Get语句语法如下: Put * filenumber,reumber,varname Get * f

2、ilenumber,reumber,varname Filenumber :必需的。任何有效的文件号 Reumber :可选的。Variant(Long)。记录号Random方式的文件或字节数Binary方式的文件,指明在此处开场写入 Varname :必需的。包含要写入磁盘的数据的变量名 说明:文件中的第一个记录或字节位于位置1,第二个记录或字节位于位置2,依次类推。假设省略reumber,则将上一个Get或Put语句之后的下一个记录或字节写入。所有用于分界的逗号都必须罗列出来。 现在我们来开场建一个工程,功能是保存一个文档,同时可以保存一幅图片。 首先我们建一个表表名为photo,字段如下

3、: 字段名 类型 标题 class 类别 文档的分类 photo OLE对象 保存图片文件 photo_e*t 文本 图片的扩展名 inputtime 日期/时间 文档输入的时间 modifytime 日期/时间 文档的修改时间 subject 文本 文本 现在我们就可以创立finput窗口文件来保存图片。 首先我们要连接我们的数据库,代码如下: Dimstr As String str = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" _ amp; "Data Source=&qu

4、ot; amp; App.Path amp; "realize.mdb;Jet OLEDB:database " .Openstr .CursorLocation = adUseClient 这段代码可以放在form_load事件中,当做一个多窗口的系统时,最好放到一个模块文件中,这样在其它窗口中都可以调用这个连接。 下面是具体的窗口代码: VERSION 5.00 Object= "F9043C88-F6F2-101A-A3C9-08002B2F49FB*1.2*0" "dlg32.oc*" Object= "3B7C88

5、63-D78F-101B-B9B5-04021C009402*1.2*0" "richt*32.oc*" Begin VB.Form finput BorderStyle = 0 'None Caption = "文档输入" ClientHeight = 6240 ClientLeft = 0 ClientTop = 0 ClientWidth = 8955 ControlBo* = 0 'False LinkTopic = "Form1" MDIChild = -1 'True ScaleHeigh

6、t = 6240 ScaleWidth = 8955 ShowInTaskbar = 0 'False Begin MSDlg.monDialog monDialog1 Left = 8040 Top = 3840 _E*tent* = 847 _E*tentY = 847 _Version = 393216 End Begin VB.boBo* bo1 Height = 300 Left = 7080 TabInde* = 10 Top = 480 Width = 1335 End Begin VB.mandButton mand3 Caption = "关闭"

7、Height = 375Left = 5280 TabInde* = 8 Top = 5640 Width = 1095 End Begin VB.mandButton mand2 Caption = "保存" Height = 375 Left = 2520 TabInde* = 7 Top = 5640 Width = 1095 End Begin VB.mandButton mand1 Caption = "浏览" Height = 255 Left = 8040 TabInde* = 6 Top = 4800 Width = 735 End Be

8、gin VB.Te*tBo* Te*t2 Height = 375 Left = 1200 TabInde* = 5 Top = 4800 Width = 6375 End Begin RichTe*tLib.RichTe*tBo* RichTe*tBo*1 Height = 3615 Left = 1200 TabInde* = 3 Top = 960 Width = 6375 _E*tent* = 11245 _E*tentY = 6376 _Version = 393217 Enabled = -1 'True Te*tRTF = $"finput.fr*":

9、0000 End Begin VB.Te*tBo* Te*t1 Height = 375 Left = 1200 TabInde* = 2 Top = 443 Width = 4695 End Begin VB.Label Label4 Caption = "类别" Height = 255 Left = 6240 TabInde* = 9 Top = 480 Width = 615End Begin VB.Label Label3 Caption = "图片" Height = 255 Left = 480 TabInde* = 4 Top = 480

10、0 Width = 495 End Begin VB.Label Label2 Caption = "容" Height = 255 Left = 480 TabInde* = 1 Top = 960 Width = 495 End Begin VB.Label Label1 Caption = "标题" Height = 255 Left = 480 TabInde* = 0 Top = 503 Width = 495 End End Attribute VB_Name = "finput" Attribute VB_GlobalN

11、ameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_E*posed = False Option E*plicit Private Sub mand1_Click() monDialog1.DefaultE*t = App.Path monDialog1.Filter = "Pictures (*.bmp;*.jpg;*.gif)*.bmp;*.jpg;*.gif" '注意要加引号 monDialog1.ShowOpen Te*t

12、2.Te*t = monDialog1.FileName End Sub '保存文档的标题,和文档的容,以及相应的图片 Private Sub mand2_Click() '判断是否所写的文档是否已经存在数据库了,如果没有,则保存,否则 '不能保存利用一个"临时rs"查询标题 Dim subject, sql As String Dim temp_photo As Stream Dim rs As New ADODB.Recordset Dim rs1 As New ADODB.Recordset '定义rs1得到类别的id Dim clas

13、s_id As Integer '定义得到类别的ID号 subject = Trim(Te*t1.Te*t) '获得标题 sql = "select * from paper where subject='" + subject + "'" '开场查询 rs.Open sql, adOpenDynamic, adLockPessimistic '判断标题是否存在 If rs.EOF Then '文档不存在,开场保存 Dim tempdate As Date '临时时间变量 tempdate

14、= Date rs.AddNew '得到类别的ID sql = "select cl_number,class from class where class='" + bo1.Te*t + "'" rs1.Open sql, adOpenDynamic, adLockPessimistic rs("class") = rs1("cl_number") rs1.Close '关闭rs1 rs("subject") = subject rs("content

15、") = RichTe*tBo*1.Te*t If Trim(Te*t2.Te*t) <> " Then '假设有图片,开场得到图片文件 Dim image_data() As Byte '定义图片保存的变量 Open Trim(Te*t2.Te*t) For Binary As *1 ReDim image_data(LOF(1) - 1) Get *1, , image_data() rs("photo").AppendChunk image_data() End If rs("inputtime")

16、= tempdate rs("modifytime") = tempdate rs.Update '可能出现保存不成功的现象,所以要考虑可能会出现错误 MsgBo* ("保存成功!") '保存成功 Te*t1.Te*t = " RichTe*tBo*1.Te*t = " Te*t2.Te*t = " '此处清空选择图片的框 Else '存在,不能保存,显示错误信息 MsgBo* ("文档已经存在,不能保存,请修改!") End If rs.Close '关闭结果集

17、End Sub Private Sub mand3_Click() Unload Me End Sub Private Sub Form_Load() Me.Left = 0 Me.Top = 0 fmain.Width = Me.Width + 340 fmain.Height = Me.Height + 1550 '显示文档的类别 Dim rs As New ADODB.Recordset Dim sql As String sql = "select * from class" rs.Open sql, 1, 1 Do While Not rs.EOF 

18、9;类别不空,则添加进去,对应类别的number为索引 bo1.AddItem rs("class") rs.MoveNe*t Loop If rs.RecordCount <> 0 Then '只有查询结果集不为空时,才能设定显示第一项,利用纪录总数不为0判定 bo1.ListInde* = 0 '不能用not rs.eof判定,因为现在cursor已经到了最后 End If rs.Close End Sub 当然,在上面这段代码中,还用到了另一个表(表名为class),字段如下: 字段名 类型 意义 class 文本 文档类别的名称 cl_n

19、umber 数字 类别的编号 上面的代码可以较好的保存我们的文档和图片,我们还需要显示我们的图片和文档,现在我们还要显示我们的图片,我做了一个显示窗口fshow,现在我假设数据库中有 一条记录,subject为"ip*协议简介",里面有一个图片ip*体系构造,窗口代码如下: VERSION 5.00 Object = "831FDD16-0C5C-11D2-A9FC-0000F8754DA1*2.0*0" "msctl.oc*" Object = "3B7C8863-D78F-101B-B9B5-04021C009402*1

20、.2*0" "richt*32.oc*" Begin VB.Form fshow BorderStyle = 0 'None Caption = "显示图片" ClientHeight = 7125 ClientLeft = 0 ClientTop = 0 ClientWidth = 10275 LinkTopic = "Form1" MDIChild = -1 'True ScaleHeight = 7125 ScaleWidth = 10275 ShowInTaskbar = 0 'False B

21、egin VB.Frame Frame2 Height = 6615 Left = 2880 TabInde* = 1 Top = 240 Width = 7335 Begin VB.mandButton mand1 Caption = "关闭" Height = 375 Left = 5880 TabInde* = 5 Top = 5880 Width = 1215 End Begin RichTe*tLib.RichTe*tBo* RichTe*tBo*1 Height = 4095 Left = 120 TabInde* = 4 Top = 1200 Width =

22、6975 _E*tent* = 12303 _E*tentY = 7223 _Version = 393217 Te*tRTF = $"fshow.fr*":0000 End Begin VB.Image Image1 Height = 855 Left = 120 Stretch = -1 'True Top = 5640 Width = 1095 End Begin VB.Line Line4 *1 = 5520 *2 = 5520 Y1 = 5520 Y2 = 6600 End Begin VB.Line Line3 *1 = 0 *2 = 7320 Y1 =

23、 5520 Y2 = 5520 End Begin VB.Line Line2 *1 = 0 *2 = 7320 Y1 = 960 Y2 = 960 End Begin VB.Label Label1 BackColor = amp;H80000009amp; Height = 615 Left = 120 TabInde* = 3 Top = 240 Width = 7095 End End Begin VB.Frame Frame1 Height = 6735 Left = 120 TabInde* = 0 Top = 240 Width = 2535 Begin MSctlLib.Tre

24、eView TreeView1 Height = 6375 Left = 120 TabInde* = 2 Top = 240 Width = 2295 _E*tent* = 4048 _E*tentY = 11245 _Version = 393217 PathSeparator = " Style = 7 Appearance = 1 End End Begin VB.Line Line1 BorderColor = amp;H80000001amp; *1 = 2760 *2 = 2760 Y1 = 120 Y2 = 6960 End End Attribute VB_Name

25、 = "fshow" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_E*posed = False Option E*plicit Private Sub mand1_Click() Unload Me End Sub Private Sub Form_Load() Dim temptop, templeft As Long Me.Left = 0 Me.Top = 0 fmain.Width = Me.Widt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论