当前位置:文档之家› 通过ODBC方式访问数据库

通过ODBC方式访问数据库

通过ODBC方式访问数据库
通过ODBC方式访问数据库

通过ODBC方式访问数据库

一、、实验条件与环境

1.通用PC机

2.PC机必须安装Windows 2000系列、Windows XP系列或Windows NT操作系统平台

3.PC机还须安装Microsoft SQL Server 2000 任意一版本(个人版、标准版、企业版)

4.PC机还须安装VB、VC、C++ Builder、Dehpi等面向对象的可视化程序设计软件

5.最好有一台公用的SQL Server 2000 服务器

二、实验目的

1.通过上机实验了解可视化程序设计语言对数据库进行访问的常用方法

2.通过上机实验掌握软件开发工具面向用户提供的ODBC对象接口的概念及其作用

3.通过上机实验熟悉SQL语句在面向对象编程语言中的使用

4.通过上机实验熟悉通过ODBC接口访问数据库并对数据库进行操作

5.通过上机实验熟悉使用ODBC来进行数据库应用程序的设计

6.通过上机实验熟悉数据源的概念及数据源的创建方法

7.通过上机实验熟悉ADO DATA控件的主要属性、事件、方法及其使用

三、实验要求:

1.要求学生至少熟悉一门面向对象的可视化程序设计语言(如:VB、VC、C++ Builder、Dehpi等)2.做本实验前,要求学生充分作好ADO DA TA控件、ODBC数据接口及数据源等相关内容的预习工作3.本实验涉及的实验内容最好能在2课时内完成

4.实验完成后需要书写实验报告,本次实验报告需在下次实验课堂上上交

四、通过ODBC方式访问数据库并进行各种数据操作的一个实例

建立一个名为MyDB的数据库,然后在此数据库中建立一个名为S的数据表,有关数据表S的属性描述为:Sno,学号,数据类型为char(10);Sname,姓名,数据类型为char(8);Ssex,性别,数据类型为char(2);BirthDay,生日,数据类型为datetime(8)。创建一个名为Students的数据源,然后利用可视化程序设计语言设计一个用户操作界面,通过ODBC数据接口和ADO DATA实现对数据库MyDB中数据表S的查询、插入、删除、修改等数据操作。

实现过程说明:

本功能的实现采用Microsoft SQL Server 2000作为数据库管理系统,采用VB作为用户操作界面的软件开发工具。计算机操作系统为Windows 2000 Professional。

实现步骤:

1.为数据库MyDB中S数据表创建名为Students的数据源

打开“开始/设置/控制面板/管理工具/数据源(ODBC)”,然后按照系统的提示,逐步进行设置,最终创建数据源Students。

1)鼠标双击“数据源(ODBC)”图标,出现“ODBC数据源管理器”界面(见图1);

2)鼠标单击“ODBC数据源管理器”界面的“添加”按钮,出现“创建数据源”界面(见图2),在此界面中选择安装数据源的驱动程序类别为“SQL Server”;

3)鼠标单击“创建数据源”界面的“完成”按钮,出现“建立新的数据源到SQL Server”界面(见图3),在此界面中设置好数据源的名称、描述信息及服务器的名称等参数;

4)鼠标单击图3界面的“下一步”按钮,出现图3界面的一个子界面,界面标题栏的名称也为“建立新的数据源到SQL Server ”(见图4),在此界面中设置好数据源的登陆模式及登陆时的用户名和密码等参数;

5)鼠标单击图4界面的“下一步”按钮,出现图3界面的一个子界面,界面标题栏的名称也为“建

立新的数据源到SQL Server ”(见图5),在此界面中选定可选项“更改默认的数据库为”,并设置好更改默认的数据库为MyDB ,设置情况如图5所示;

1 图2

3

图4

图5

6)鼠标单击图5界面的“下一步”按钮,出现图3界面的一个子界面,界面标题栏的名称也为“建立新的数据源到SQL Server ”(见图6),在此界面中所有可选项按其默认值选定,不需作改动;

