WEB开发网
开发学院WEB开发综合 在VB中存取数据库中的图片 阅读

在VB中存取数据库中的图片

 2006-02-27 11:46:00 来源:WEB开发网   
核心提示:一、数据库的设计数据库可以采用微软的access97或者SQLServer来进行,首先新建一张表,在VB中存取数据库中的图片,取名为Table,添加三个字段,给第三个字段(image)赋值ADORst.UpdateEndSub----------------------PrivateSubUpdate_Click()′
  一、数据库的设计

数据库可以采用微软的access97或者SQLServer来进行,首先新建一张表,取名为Table,添加三个字段,分别是:姓名Char型(SQLServer中)文本型(Access中);编号Char型(SQLServer中)文本型(Access中);照片image型(SQLServer中)OLE对象(Access中),设计好后存盘。为了可以进行远程调用,我们采用ODBC的方法进行,双击打开控制面板里的ODBC数据源,界面如图1所示:
  点“系统DSN”选项卡,按“添加”按钮选择对应的数据源驱动程序Access的*.mdb或者SQLServer,依照添加向导加添加数据源,下面就可以开始程序的编写了。

  二、程序的编写

  运行VB,新建一个工程。本程序采用ADO控件和动态链接库访问数据库,需要加入ADO的运行库,单击“工程\引用”菜单,出现引用对话框,选择MicrosoftActiveXDataObjects2.0Library并确定。
  添加一个Form,四个Label控件,两个TextBox控件,一个PictureBox控件,一个ADODC控件,三个CommandButton控件,一个CommandDialog控件,如果ADODC和CommandDialog控件没有出现在工具框上,请单击菜单“工程\部件”。点“控件”选项卡,在其中选中MicrosoftADODataControl6.0(OLEDB)和MicrosoftCommonDialogControl6.0两项按“确定”按钮。
  下面是以上各个控件的一些属性:
  Form1.MaxButton=False
  Label1.Caption=姓名:
  Label2.Caption=编号:
  Label3.Name=ResName
  Label3.BackColor=&H80000009&
  Label3.BorderStyle=1-FixedSingle
  Label3.DataField=姓名
  Label3.DataSource=AdoCtr
  Label4.Name=ResNumb
  Label4.BackColor=&H80000009&
  Label4.BorderStyle=1-FixedSingle
  Label4.DataField=编号
  Label4.DataSource=AdoCtr
  Text1.Name=Names
  Text2.Name=Numb
  CommonDialog1.Name=CDlg
  Adodc1.Name=AdoCtr
  CommonButton1.Name=PReView
  CommonButton1.Caption=预览
  CommonButton2.Name=Save
  CommonButton2.Caption=保存
  CommonButton3.Name=Update
  CommonButton3.Caption=更新
  PictureBox1.Name=PicBox
  PictureBox1.AutoSize=False
  PictureBox1.AutoRedraw=False
  PictureBox1.DataField=照片
  PictureBox1.DataSource=AdpCtr
  下面是程序代码:
  ′此工程需有MicrosoftActiveXDataObject2.1Library(msado15.dll)
  DimConstrAsString′ODBC路径
  DimFileNameAsString′图片文件名
  ConstBLOCKSIZE=4096′每次读写块的大小
  DimADOConAsNewADODB.Connection′ADODBConnection对象
  DimADORstAsNewADODB.Recordset′ADODBRecordset对象
  DimADOFldAsADODB.Field′ADODBField对象
------------------------
  PrivateSubSaveToDB(ByRefFldAsADODB.Field,DiskFileAsString)
  DimbyteData()AsByte′定义数据块数组
  DimNumBlocksAsLong′定义数据块个数
  DimFileLengthAsLong′标识文件长度
  DimLeftOverAsLong′定义剩余字节长度
  DimSourceFileAsLong′定义自由文件号
  DimiAsLong′定义循环变量
  SourceFile=FreeFile′提供一个尚未使用的文件号
  OpenDiskFileForBinaryAccessReadAsSourceFile′打开文件
  FileLength=LOF(SourceFile)′得到文件长度
  IfFileLength=0Then′判断文件是否存在
  CloseSourceFile
  MsgBoxDiskFile&″无内容或不存在!″
  Else
  NumBlocks=FileLength\BLOCKSIZE′得到数据块的个数
  LeftOver=FileLengthModBLOCKSIZE′得到剩余字节数
  Fld.Value=Null
  ReDimbyteData(BLOCKSIZE)′重新定义数据块的大小
  Fori=1ToNumBlocks
  GetSourceFile,,byteData()′读到内存块中
  Fld.AppendChunkbyteData()′写入FLD
  Nexti
  ReDimbyteData(LeftOver)′重新定义数据块的大小
  GetSourceFile,,byteData()′读到内存块中
  Fld.AppendChunkbyteData()′写入FLD
  CloseSourceFile′关闭源文件
  EndIf
  EndSub
  ----------------------
  PrivateSubForm_Load()
  Constr=″DSN=image″′定义ODBC连接
  ADOCon.OpenConstr′创建一个连接
  ADORst.Open″table″,ADOCon,adOpenDynamic,adLockOptimistic
  ′打开一个ADO动态集表名为table
  SetAdoCtr.Recordset=ADORst′将动态集赋给ADO控件
  EndSub
  ----------------------
  PrivateSubForm_Unload(CancelAsInteger)
  ′记得关闭打开的数据集,释放资源
  ADORst.Close
  ADOCon.Close
  SetADORst=Nothing
  SetADOCon=Nothing
  EndSub
  ----------------------
  PrivateSubPreView_Click()
  ′显示打开文件的公用对话框,选择需要加入数据库的图片
  CDlg.Filter=″位图(*.bmp)|*.bmp″
  CDlg.ShowOpen
  FileName=CDlg.FileName
  PicBox.Picture=LoadPicture(FileName)′预览图片
  EndSub
  ----------------------
  PrivateSubSave_Click()
  ADORst.AddNew′新增纪录
  ADORst(″姓名″).Value=Names.Text′给动态集的第一个字段赋值
  ADORst(″编号″).Value=Numb.Text′给动态集的第二个字段赋值
  SetADOFld=ADORst(″照片″)′给ADODB.Field对象赋值
  CallSaveToDB(ADOFld,FileName)′调用子程序,给第三个字段(image)赋值
  ADORst.Update
  EndSub
  ----------------------
  PrivateSubUpdate_Click()
  ′重新打开纪录集,刷新纪录
  ADORst.Close
  ADOCon.Close
  SetADORst=Nothing
  SetADOCon=Nothing
  ADOCon.OpenConstr
  ADORst.Open″table″,ADOCon,adOpenDynamic,adLockOptimistic
  SetAdoCtr.Recordset=ADORst
  EndSub
  程序运行后的结果如图2。
  本程序在VB6.0/Windows98/WindowsNT下编译通过。->

Tags:VB 存取 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接