vb mysql存图片_如何用vb向sql数据库存取照片 最好有事例 谢谢

展开全部

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

2001-07-05· ·史美康 ··vbeden.com

一、 数据库的设计

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

二、 程序的编写

运行VB,新建一个工程。本程序采用ADO控件和动态链接库访问数据库,需要加入ADO的运行库,单击“工程\引用”菜单,出现引用对话框,选择Microsoft ActiveX Data Objects2.0 Library并确定。

添加一个Form,四个Label控件,两个TextBox控件,一个PictureBox控件,一个ADODC控件,三个CommandButton控件,一个CommandDialog控件,如果ADODC和CommandDialog控件没有出现在工具框上,请单击菜单“工程\部件”。点“控件”选项卡,在其中选中Microsoft ADO Data Control 6.0(OLEDB)和Microsoft Common Dialog Control 6.0两项按“确定”按钮。

下面是以上各个控件的一些属性:

Form1.MaxButton=False

Label1.Caption=姓名:

Label2.Caption=编号:

Label3.Name= ResName

Label3.BackColor= &H80000009&

Label3.BorderStyle=1-Fixed Single

Label3.DataField=姓名

Label3.DataSource= AdoCtr

Label4.Name= ResNumb

Label4.BackColor= &H80000009&

Label4.BorderStyle=1-Fixed Single

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

下面是程序代码:

′此工程需有Microsoft ActiveX Data Object 2.1 Library(msado15.dll)

Dim Constr As String ′ODBC路径

Dim FileName As String ′图片文件名

Const BLOCKSIZE = 4096 ′每次读写块的大小

Dim ADOCon As New ADODB.Connection ′ADODB Connection对象

Dim ADORst As New ADODB.Recordset ′ADODB Recordset 对象

Dim ADOFld As ADODB.Field ′ADODB Field 对象

------------------------

Private Sub SaveToDB(ByRef Fld As ADODB.Field, DiskFile As String)

Dim byteData() As Byte ′定义数据块数组

Dim NumBlocks As Long ′定义数据块个数

Dim FileLength As Long ′标识文件长度

Dim LeftOver As Long′定义剩余字节长度

Dim SourceFile As Long ′定义自由文件号

Dim i As Long ′定义循环变量

SourceFile = FreeFile ′提供一个尚未使用的文件号

Open DiskFile For Binary Access Read As SourceFile ′打开文件

FileLength = LOF(SourceFile) ′得到文件长度

If FileLength = 0 Then ′判断文件是否存在

Close SourceFile

MsgBox DiskFile & 〃 无 内 容 或 不 存 在 !〃

Else

NumBlocks = FileLength \ BLOCKSIZE ′得到数据块的个数

LeftOver = FileLength Mod BLOCKSIZE ′得到剩余字节数

Fld.Value = Null

ReDim byteData(BLOCKSIZE) ′重新定义数据块的大小

For i = 1 To NumBlocks

Get SourceFile, , byteData() ′ 读到内存块中

Fld.AppendChunk byteData() ′写入FLD

Next i

ReDim byteData(LeftOver) ′重新定义数据块的大小

Get SourceFile, , byteData() ′读到内存块中

Fld.AppendChunk byteData() ′写入FLD

Close SourceFile ′关闭源文件

End If

End Sub

----------------------

Private Sub Form_Load()

Constr = 〃DSN=image〃 ′定义ODBC连接

ADOCon.Open Constr ′创建一个连接

ADORst.Open 〃table〃, ADOCon, adOpenDynamic, adLockOptimistic

′打开一个ADO动态集 表名为table

Set AdoCtr.Recordset = ADORst ′将动态集赋给ADO控件

End Sub

----------------------

Private Sub Form_Unload(Cancel As Integer)

′记得关闭打开的数据集,释放资源

ADORst.Close

ADOCon.Close

Set ADORst = Nothing

Set ADOCon = Nothing

End Sub

----------------------

Private Sub PreView_Click()

′显示打开文件的公用对话框,选择需要加入数据库的图片

CDlg.Filter = 〃位图(*.bmp)|*.bmp〃

CDlg.ShowOpen

FileName = CDlg.FileName

PicBox.Picture = LoadPicture(FileName) ′预览图片

End Sub

----------------------

Private Sub Save_Click()

ADORst.AddNew ′新增纪录

ADORst(〃姓名〃).Value = Names.Text ′给动态集的第一个字段赋值

ADORst(〃编号〃).Value = Numb.Text ′给动态集的第二个字段赋值

Set ADOFld = ADORst(〃照片〃) ′给ADODB.Field对象赋值

Call SaveToDB(ADOFld, FileName)

′调用子程序,给第三个字段(image)赋值

ADORst.Update

End Sub

----------------------

Private Sub Update_Click()

′重新打开纪录集,刷新纪录

ADORst.Close

ADOCon.Close

Set ADORst = Nothing

Set ADOCon = Nothing

ADOCon.Open Constr

ADORst.Open 〃table〃, ADOCon, adOpenDynamic, adLockOptimistic

Set AdoCtr.Recordset = ADORst

End Sub

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值