7)鼠标单击图6界面的“完成”按钮,出现“ODBC Microsoft SQL Server 安装”界面(见图7);

8)鼠标单击图7界面的“测试数据源”按钮,出现“SQL Server ODBC 数据源测试”界面(见图8);

9)鼠标单击图8界面的“确定”按钮,数据源Students 就建立起来了。

2.利用VB 编程语言创建数据库应用程序用户操作界面

在VB 中创建的用户操作界面如下图9所示。界面中涉及到的控件有以下这些(其含义和功能作用参见软件界面图9):

1)Frame 控件FrameCond

2)Frame 控件FrameOpt

3)DataGrid 控件

4)Label 控件Label1控件数组,Index 范围为0至

5

图6

图7 图8

5)TextBox 控件TxtSno

6)TextBox 控件TxtSname

7)OptionButton 控件OptSsex 控件数组,Index 范围为0至1

8)ComboBox 控件控件数组,Index 范围为0至2

9)CommandButton 控件CmdOpt 控件数组,Index 范围为0至4

10)Adodc 控件AdodcODBC (设置为不可见模式)

◆常量、变量定义

Const StrDSN = "Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;password=sa;

Data Source=Students;Mode=ReadWrite"

Const StrRst = "select * from s"

Dim Conn As New ADODB.Connection

Dim Rst As New ADODB.Recordset

◆设置数据操作控件的相应属性

AdodcODBC.ConnectionString = StrDSN

AdodcODBC.RecordSource = StrRst

DataGridQuery.DataSource= AdodcODBC

◆主要控件事件代码说明

1)窗体装载事件及代码

Private Sub Form_Load()

AdodcODBC.ConnectionString = StrDSN

图9

数据库应用程序用户操作界面

DataGridQuery FrameOpt FrameCond OptSsex(0),OptSsex(1) ComboDate(0)CmdOpt(0)

CmdOpt(1) CmdOpt(2)

AdodcODBC.RecordSource = StrRst

For i = 1970 To 2005

ComboDate(0).AddItem i

Next i

For i = 1 To 12

ComboDate(1).AddItem i

Next i

For i = 1 To 31

ComboDate(2).AddItem i

Next i

Conn.Open StrDSN

Rst.CursorType = adOpenDynamic

Rst.CursorLocation = adUseClient

Rst.LockType = adLockOptimistic

Rst.ActiveConnection = Conn

Rst.Open StrRst

End Sub

2)窗体卸载事件及代码

Private Sub Form_Unload(Cancel As Integer)

Rst.Close

Conn.Close

End Sub

3)数据网格控件DataGridQuery中数据发生更新时触发的事件及代码

Private Sub DataGridQuery_AfterUpdate()

If DataGridQuery.Row > -1 Then

AdodcODBC.Recordset.Update

End If

End Sub

4)进行数据操作(查询、插入、删除、修改)及设置操作条件的事件及代码

说明:

查询操作可以不带条件查询,可以基于学号查询,可以基于姓名查询,可以基于性别查询,还可基于学号、姓名、性别三条件联合查询;

插入操作要求用户将一个学生信息填写完整后才能进行;

删除操作只能基于两个条件进行,一个是基于学号的删除,另一个是基于性别的删除;

修改操作直接在数据网格控件DataGridQuery上直接进行,但本软件不提供修改操作时对修改项进行数据合法性检查的功能;

可以通过点击软件界面上的“条件复原”按钮进行操作条件的复原和设置。

Private Sub CmdOpt_Click(Index As Integer)

Dim Querycondition, TmpStr As String

Select Case Index

Case 0 ‘数据查询操作

For i = 3 To 5

Label1(i).Enabled = False

ComboDate(i - 3).Enabled = False

Next i

If TxtSno.Text = "" And TxtSname.Text = "" And OptSsex(0).Value = False And OptSsex(1).Value = False Then

Querycondition = "select * from s "

End If

If TxtSno.Text <> "" And TxtSname.Text = "" And OptSsex(0).Value = False And OptSsex(1).Value = False Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'"

