程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB中存取數據庫中的圖片

在VB中存取數據庫中的圖片

編輯:VB綜合教程
  一、數據庫的設計

  數據庫可以采用微軟的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=FileLengthBLOCKSIZE′得到數據塊的個數
  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下編譯通過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved