① 如何用vb向sql数据库存取照片 最好有事例 谢谢
在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
② 如何用VB建立数据库
VB6集成调试环境左边工具箱内已加载了有关数据库编程必须的控件。
然后在FORM1窗体中添加ADODC控件和DATAGRID控件,将DATAGRID1的属性DATASOURCE选ADODC1。
打开ADODC1控件属性页使用连接字符串,选生成。在提供者选项中选MICROSOFT jet 4.0 OLE DB Provider,然后按要求连接数据库等。在ADODC1控件属性页使用连接字符串空白文本窗口中就有一长串字符串,注意该字符串可复制到程序代码用于编程。ADODC1控件属性页的数据源内有命令文本(SQL)编写窗口可编写SQL查询语言。该窗口的SQL语句可复制到程序代码用于编程。
③ 如何用VB建立数据库
但即便如此,数据库应用程序的开发仍然算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。所以我们先介绍一下数据库的基本知识,算是学习数据库编程前的热身运动吧! 一、热身运动 首先需要声明是,我们这里介绍的数据库知识都是指的关系数据库。所谓关系数据库就是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。 不管表在数据库文件中的物理存储方式如何,它都可以看作一组行和列,与电子表格的行和列类似。在关系数据库中,行被称为记录,而列则被称为字段。下面是一个客户表的例子。 表1 客户表 客户号 姓名 地址 城市 街道 邮编 1723 Doe John 1234 Ffth Avenue New York NY 1004 3391 Smith Mary 9876 Myrtle Lavee Bosten MA 6078 3765 Blasel Mortimer 2296j River Road peoria IL 7011 此表中每一行是一个记录,它包含了特定客户的所有信息,而每个记录则包含了相同类型和数量的字段:客户号、姓名等等。 表 是一种按行与列排列的相关信息的逻辑组,类似于工作单表。 字段 数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,须为每个字段分配一个数据类型、最大长度和其它属性。字段可包含各种字符、数字甚至图形。 记录 各个客户有关的信息存放在表的行,被称为记录。一般来说,数据库表创建时任意两个记录都不能相同。 键 键就是表中的某个字段(或多个字段),它(们)为快速检索而被索引。键可以是唯一的,也可以是非唯一的,取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。例如,在前面的例子中,客户标识号 (客户号) 是表的主键,因为客户号唯一地标识了一个客户。 关系 数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。例如,客户数据库还可以有一个包含某个客户的所有定单的表。它只用“客户号”字段来引用该定单的客户,而不在定单表中的每项重复所有客户信息,如下表所示: 表2 定货表 定货 客户号 日期 内容 数量 14764 3391 2/23/94 27 $22.95 14932 3391 3/17/94 46 $9.57 15108 8765 2/15/96 27 $22.95 在这个表中,客户号字段引用了客户表中的 客户号字段,从而把定单和客户联系起来了。可以看到,客户 3391 (Mary Smith) 在 94 年 2 月 23 日订购了 27 项,在 94 年 3 月 17 日订购了 46 项。用来建立关系的键叫做外部键,因为它与“外部”表(客户表)的主键关联。 一对多和多对多关系 上表中的关系类型叫做一对多关系,因为一个客户可以发出多个定单,而某个特定的定单只能是一个客户所发。也可以建立多对多的关系。例如,列出所有可以销售的项(存货)的盘存表: 表3 盘存表 内容 描述 供应商 费用 盘存 27 Straw Hat Garden Supply Co. $14.00 50 46 Garden gloves Garden Supply Co. $4.50 75 102 hanging floral instries $6.00 137 从盘存表中,可以看到在客户和存货项之间存在多对多的关系。也就是说,一个客户可以订购多个存货项,而一个存货项又能够被多个客户订购。多对多关系是通过两个独立的一对多关系来定义的,公共的“多”表包含了两个其它表的外部键。在该例中,定货s 表与 盘存 表(通过 “内容”)与 Customer 表(通过 客户号)都相关联。
④ vb加sql的图片数据库怎么弄
'VB/VBA中实现数据库中的文件存取
'示例数据库为ACCESS数据库,用SQL数据库的话,只需要改连接字符串
'
'*************************************************************************
'**
'** 使用 ADODB.Stream 保存/读取文件到数据库
'** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本
'**
'** ----- 数据库连接字符串模板 ---------------------------------------
'** ACCESS数据库
'** iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
'** ";Data Source=数据库名"
'**
'** SQL数据库
'** iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
'** "User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'**
'*************************************************************************
'
'保存文件到数据库中
Sub s_SaveFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConcStr As String
'ACCESS数据库的连接字符串
iConcStr = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=F:\My Documents\客户资料1.mdb"
'SQL数据库的连接字符串
iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;" & _
"User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
'读取文件到内容
Set iStm = New ADODB.Stream
With iStm
.Type = adTypeBinary '二进制模式,如果是用text/ntext字段保存纯文本数据,则改用 adTypeText
.Open
.LoadFromFile "c:\test.doc"
End With
'打开保存文件的表
Set iRe = New ADODB.Recordset
With iRe
.Open "表", iConc, adOpenKeyset, adLockOptimistic
.AddNew '新增一条记录
.Fields("保存文件内容的字段") = iStm.Read
.Update
End With
'完成后关闭对象
iRe.Close
iStm.Close
End Sub
'从数据库中读取数据,保存成文件
Sub s_ReadFile()
Dim iStm As ADODB.Stream
Dim iRe As ADODB.Recordset
Dim iConc As String
'数据库连接字符串
iConc = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False" & _
";Data Source=\\xz\c$\Inetpub\zj\zj\zj.mdb"
'打开表
Set iRe = New ADODB.Recordset
iRe.Open "tb_img", iConc, adOpenKeyset, adLockReadOnly
iRe.Filter = "id=64"
if iRe("img").ActualSize>0 Then
'保存到文件
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary '二进制模式,如果是用text/ntext字段保存纯文本数据,则改用 adTypeText
.Open
.Write iRe("img")
.SaveToFile "c:\test.doc"
End With
'关闭对象
iStm.Close
End If
iRe.Close
End Sub
⑤ 如何用vb建立 数据库
自己编的一个报名系统,连接到数据文件(*.xml)的方式如下:
在项目中添加如下项(控件):
|名称 |控件名称|
|Dialog1 |对话框 |
|Textbox1 |Textbox |
|Open |Button |
|Cancel |Button |
|Browse... |Button |
|OpenFileDialog1 |OpenFileDialog |
在原来要显示数据库的窗体上添加如下控件:
|DataGridView1 |DataDridView |
在Dialog1.vb中添加如下代码以连接到“Textbox1”中显示的路径(把文件中原有的“Public Class Dialog1”,“End Class”覆盖):
'*********************************************************
Imports System.Windows.Forms
Public Class Dialog1
Dim mydataset As New DataSet
Friend hasfile As Boolean = False
Private Sub cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cancel.Click
Me.Close()
End Sub
Private Sub browse_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles browse.Click
On Error GoTo err
OpenFileDialog1.FileName = ""
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName = "" Then
Exit Sub
End If
TextBox1.Text = OpenFileDialog1.FileName
Exit Sub
err:
Exit Sub
End Sub
Private Sub open_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles open.Click
On Error GoTo err
Form1.mydataset.ReadXml(TextBox1.Text)
Form1.DataGridView1.DataSource = Form1.mydataset.Tables("Person")
Me.Close()
Exit Sub
err:
MsgBox("Sign Up System 在打开文件时出现异常!", MsgBoxStyle.Exclamation)
End Sub
End Class
'*********************************************************
注:
xml文件的新建可以使用以下语句:
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, "<?xml version=""1.0"" standalone=""yes""?><Mytable> <Person> <代码 /> <参赛号 /> <报名方式 /> <姓名 /> <区 /> <年级 /> <学校 /> <邮编 /> <地址 /> <联系电话 /> <指导老师 /> <获奖情况 /> <备注_1 /> <备注_2 /> <备注_3 /> </Person></Mytable>", False)
⑥ 如何用VB建立数据库
打开vb6.0
编译环境
外接程序---可视化数据管理器--文件--新建
这样就可以建立
常用的各种类型数据库
新建完
在数据库窗口~右键鼠标-新建表
⑦ vb程序 怎么把图片写入数据库并读出来显示
1.使用存取文件路径的方法存取图片
保存文件名与保存其他字符型数据的方法相同,其代码如下:
Dim photoFilename as String
photoFilename = CommonDialog1.FileName
rs1.AddNew
rs1.Fields("photo")= photoFilename
rs1.Update
2.使用AppendChunk方法将二进制文件存入数据库中
下面使用AppendChunk方法将不同类型的文件存入到数据库中,程序主要代码如下:
Const BLOCKSIZE = 4096
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
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
'判断文件是否存在
If Dir(DiskFile) <> "" Then
SourceFile = FreeFile
'打开二进制文件
Open DiskFile For Binary Access Read As SourceFile
FileLength = LOF(SourceFile)
'判断文件是否空
If FileLength = 0 Then
Close SourceFile
MsgBox DiskFile & "文件无内容,请重新指定文件!", vbExclamation, "注意"
Else
'得到数据块的个数
NumBlocks = FileLength \ BLOCKSIZE
'得到剩余字节数
LeftOver = FileLength Mod BLOCKSIZE
Fld.Value = Null
ReDim byteData(BLOCKSIZE)
For i = 1 To NumBlocks
Get SourceFile, , byteData()
'用Appendchunk方法将byteData()数据写入FLD
Fld.AppendChunk byteData()
DoEvents
Next i
'将剩余数据写入FLD
ReDim byteData(LeftOver)
Get SourceFile, , byteData()
Fld.AppendChunk byteData()
Close SourceFile
End If
Else
MsgBox "文件不存在,请重新指定文件!", vbExclamation, "注意"
End If
End Sub
3.使用Stream对象将二进制文件存入数据库
在ADO2.5以上版本中提供了一个Stream对象,该对象的引入大大简化了二进制字段的存取操作,但使用前需要引用ADO 2.5Library以上的版本
下面使用Stream对象将各种类型的文件存入到数据库中,程序代码如下:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim mst As New ADODB.Stream
Private Sub cmdSave_Click()
rs.Open "select * from 文件表", cn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs.Fields("名称") = Text1.Text
mst.Type = adTypeBinary
mst.Open
If Text2.Text <> "" Then mst.LoadFromFile Text2.Text
rs.Fields("文件") = mst.Read
rs.Update
mst.Close
rs.Close
End Sub
Private Sub Command1_Click()
On Error GoTo Err
CommonDialog1.Filter = "所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
Text2.Text = CommonDialog1.FileName
Exit Sub
Err:
MsgBox Err.Description
End Sub
Private Sub Form_Load()
Dim cnnstr As String
cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db_wjgl.mdb;Persist Security Info=False"
cn.Open cnnstr
Adodc1.ConnectionString = cnnstr
Set Picture1.DataSource = Adodc1
Picture1.DataField = "文件"
End Sub
⑧ 如何向VB数据库内添加照片,数据库为access,谢谢。
1、建立一个ACCESS数据库。然后创建新表,比如你想把图片放在名为 “图片”字段中,那么设置 字段 数据类型 为“OLE 对象”。
2.VB代码内容
Set Cn = New ADODB.Connection
Cn.ConnectionString = ";DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\aaa.MDB"
Cn.Open
Set Rs = New ADODB.Recordset
Rs.Open "select * from stock", Cn, adOpenStatic, 3
Set mst = New ADODB.Stream
mst.Type = adTypeBinary
mst.Open
mst.LoadFromFile mystr
Rs.AddNew
Rs.Fields("图片").Value = mst.Read
Rs.Update
Rs.Close
Cn.Close
⑨ 求助:如何用VB做一个照片管理软件
你的问题有点大,不知道你掌握了多少。
分解下:1、打开并显示图片文件 2、给图片添加备注并保存3、维护图片数据库
1比较简单,用一个通用对话框打开文件并用 LoadPicture 在PictureBox 里打开即可
2给图片添加额外信息,这需要建立一个数据库,简单点可以用文本文件,但维护比较麻烦,如果你懂XML可以用XML,否则用现成的数据库系统(ACCESS,SQLSERVER之类)
3其实跟2类似的,但更注重数据库的数据维护,比如读取保存图片、添加删除记录等等
⑩ 如何用vb创建数据库 求高手
'代码创建一个Access数据库和一张表,其中“序号”字段为自动编号
Private Sub xjdata()
On Error GoTo aaa
Dim cat As New ADOX.Catalog
Dim pstr As String
Dim fm As String
Dim tb1 As ADOX.Table
Dim col As ADOX.Column
Set tb1 = New ADOX.Table
On Error GoTo xjerr
CommonDialog1.Filter = "MDB文件(*.mdb)|*.mdb|AllFiles(*.*)|*.*|"
CommonDialog1.FilterIndex = 1
CommonDialog1.InitDir = App.Path
CommonDialog1.Flags = 6
CommonDialog1.FileName = Date & Space(1) & Hour(Now) & Minute(Now)
CommonDialog1.Action = 2
If CommonDialog1.FileName = "" Then
MsgBox "你必须输入一个数据库文件名,请重新保存一次!", ""
Else
fm = CommonDialog1.FileName
End If
pstr = "Provider=Microsoft.Jet.OLEDB.4.0;"
pstr = pstr & "Data Source=" & fm
cat.Create pstr
cat.ActiveConnection = pstr
tb1.Name = "sjb"
Set col = New ADOX.Column
col.ParentCatalog = cat
col.Type = ADOX.DataTypeEnum.adInteger ' // 必须先设置字段类型
col.Name = "序号"
col.Properties("Jet OLEDB:Allow Zero Length").Value = False
col.Properties("AutoIncrement").Value = True
tb1.Columns.Append col, ADOX.DataTypeEnum.adInteger, 0
tb1.Columns.Append "电压", adSingle
tb1.Columns.Append "电流", adSingle
tb1.Columns.Append "输入功率", adSingle
tb1.Columns.Append "转速", adSingle
tb1.Columns.Append "转矩", adSingle
tb1.Columns.Append "输出功率", adSingle
tb1.Columns.Append "效率", adSingle
cat.Tables.Append tb1
xjerr:
If err.Number = 32755 Then Exit Sub ‘捕捉 取消 的错误信息
aaa:
End Sub