End If

If TxtSno.Text = "" And TxtSname.Text <> "" And OptSsex(0).Value = False And OptSsex(1).Value = False Then

Querycondition = "select * from s where sname=" & "'" & Trim(TxtSname.Text) & "'"

End If

If TxtSno.Text = "" And TxtSname.Text = "" And OptSsex(0).Value = True And OptSsex(1).V alue = False Then

Querycondition = "select * from s where ssex=" & "'" & Trim(OptSsex(0).Caption) & "'"

End If

If TxtSno.Text = "" And TxtSname.Text = "" And OptSsex(0).Value = False And OptSsex(1).Value = True Then

Querycondition = "select * from s where ssex=" & "'" & Trim(OptSsex(1).Caption) & "'"

End If

If TxtSno.Text <> "" And TxtSname.Text <> "" And OptSsex(0).Value = False And OptSsex(1).Value = False Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'" & "and sname=" & "'" & Trim(TxtSname.Text) & "'"

End If

If TxtSno.Text <> "" And TxtSname.Text = "" And OptSsex(0).V alue = True And OptSsex(1).Value = False Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'" & "and ssex=" & "'" & Trim(OptSsex(0).Caption) & "'"

End If

If TxtSno.Text <> "" And TxtSname.Text = "" And OptSsex(0).Value = False And OptSsex(1).Value = True Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'" & "and ssex=" & "'" & Trim(OptSsex(1).Caption) & "'"

End If

If TxtSno.Text = "" And TxtSname.Text <> "" And OptSsex(0).Value = True And OptSsex(1).V alue = False Then

Querycondition = "select * from s where sname=" & "'" & Trim(TxtSname.Text) & "'" & "and ssex=" & "'" & Trim(OptSsex(0).Caption) & "'"

End If

If TxtSno.Text = "" And TxtSname.Text <> "" And OptSsex(0).Value = False And OptSsex(1).Value = True Then

Querycondition = "select * from s where sname=" & "'" & Trim(TxtSname.Text) & "'" & "and

ssex=" & "'" & Trim(OptSsex(1).Caption) & "'"

End If

If TxtSno.Text <> "" And TxtSname.Text <> "" And OptSsex(0).Value = True And OptSsex(1).Value = False Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'" & "and sname=" & "'" & Trim(TxtSname.Text) & "'" & "and ssex=" & "'" & Trim(OptSsex(0).Caption) & "'"

End If

If TxtSno.Text <> "" And TxtSname.Text <> "" And OptSsex(0).Value = False And OptSsex(1).Value = True Then

Querycondition = "select * from s where sno=" & "'" & Trim(TxtSno.Text) & "'" & "and sname=" & "'" & Trim(TxtSname.Text) & "'" & "and ssex=" & "'" & Trim(OptSsex(1).Caption) & "'"

End If

AdodcODBC.RecordSource = Querycondition

AdodcODBC.Refresh

Case 1 ‘数据插入操作

For i = 3 To 5

Label1(i).Enabled = True

ComboDate(i - 3).Enabled = True

Next i

If TxtSno <> "" And TxtSname <> "" And (OptSsex(0).Value Or OptSsex(1).Value) Then

Rst.Find "sno = '" & Trim(TxtSno.Text) & "'"

If Rst.EOF Then

Rst.AddNew

Rst.Fields(0) = Trim(TxtSno.Text)

Else

Rst.MoveFirst

MsgBox "学号不允许重复,请重填!", vbOKOnly, "系统提示"

Exit Sub

End If

Rst.Fields(1) = Trim(TxtSname.Text)

For i = 0 To 1

If OptSsex(i).Value Then

Rst.Fields(2) = Trim(OptSsex(i).Caption)

End If

Next i

If ComboDate(0).Text = "年" Then ComboDate(0).Text = ComboDate(0).List(0)

If ComboDate(1).Text = "月" Then ComboDate(1).Text = ComboDate(1).List(0)

