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

如何用vb向sql数据库存取照片 最好有事例 谢谢,第1张

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

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

rs.Fields("Picture").Value=这个 *** 作有个前提,RS指针指向一条记录。RS指针有三种可能:指向数据库末尾(EOF),指向数据库开头(BOF),指向一条记录。

当RS的EOF或BOF属性为真时,都不能进行记录 *** 作。

你只猜着了结尾,没猜着开头啊。

rs.EOF

时增加新记录,BOF时就要根据情况判断了,移动RS指针或增加记录。

记住进行rs.Fields("Picture").Value=之类 *** 作前搞清楚RS指针位置。用RS.MOVE之类的方法移动。

1、首先可以存储图片链接,设置图片链接字段,如下图所示。

2、接着直接将图片的链接添加到SQL数据表的字段里即可,如下图所示。

3、或者用二进制存储图片字段,在SQL Server数据库中先制作成image字段。

4、接着在后台通过代码形式,将图片转化为二进制,如下图所示。

5、得到二进制数据后,则可通过sql语句插入到数据表中。

6、数据表即可存储了图片字段,将二进制转化为图片。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6623510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-25
下一篇 2023-03-25

发表评论

登录后才能评论

评论列表(0条)

保存