第五章 数据管理系统的建立
5.1 Access数据库管理系统简介
数据库是某个企业、组织或者部门所涉及的数据的复杂的综合,它不仅反映数据本身的内容,而且反映数据之间的联系;如何在数据库系统的形式化结构中抽象表示和处理现在世界中的数据是非常关键的问题。在数据库系统中用数据模型(Data Model)来对现实世界进行抽象,现有的数据库系统均是基于某种数据模型的。
目前,数据库领域中最常用的数据模型有三种,它们是:层次模型、网状模型、关系模型。其中前两者是非关系模型,第三种模型即关系模型是数据库的模型中最重要的模型。80年代以来,所有的数据库管理系统的产品几乎都是支持关系模型的。关系数据库采用关系模型作为数据的组织方式。
数据模型是数据库系统的核心和基础,各种机器上实现的DBMS软件都是基于某种数据模型的,这些软件都有一个共同的特点,即由于它们是在具体机器上实现的,所以在很多方面有细致严格的限制。而现实世界中应用环境是复杂多变的,各种事物的表现形式也与机器世界中相去甚远。在数据库设计过程中,如果直接将现实世界的客观对象直接转化为机器世界中的对象,就会由于注意力往往被牵扯到更多的细节限制方面而不能集中在最重要的信息的组织结构和处理模式上,因此往往是将现实世界中的客观对象首先抽象为不依赖任何机器的信息结构,这种信息结构不是DBMS支持的数据模型,而是概念级模型。然后再把概念模型转换到DBMS支持的数据模型。因此,概念模型可以看成是现实世界到机器世界的一个中间过度的层次。
为了能够生成统一类型不同规格的零件,必须将标准件的数据存储在数据库中,目前可供选择的数据库系统很多,其中Access 简单易学,操作方便,可以完成诸如查询、排序、增删记录等对数据的操作功能。完全满足开发零件库对数据管理的要求,因此选用Access 作为管理数据的工具。访问数据库因为当用户输入主导参数后,程序访问数据库,获得与主导参数相匹配的其它参数,所以必然在开发中涉及到对数据库的操作。常用的数据库接口包括ADO、DAO、RDO 等,其中ADO 是一种广泛使用的数据库接口技术. Microsoft Access是当前最流行的关系数据库管理系统之一,基本的核心是Microsoft Jet数据库引擎,其数据库对象的层次结构和编程方法及访问与在VB中访问数据库一样。它以操作方便、简单易学以及和Microsoft Office的完美结合著称于世。同时Access又能满足小型企业客户/服务器解决方案的要求来组建客户/服务器的数据库应用系统,是一种功能较完备的系统,几乎包含了数据库领域的所有技术和内容。正因为这些特点,在使用VB开发数据库应用程序时,比较适
合采用Access作为后台数据库管理系统。
利用Access数据库管理系统,分别为每一种标准件建立一个特性参数数据库,如螺栓特性参数库、螺母特性参数库、垫圈特性参数库等。每一种数据库由若干数据表组成,每一个数据表包含了若干个字段,分别对应于这种标准件的某种规格的各个特性参数。记录标准件信息的数据库层次。其中每种标准件的参数库都有国标列表、特性名称表、事物特征表和技术信息表,和若干个产品标准特性表。根据以上所述发现,针对机械设计需要有必要在SolidWorks平台上添加这样一个三维标准件库:(1)、它具有常用的标准件、通用件;(2)、具有建库、扩展标准件的能力;(3)、具有良好的用户界面及交互性能;(4)、标准件库的代码少而精干,采用的技术应便于实现与其他系统的集成。用户可用它扩充自己所需要的标准件和通用件,即可减少开发费用.
5.2 螺纹联接标准件的数据库建立
数据库中的数据,将作为实体的驱动尺寸,即当实体的某个驱动尺寸发生改变时,实体大小随之变化。对于每一种标准件,其规格大小不同,就有不同的参数尺寸系列,如螺栓,包括各部分的直径尺寸、长度尺寸等,规格不同,这些尺寸就可能不一样。当用户选择某个规格的螺栓时,就应该利用其GB标准中规定的尺寸参数,驱动实体大小自动改变。为此,需要将所有螺纹联接标准件的规格尺寸进行保存,以备查询、选择。现在我们可把螺纹联接标准件的各种规格尺寸,根据前面定义的实体尺寸名称,按照国家标准规定的尺寸数值,保存到数据库中,形成螺纹联接标准件的尺寸参数库。其他标准件,在依前述方法建立好实体模型后,也按此方法,把实体尺寸保存到对应的尺寸参数库中,这样就形成了由各实体元件组成的标准件实体模型库和对应的尺寸参数库。如图5.1,列出了本次设计中需要的数据。
图 5.1 数据库
不管通过哪种方式查询,都是要建立与数据库的联接,对数据的访问是通过数据访问接口实现的。数据访问接口代表了数据访问技术的集合,是数据提供方和使用方的中介。没有合适的数据访问接口,无法进入数据库,因此,数据使用者就无法获得需要得到的数据。
Visual Basic 6.0支持三个数据访问接口:DAO,RDO和ADO。DAO(Data Access Objects)是第一个面向对象的通过引用数据库引擎来访问关系数据库以及数据源的接口,也是当前应用比较广泛的基于对象数据访问接口。RDO(Remote Data Objects)具备DAO的基本功能,保持了它的简单特点,是主要针对ODBC的数据访问接口。但是RDO只有通过ODBC才能访问关系数据库,访问Jet数据库的能力很弱。ADO(ActiveX Data Objects)模型是现存数据访问模型中最好的。它的对象集提供了快捷、简单、有效的访问所有数据源的手段。ADO
的接口与DAO或RDO的相似,但以OLE DB为基础,形成OLE DB-ADO数据访问接口,数据访问模型本身是一个很大的进步,改进或消除了DAO和RDO的数据访问能力的不足,
已经成为开发系统新的数据访问标准。它的最大的好处就是它访问数据的语言通用性。不管使用什么工具,都可以采用一样的代码查询和操作数据,也就是说,在各种应用程序间代码
能够通用。本设计采用ADO数据接口,使用一个公共的数据访问模块,以方便多处对数据库的访问。
要在VB中访问Acecss数据库,首先要为工程引用ADO库模块,具体的实现方法就如同前面为工程添加SolidWorks引用一样,如图5.2。只有引用了ADO库后,工程才可以以ADO接口访问数据库。
图 5.2
由于系统各个功能模块都将频繁使用数据库中的各种数据,需要一个公共的数据操作函数,用以执行各种SQL语句。为此为系统添加ExecuteSQL公共函数。该函数有两个参数,其中SQL用来存放需要执行的语句,MsgString用来返回执行的提示信息。函数执行时,首先判断SQL语句中的内容,当执行查询时,返回一个同名的记录集。其他操作时不返回记录集对象。
5.2.1 基于ADO技术的数据库访问模块。
Option Explicit
参数SQL传递查询语句;MsgString传递查询消息;ExecuteSQL函数自身以一个的形式返回
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
定义连接
Dim conn As ADODB.Connection
定义数据集
Dim rst As ADODB.Recordset
定义字符串数组
Dim STokens() As String
出错处理
On Error GoTo ExecuteSQL_Error
使用Split函数产生一个包含各个子串的数组
STokens = Split(SQL)
打开连接
Set conn = New ADODB.Connection
参数ConnectString是一个函数,返回连接字符串参数,在后面将谈到
conn.Open ConnectString
判断字符串中是否有指定的内容
If InStr("insert,delete,update", UCase$(STokens(0))) Then
执行查询语句
conn.Execute SQL
返回查询消息
MsgString = STokens(0) & "query successful"
Else
创建数据集对象
Set rst = New ADODB.Recordset
返回查询结果
rst.Open Trim$(SQL), conn, adOpenKeyset, adLockOptimistic
返回记录集对象
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & "条记录"
End If
ExecuteSQL_Exit:
清空数据集对象
Set rst = Nothing
终端连接
Set conn = Nothing
Exit Function
ExecuteSQL_Error:
错误类型判断
MsgString = "查询错误:" & Err.Description
Resume ExecuteSQL_Exit
End Function
连接字符串函数,
Public Function ConnectString() As String
返回一个数据连接
ConnectString = "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq=" & App.Path & "\Res\Data.mdb"
End Function
将上面的代码作为一个公共模块添加在工程中。上面的代码是正确无误的,并且对任何关系形数据库都是通用且有效的。在工程的任何地方都可以调用该函数,这样可以极大的提高代码的效率,同时降低了代码的调试难度。用下面的方式就可以访问数据库了,
建立SQL语句变量
Dim txtSQL As String
建立返回消息变量
Dim MsgTxt As String
建立记录集变量
Dim rst As ADODB.Recordset
为SQL语句变量赋值
txtSQL = "select 表名称 from 六角螺栓"
调用ExecuteSQL函数,执行查询,并接收记录集
Set rst = ExecuteSQL(txtSQL, MsgTxt)
操作记录集对象rst,
cmb.Text = rst("表名称").Value
Do Until rst.BOF Or rst.EOF
cmb.AddItem rst("表名称").Value
rst.MoveNext
Loop
操作完成后关闭记录集,释放资源
rst.Close