5.2.2 将GB数据表导入到数据库中
Access的数据模型为关系数据模型,物理上体现为简单的2D数据表,而GB数据表为了简约表达数据以及数据之间的复杂关系,往往不会是简单的2D数据表。将GB数据导入到数据库中,就需要考虑到如何合理的将GB数据表拆分为简单的2D数据表,并且表达出表之间的关系。以螺柱的GB数据表导入数据库为例说明GB数据表的拆分和数据库中表的建立。
图5.3
螺柱的GB数据表包括了螺柱的基本参数、螺柱的L系列和螺柱的L与B的关系三个部分,将这些数据导入到数据库中,就应该将它们分成三张表来存放,分别是“双头螺柱”、“螺柱L系列”、“螺柱LB关系”,如图5.3、5.4。
图 5.4
由于螺柱L系列中部分数据不要求尽可能不使用,也就是其中有括号的数据,在设计表的时候,就可以建立两个字段,分别是L,Lshow,L字段的数据类型是单精度数字,用来参与计算和后面的驱动造型,Lshow是字符型,在用户选择时用来显示给用户看,让其了解那些是尽量不要选择的,而即使用户选择了带有括号的Lshow值,系统只要将其对应的L值读取就可以了。
对螺柱标准件长度L的选择,和对应螺纹高度B的选择,其实现代码如下:
将L,Lshow从“螺柱L系列”中查询出来,条件是要满足L的值应该属于在“双头螺柱”中选定规格的螺柱的 [Lmin,Lmax] 这个区间,该区间是在前面选择螺柱规格的时候就被查询出来了的。
txtSQL = "select L,Lshow from 螺柱L系列 where L >=" & Lmin & " and L <= " & Lmax & ""
Set rst = ExecuteSQL(txtSQL, MsgTxt)
n = rst.RecordCount
ReDim l(n)
cmbl.Text = rst("Lshow").Value
i = 0
Do Until rst.BOF Or rst.EOF
将满足条件的Lshow值添加到下拉框cmbl中,供用户选择
cmbl.AddItem rst("Lshow").Value
将满足条件的L值存放的数组L中
l(i) = rst("L").Value
i = i + 1
rst.MoveNext
Loop
当用户选择了L后,就可以执行下面的代码,用来查询对应的B值,
将Lmin,Lmax,b从“螺柱LB关系”中查询出来,条件是前面选择的螺柱规格的公称直径LZ_d txtSQL = "select Lmin,Lmax,b from 螺柱LB关系 where d = " & LZ_d & " order by b asc"
Set rst = ExecuteSQL(txtSQL, MsgTxt)
Do Until rst.EOF
Lmin = rst("Lmin").Value
Lmax = rst("Lmax").Value
如果L大于Lmax,就比较下一条。
If LZ_l > Lmax Then
rst.MoveNext
Else
B的值从“螺柱LB关系”表中查询出来了
LZ_b = rst("b").Value
Exit Do
End If
上面只是以螺柱为例,简单的说明数据库的设计和建立的方法,并并分析了用代码如何实现查询工作。下面将分析整个螺纹联接标准件库各类零件的数据之间的关系,以及数据表的物理结构。
5.2.3 完成全部数据的导入
不同类型标准零件的数据表结果,部分相似,如图5.5。
图5.5
螺纹联接螺栓、螺柱、螺钉、螺母和垫圈五大类零件,从外型结构上看,相互差异较大,但它们都有公称直径或是螺纹规格这个字段,因此,我们应该将所有的零件基本参数表的前两个字段创建为一致的数据类型,甚至是相同的字段名称。如此在任何零件的查询中基本上就可以使用相同的代码,这样就可以使代码可重用,提高代码的书写效率,同时也可以降低代码的调试难度,因为各个地方的代码结构一致,只要将任意一个地方的代码调试正确,其他地方代码复制就可以了,如图5.5。
图5.6
同一类型的零件的数据表,其数据结构一致,同时还要保证它们的字段名称也一致,这样,就可以在不对代码作出任何修改的情况下,扩充数据库,如前面所谈到的在系统结构中的未来的GB数据。如图5.6。