[计算机]6关联和宏的使用.doc_第1页
[计算机]6关联和宏的使用.doc_第2页
[计算机]6关联和宏的使用.doc_第3页
[计算机]6关联和宏的使用.doc_第4页
[计算机]6关联和宏的使用.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本模块主要内容:一、“表”与“表”之间的“关联”; 二、“关联”与多表联合“查询”及“主/子窗体”的建立与应用;三、“宏”的概念及应用;关键字:关联、索引、宏(对象)“表”与“表”之间“关联”的概念:在数据库技术中,每一个“打开”的数据库(表)都有一个记录指针。记录指针要么指向表结尾的“缓冲区”,此时接受用户输入的新记录;要么指向一条已存在的记录,该记录称为“当前记录”,用户可以观看和修改“当前记录”的内容。如果需要在两个(或两个以上)打开的表之间、它们的记录指针必须按一定的规律移动(例如,当A表的记录指针指向某个学号的记录,B表的记录指针也要指向相同学号的记录),就必须建立表与表之间的“关联”。换言之,“关联”就是使得相关表之间的记录指针同步移动的技术(注意,这个“同步”一般不是记录号之间的同步)。设置“表”之间的“关联”的操作:如果需要“显式的”(即,人工的)建立表之间的关联,必须先关闭数据库文件中所有的表和查询等对象,然后在ACCESS的窗口菜单中选择“工具-关系.”项(所谓“关系数据库”就是要有表之间关联功能的数据库管理系统),在打开的“显示表”窗口中选择需要建立关联的“表”(或“查询”)添加到“关系”窗口,选择完毕关闭“显示表”窗口,在“关系”窗口中,拖动某个表中要作为关联依据的“字段”到另外一个表中要建立关联的字段(例如,将A表的“学号”字段拖到B表的“学号”字段),关闭“关系”窗口,两表之间的“关联”被建立。如上所述,建立关联后打开A表,当记录指针指向某个学号的记录,B表的记录指针也会自动指向相同学号的记录。说明:在后面的文字中为方便叙述,作为关联依据的字段会被称为“关联字段”。如果在打开“关系”窗口后没有出现“显示表”窗口(即无从选择要建立关联的“表/查询”,可以在“关系”窗口的空白处右击,在快捷菜单中选择“显示表”项。建立“关联”的条件与注意事项:一、如果要修改(编辑)关联的参数,可以打开“工具-关系”窗口,选择有关联的表,在ACCESS的窗口菜单中选择“关系-编辑关系”项;如果要取消(删除)关联,右击两表之间代表关联的线条,在快捷菜单中选择“删除”;二、ACCESS是不会自动检验各种关联是否合理的,当建立了多个关联后,开发者要自行检验和维护各关联的合理性;三、ACCESS不要求关联的各表中关联字段的字段名相同(例如,A表的“学号”字段可以与B表的“XH”字段关联),但要求各关联字段的数据类型相同,如果是数字型,要求子类型也相同。但在实际操作中,为避免出现混乱,一般要使各关联字段的字段名、数据类型、字段宽度(大小)保持一致;四、一般,采用文本型、数字型字段作为关联字段。关联字段多采用“单字段”,但也可以多个字段联合起来做关联字段组合(即,多字段关联);五、课本P79-P79介绍的“点击记录左侧“+”号,显示关联表中匹配记录”效果,往往要在建立关联的时候,关联字段被设置成“主键”或字段属性的索引项设置为“有索引(无重复)”、即唯一性索引才会出现(即,不是任何情况下都可以看到课本介绍的关联效果)说明:ACCESS的索引问题。A、在ACCESS中,如果给一个字段设置了“索引”,ACCESS默认是使用它(设置索引对字段的限制和效果自动生效)。对同一个“表”、同一时刻只能使用一种“索引”设置;B、字段属性“索引”项中,“有(有重复)”选项表示该字段允许有内容相同的数据、“有(无重复)”选项表示该字段不允许有内容相同的数据(即,唯一性索引),如果是单字段索引,效果几乎相当设置该字段为“主键”;C、更多的索引参数的设置,可以在选择字段属性中“索引”项,然后在ACCESS窗口菜单中选择“视图-索引”项来设置(如,设置记录按“升序”还是“降序”出现);D、一个字段无论是否使用“索引”,均可以用该字段作为建立“关联”的字段。但不同的索引类型(无索引、有重复索引、无重复索引)会影响关联的效果;E、为避免混乱,建议在两个有关联的“表”中,将起主引导作用的表中的“唯一性标识”字段的“索引”设置为“有(无重复)”或直接设置为“主键”,并作为“关联”字段,该关联字段与被引导的表的关联字段可成为“一对多”的关系(即,被引导表的关联字段的“索引”设置为“有(有重复)”。六、在“编辑关系”窗口中可以观看和修改“关联”的参数。下面是有关参数的解释:A、两关联表之间,如果关联字段都是“主键”或“唯一性索引”,关系类型为“一对一”(即A表一个记录只可能对应B表一个记录);如果A表关联字段是“主键”或“唯一性索引”而B表的关联字段不是,关系类型为“一对多”(即A表的一个记录可能对应B表的多个记录),如果两表的关联字段都不是“主键”或“唯一性索引”,关系类型为“未定”或“多对多”,后果不可预测。建议:为避免出现混乱,使用“关联”时至少要设置一个表的关联字段为“主键”或“唯一性索引”,如果是“一对多”,“一”的那个表做“主引导表”、“多”的那个表做“被引导表”,根据主引导表的记录指针变化引导出被引导表的相关记录;B、“连接类型”分为三种。第1种是关联(连接)只包含A、B两表中的关联字段内都有相同数据的记录行、只在A表或只在B表中存在的记录被排除在关联之外(不出现)。这是默认项;第2种是包含A表中所有记录和B表中关联字段内的数据可以在A表中找到匹配的记录(即,B表中可能有部分记录被排除在外),当A表中某记录在B表中找不到匹配时,B表对应的显示为空白;第3种情况与第2种相反,A表中可能有部分记录被排除在外,当B表做主引导表的时候,对在A表中找不到匹配的记录,A表对应的显示为空白。建立与“关联”有关的多表联合“查询”:在类似CMIS的应用系统开发过程中,往往需要把多个表中的数据组合起来、作为查询结果提供给终端用户(如,一个学生的成绩按“学期”分布在多个“成绩表”,需要一齐提供给终端用户)-遇到这种情况,就必须建立涉及多个“表”的联合“查询”。多表联合查询的关键是各表的记录指针必须同时指向相同关键的数据项(在此问题中,“学号”作为关键数据项),实际就是利用“关联”的问题。典型的建立多表联合查询的过程:一、建立涉及的表(查询)之间“关联”(例如,用“学号”作为关联字段);二、创建查询,选择涉及的各个“表/查询”;三、将需用的字段分别从各“表/查询”中拖到新查询的“字段”中.建立多表联合“查询”的相关问题:一、如果在创建新查询之前已经建立各表的“关联”,新查询自动利用这些关联(显式),将这些关联设置包含到新查询中。如果没有预先建立相关的“关联”,ACCESS也可能会自动建立“关联”(即,隐式的。虽然未必是开发者想要的);二、查询中各表的“关联”是“包含”在查询的设置中的,一个查询被建立后,修改显式的(外部的)“关联”不会影响到“查询”中各表的“关联”;三、修改“查询”内“关联”设置的方法:如果要修改查询中的“关联”(例如,ACCESS自动建立的“关联”不符要求),在进入“查询设计视图”后修改“联接属性”;四、如果删除多表联合查询中的“关联”,该查询可以运行,但记录指针的移动将不会按“关联”去同步(即,“查询”视图中同一记录,A表的字段和B表的字段内容不是来自相同的关键数据项,如,可能是A表“001”学号的“语文”成绩和B表的“888”学号的“数学”成绩出现在同一行)。总结:多表联合查询比较适合各表的关系类型为“一对一”的情况,如果是“一对多”(如,一对N,N1),原来在表中只有“一”个的记录在查询中会变成N个的记录以适应“多”方面的N个记录,若需要保持“一对多”的显示,可以考虑采用下面介绍的“主/子窗体”技术。建立与“关联”有关的多表“主/子窗体”:一般,在一个窗体中只可以使用一个数据源,如果要在一个窗体中使用多个数据源,可以用“主/子窗体”达到目的-主窗体一个数据源,每个子窗体对应另外不同的数据源。如同多表联合查询,“主/子窗体”中各数据源之间也必须先建立“关联”才有实际意义。如果没有必要的“关联”,各数据源的记录指针不会按规则同步移动。以建立一个“一对多”的“主/子窗体”为例-假定多个学期的成绩放在一个“成绩表”中,那“学生信息表”的“学号”字段和“成绩表”的“学号”字段就是“一对多”的关系,以“学号”为关联字段,主窗体的数据源为“学生信息表”,且窗体类型使用“纵栏式”(显示一个记录的内容)、子窗体的数据源为“成绩表”,窗体类型使用“数据表式”或“表格式”(显示多个记录的内容)。这样,当主窗体显示某学生的学号、姓名、子窗体就显示该学生各学期(一学期一行)、各学科的成绩。建立“主/子窗体”的途径:方法一:先建立子窗体对象并保存,后建立主窗体,在其“窗体设计视图”中将子窗体对象拖到主窗体中;方法二:先建立主窗体,在“窗体设计视图”中,将“工具箱”中的“子窗体/子报表”控件拖到主窗体中产生子窗体。主窗体和各个子窗体在数据库文件中是分开保存的独立对象。在“主/子窗体”中,数据源的“关联”问题:与多表联合查询相似,建立一个准确有效的“主/子窗体”的关键是在主窗体的数据源与子窗体的数据源之间建立“关联”。如果在创建“主/子窗体”之前已经建立相应的数据源之间的“关联”,ACCESS应该会自动利用这些关联(显式),将这些关联设置包含到创建的“主/子窗体”中。如果没有预先建立相关的“关联”,ACCESS在创建“主/子窗体”的过程中可能会要求开发者确定“关联”。修改“主/子窗体”内“关联”设置的方法:如果由于某些原因没有“关联”、或“关联”受到破坏、或“关联”不符要求,可以再次人为地修改“关联”-进入“主/子窗体”设计视图(注意:不是“子窗体”设计视图),选择“子窗体”部分,点击“属性”按钮,弹出“子窗体属性”对话框,在“数据”选项卡中设置“链接子字段”、“链接主字段”的内容,它们分别就是“子窗体”和“主窗体”的关联字段。总结:无论是“主/子窗体”或“多表联合查询”,是否能按照设计者的意愿得出结果的关键都是“关联”的设置-但是,ACCESS是不会自动检验“关联”设置是否正确、甚至是不会检验“关联”是否存在的,这个工作需要开发者认真去验证!“宏”对象的概念与“宏”的类型:“宏”是ACCESS的一种对象,ACCESS允许开发者将一系列动作预先编制在一个“宏”内,并将这个“宏”与某种事件“挂钩”,当该事件发生的时候,由ACCESS自动执行(运行)这个“宏”来实现这些预定动作(与“控件”中的“命令按钮”的作用很类似,不过“宏”的应用范围比“命令按钮”广得多)。可以将“宏”划分做3种类型:一、宏。无执行条件限制的“宏”,如果与事件挂钩,当此事件发生该“宏”就会被运行。这种“宏”也可以称为“单个宏”或“普通宏”;二、条件宏。有执行条件限制的“宏”,当挂钩事件发生的时候,只有条件为“真”时“宏操作”才会执行(注意,是有条件执行“宏操作”,“宏”是事件发生就被执行的);三、宏组。包含多个单个宏(或条件宏)的复合宏。宏组内的宏可以称为“子宏”,用“宏组名.子宏名”标识。“宏”操作的类型:在一个宏内执行的动作称之为“宏操作”-常用的宏操作有“打开窗体”、“关闭窗口”、“移动记录指针”“打开查询”.等。各种“宏操作”是ACCESS预先编制好的、提供给开发人员使用的工具-实际上,使用“宏”对象的动机就是为了方便地利用这些预制的模块,免去使用VB等工具编程的麻烦。无论哪一种类型的“宏”,其包含的宏操作都可以是一个(单步)、或多个(多步)的。说明:课本P172-P173的表10-1,列出了部分常用的宏操作的名字和功能解释,更多的宏操作的功能,可以在宏设计视图中选中一个宏操作名字,按F1键取得相关的解释。“事件”的概念与ACCESS不同对象的“事件”:编制完成的“宏”作为ACCESS的一种对象存放在数据库窗口“宏”列表中,直接双击列表中的某个“宏”即运行该“宏”,如果要检验“宏”是否符合设计要求,可采用此方法-但是,真正使“宏”在一个应用系统中起作用,必须将“宏”与某个对象的某种事件联系起来,让事件发生时“宏”自动运行起作用。在ACCESS中,“事件”是指一个对象发生变化或受外部因素影响所出现的“情况”。如,打开一个窗体对象是一种窗体事件、用鼠标点击一个按钮对象是一种按钮事件。在课本的P168-P172,分别列举了在窗体对象、报表对象、控件(对象)和发生数据处理、焦点变化、鼠标操作、键盘操作过程中所可能发生的部分事件及其解释(后3种过程事件也分布在各种对象的“属性-事件”列表中)-开发人员所要做的,就是按设想的效果,预先为各种对象的“属性-事件”列表中的某些项指定一个包含了相应的宏操作的“宏”。例如,想在A窗体中布置一个“切换按钮”,并祈望在鼠标单击该按钮时打开B窗体-如果要用“宏”实现此设想,可以先建立一个名为“OPENB”的宏,里面包含一个打开B窗体的宏操作,保存该宏,然后编辑A窗体,在其设计视图中加入一个“切换按钮”控件,并在其“控件属性”对话框的“事件”列表的“单击(事件)”项内加入OPENB这个宏-当运行窗体A的时候,如果用鼠标点击那个切换按钮,触发“单击”事件,ACCESS自动启动“OPENB”宏,打开窗体B。“宏”(“单个宏”或“普通宏”)的建立与修改操作:在ACCESS中欲创建“宏”起码有两个途径。第一种途径是在数据库窗口中选择“宏”对象,再点击“新建”按钮进入“宏设计视图”创建新的“宏”;第二种途径是选中一个对象进入其设计视图(如,控件设计视图),在其“属性-事件”列表中选择一种事件(如,单击),再点击右侧的“选择生成器”按钮,在列表中选择“宏生成器”,进入“宏设计视图”创建新的“宏”。两个途径都是在“宏设计视图”的“操作”列选择“宏操作”,如果有“操作参数”的,要确定操作参数-最后,“宏”被保存在“宏”对象列表中。要修改一个已经存在的“宏”,在“宏”对象列表中选择这个“宏”,然后点击数据库窗口的“设计”按钮进入“宏设计视图”。“条件宏”的建立与修改操作:一般,用上述方法建立的“宏”是一个“普通”的宏,如果在宏设计视图环境中,在ACCESS窗口菜单中选择“视图-条件”项,设计视图中会增加一个“条件”列,为各步“宏操作”分别指定条件(一个结果为逻辑值的条件表达式),这样的“宏”就成为“条件宏”。如何写出合符设计要求的条件,是使用“条件宏”成败的关键。有关“条件”列中的条件如何描述的事例,请参阅课本P175-P178的内容。注意:触发“宏”的“事件”也是条件!但那是决定“宏”是否会被运行的前提条件,当“事件”条件发生(真)后,“宏”被执行、否则(假)“宏”不会被执行-在“条件宏”内的条件是“宏”被执行后决定各步“宏操作”是否被执行的前提条件,如果一步宏操作的条件为“真”,该步宏操作被执行、否则,该步宏操作不会被执行(跳过)。“宏组”的建立与修改操作:如果在宏设计视图环境中,在ACCESS窗口菜单中选择“视图-宏名”项,设计视图中会增加一个“宏名”列,在“宏名”列输入一个“宏(子宏)”的名字,然后为这个子宏选择各步“宏操作”,构成一个“子宏”的内容(响应),反复上述步骤就可以建立多个“子宏”,保存这个“宏”就得到一个“宏组”。“宏”的应用示例:在课本的P181-P182中所举的“检索数据”的例子,是一个很好地说明如何综合利用ACCESS各种对象和功能的实例。现以此为范例解释如下:功能需求:在一个窗体中浏览学生的资料,当看到某个学生的时候,如果需要,可以点击一个按钮,弹出另一个窗体,在弹出的窗体中显示前一个窗体中当前学生的成绩单(看到张三显示张三的成绩、看到李四显示李四的成绩)。分析:类似的功能用“两表关联”和“主/子窗体”也可以达到目的,现在的要求是“两个相互独立”的窗体分别显示学生资料(档案)和学生成绩。前提:要有两个表,分别是“学生基本信息表”(A表)和“学生成绩表”(B表),两表都要有一个“学号”字段作为沟通的渠道,但两表之间不必建立“关联”。一、以“A表”作为数据源建立“窗体A”,窗体类型为“纵栏式”,其中必须有“学号”字段,显示一个学生的信息,通过导航按钮浏览不同的记录;二、以“B表”作为数据源建立一个“查询B”,该查询为选择查询,包含学号字段及保存各科成绩的字段,预先在“学号”字段中指定查询条件为:Forms!窗体A!学号注意:查询条件Forms!窗体A!学号是关键!该条件来源于“窗体A”中的“学号”控件(字段),在窗体A中浏览到哪个学号的记录,运行查询B就得到相关学号的记录集合。查询B能够正常运行的条件是“窗体A”必须是打开的,否则“查询B”无法得到相关控件的信息;三、以“查询B”作为数据源建立“窗体B”,窗体类型为“表格式”或“数据表式”,以一次显示多个成绩记录;四、建立一个名字为“宏A”的普通宏,只有一步宏操作:OpenForm(打开窗体),操作目标(打开的窗体)为“窗体B”;五、在“窗体A”中添加一个控件(如,切换按钮),控件名为“控件A”,在其上增加文字说明(如,“查询成绩”)以引导终端用户点击该控件(按钮)去浏览成绩-至此,两个窗体并无联系;六、在窗体A的设计视图中选择“控件A”,在其“属性-事件”列表中选择“单击”项,为该项指定“宏A”。上面是设计阶段,完成并保存所有相关对象。运行“窗体A”,浏览学生信息(档案),当出现某个学号的学生资料时(假设学号是20080101),点击标有文字说明“查询成绩”的按钮,ACCESS自动执行“宏A”打开“窗体B”,在“窗体A”中“字段”控件的内容(如:20080101)就传递到“查询B”的查询条件中,在查询B中得到学号20080101的记录集合视图,并出现在“窗体B”中让使用者观看(屏幕中同时出现如课本P182中的图10-40和图10-41)。进一步的问题:如果考虑到有学生档案资料、无该学生成绩的情况(即,在A表中有记录、在B表中无对应记录),当此情况出现时(即,查询B是一个无记录空白视图-另一说法是“空表”),需要出现“无该学生成绩”的提示、及要求不能出现“窗体B”,该如何设计?与“宏”有关的问题和建议:一、虽然可以在某种对象的“属性-事件对话框”的某个事件项中直接建立一个“宏对象”(第二种“宏”建立途径),但建议先在数据库窗口的“宏”对象项中建立“宏”(第一种“宏”建立途径)、并经测试无误后,再在某个事件项中指定使用这个“宏”-这样做可以避免很多混乱和冲突;二、常用的简单的“宏”操作可以先建立“宏组”,然后在某个事

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论