|
一、数据库的设计 数据库可以采用微软的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下编译通过。->
|