If ComboDate(2).Text = "日" Then ComboDate(2).Text = ComboDate(2).List(0)

Rst.Fields(3) = Trim(ComboDate(0).Text) & "-" & Trim(ComboDate(1).Text) & "-" & Trim(ComboDate(2).Text)

Rst.Update

AdodcODBC.RecordSource = StrRst

AdodcODBC.Refresh

Else

MsgBox "数据信息填写不完整,请重填!", vbOKOnly, "系统提示"

Exit Sub

End If

'Rst.MoveFirst

Case 2 ‘数据删除操作

Label1(1).Enabled = False

TxtSname.Enabled = False

For i = 3 To 5

Label1(i).Enabled = False

ComboDate(i - 3).Enabled = False

Next i

If TxtSno.Text = "" And OptSsex(0).Value = False And OptSsex(1).V alue = False Then MsgBox "未给定删除条件!", vbOKOnly, "系统提示"

Exit Sub

End If

If TxtSno.Text <> "" And (OptSsex(0).Value Or OptSsex(1).Value) Then

MsgBox "此操作不能基于多条件进行,请重设条件!", vbOKOnly, "系统提示"

TxtSno.Text = ""

For i = 0 To 1

OptSsex(i).Value = False

Next i

Exit Sub

End If

If TxtSno.Text <> "" Then

Rst.MoveFirst

Rst.Find "sno = '" & Trim(TxtSno.Text) & "'"

If Rst.EOF Then

If Rst.BOF Then

MsgBox "当前数据表为空!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.MoveFirst

End If

MsgBox "该学号记录不存在,请重填!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.Delete

End If

End If

If OptSsex(0).Value Then

Do

Rst.MoveFirst

Rst.Find "ssex = '" & Trim(OptSsex(0).Caption) & "'"

If Rst.EOF Then

If Rst.BOF Then

MsgBox "当前数据表为空!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.MoveFirst

End If

MsgBox "没有男生记录信息,请重填!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.Delete

End If

Rst.MoveNext

Loop Until Rst.EOF

End If

If OptSsex(1).Value Then

Do

Rst.MoveFirst

Rst.Find "ssex = '" & Trim(OptSsex(1).Caption) & "'"

If Rst.EOF Then

If Rst.BOF Then

MsgBox "当前数据表为空!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.MoveFirst

End If

MsgBox "没有女生记录信息,请重填!", vbOKOnly, "系统提示"

Exit Sub

Else

Rst.Delete

End If

Rst.MoveNext

Loop Until Rst.EOF

End If

AdodcODBC.RecordSource = StrRst

AdodcODBC.Refresh

Case 3 ‘数据修改操作

FrameCond.Enabled = False

Call DataGridQuery_AfterUpdate

Case 4 ‘操作条件复原与设置操作

FrameCond.Enabled = True

For i = 0 To 5

Label1(i).Enabled = True

Next i

TxtSno.Enabled = True

TxtSname.Enabled = True

For i = 0 To 1

OptSsex(i).V alue = False

Next i

For i = 0 To 2

ComboDate(i).Enabled = True

Next i

End Select

End Sub

五、实验内容:

在学习、理解、掌握好以上数据库操作实例后,完成如下实验内容:

利用ODBC(Open DataBase Connection)数据访问方式,对教材第74页所示SPJ数据库中的零件数据表P实现数据的查询、插入、删除及修改操作,并且要求数据的查询操作功能要包括对WEIGHT属性列的求和统计查询。

注意:数据库可直接利用实验一所建立的数据库,不必重新创建。

六、实验总结:

可视化面向对象程序设计语言均为程序开发人员提供了多种数据库的访问方式,本实验现实过程中主要用到了ODBC数据接口来现实应用软件对SQL数据库的数据访问。请同学们实验后考虑:①怎样利用ADO(ActiveX Data Object)对象来现实应用软件对SQL数据库的数据访问;②怎样利用DATA控件、ODBC 数据接口、ADO对象来现实应用软件对Access数据库的数据访问。

相关主题
文本预览
相关文档 最新文档