强化操作第一次讲义.docx
- 文档编号:30629207
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:24
- 大小:247.77KB
强化操作第一次讲义.docx
《强化操作第一次讲义.docx》由会员分享,可在线阅读,更多相关《强化操作第一次讲义.docx(24页珍藏版)》请在冰豆网上搜索。
强化操作第一次讲义
先对命令窗口加以复习
应着重指出在VF的命令窗口中,
各命令只能“逐条执行”,即打完一条命令,就要敲“回车”键,执行它,若打完多条指令(各指令分别占一行)再敲回车,将只执行最后一条命令,被执行的命令将保留在命令窗口中。
前面若干行命令无效,不被执行(而且不保留,全部消失)。
此外,若在同一行内输入多条指令,再敲回车,系统会报错,无法执行。
同一条指令若要占用多行的话,应在除最后一行外的其他行后,加半角的分号,作为换行符,若输入正确,可将光标点入此命令的任意一行,再敲回车执行之即可。
若要执行此前已经执行过的命令,不用重打,因被执行的命令将保留在命令窗口中,只需将光标点入前面已经执行过的命令里,直接敲回车即可。
同一条命令中,各短语之间、命令短语与命令对象之间,都应有至少一个空格(可多个空格),否则系统报错,命令将得不到执行。
若命令输入正确,则命令短语应显示为蓝色,对象名显示为黑色,如出现命令短语显示为黑色的情况,则很有可能是命令短语拼写错误或缺少了相应的空格,此时应予以检查纠正。
命令中,除必要的汉字外,英文与标点等均为半角字符(字符型数据在其定界符内不受此限制,一般在汉语输入法状态下,标点为全角,在英文输入法状态下,标点为半角,因此,在命令窗口中,请注意及时切换中、英文输入法,以保证英文字母和标点的半角状态),在VF命令中英文不区分大小写,即大小写通用(字符串中除外)。
有些指令执行后可以直接在工作区(主窗口)中看到结果,如在命令窗口输入:
?
123
敲回车后,若命令格式正确则立刻会在工作区(主窗口)中看到显示的数字“123”。
但有些指令执行后是无法直接看到结果的。
如想要调整工作区(主窗口)中的显示字体大小,可在命令窗口输入:
_screen.fontsize=24(后面的数字越大,今后主窗口中的显示字号就越大,最前面为“下划线”,不是“减号”)
敲回车后,若命令格式不正确,系统会弹出对话框报错,这是一目了然的。
但在命令格式正确的前提下,系统只是不报错而已,并不会弹出什么祝贺成功之类的对话框。
此时想要看命令的效果,需要通过执行其他命令来验证,如可再次输入:
?
123
敲回车后,若命令格式正确则又会在工作区(主窗口)中看到显示的数字“123”,只是此时的显示字号会调整为前述设定的大小。
建议今后对无法直观确认执行结果的命令,应设法去验证。
VF中的菜单操作,大多数都会在执行时在命令窗口中同步显示相应命令。
若要用命令方式再次执行与菜单操作等价的操作时,可以在命令窗口中将光标直接点在显示出的命令所在行,直接敲回车即可。
利用“常用”工具栏的“命令窗口”按钮
,通过点击实现显示和隐藏命令窗口的切换。
Ctrl+F4隐藏(窗口→隐藏),Ctrl+F2显示(窗口→命令窗口)。
调整命令窗口字体大小的方法:
光标点入命令窗口中→点“格式”菜单→字体→打开了“字体”对话框,按需要点选相应字体大小后→确定。
初始字号很小,建议调大。
再次强调调整工作区(主窗口)字体大小的方法:
可以再次在命令窗口输入:
_screen.fontsize=36(后面的数字越大,字越大,最前面为“下划线”,不是“减号”)
?
123
然后在工作区(主窗口)中查看显示结果,看对字号大小是否满意。
再次强调每输完一行(也就是一条)指令,请立即敲回车执行,今后不再重复此点。
重点体会命令窗口的工作模式:
输入显示命令(“?
”与“?
?
”都试验一下),输入:
?
123,"hddhd"
?
?
123,"hddhd"
?
123,"hddhd"
?
?
123,"hddhd"
查看主窗口的显示结果,体会两者的区别:
“?
”是换行显示;“?
?
”是不换行,行内紧接着显示。
请逐个输入并敲回车执行DIR、clear、quit等命令,了解命令功能:
Dir:
显示当前目录下表的信息;
Clear:
清理工作区(主窗口);
Quit:
直接退出VF系统。
声明:
本文中,为着重强调和醒目计,对所有命令、对象名等,都加了引号。
而在VF命令窗口中,所有命令本身在输入时都是不能加引号的。
除非用到了字符型常量,而这种情况下很容易区分命令和字符型常量,如”DELETEFOR城市=”北京””中,最外层的引号,是本文为行文需要加上的,在命令窗口中输入时,最外层的引号请不要输入,但命令中等号后的”北京”两字前后的引号,是该字符型常量自带的“定界符”,输入时必须有,否则数据类型错误,系统会报错,该命令将无法执行,请体会之。
故初学者请谨记:
命令窗口中,直接输入命令即可,除非必要(字符型常量),否则不要加引号!
!
!
请读到本文中的带引号命令时,能想到这一点,不要误以为输入时也加引号,只说这一次,请切记!
!
!
!
!
!
!
第一套
原题目:
一、基本操作题(共4小题,第1和2题是7分、第3和4题是8分)
在考生文件夹下完成如下操作:
1.新建一个名为"供应"的项目文件。
2.将数据库"供应零件"加入到新建的"供应"项目文件中。
3.通过"零件号"字段为"零件"表和"供应"表建立永久联系("零件"是父表,"供应"是子表)。
4.为"供应"表的数量字段设置有效性规则:
数量必须大于0并且小于9999;错误提示信息是"数量超范围"(注意:
公式必须为数量>0.and.数量<9999)。
考查知识点:
项目文件的建立,添加。
数据库表的永久关系的建立,有效性规则的设立。
解题思路:
1.选择"文件"菜单中的"新建",在类型选择框中选择"项目",单击新建文件按钮,输入项目名:
"供应"。
2.在项目管理器中选择"数据"节点下的"数据库",单击"添加"按钮并选择"供应零件"数据库
3.首先要为两个表建立索引,并且父表必须为主索引或候选索引。
具体方法是:
在项目管理器中选择"供应零件"数据库,单击"修改"按钮,打开数据库设计器,在数据库设计器中选中"零件"表,单击数据库菜单中的修改,在表设计器中的索引选项卡中建立索引,索引名为"零件号",索引表达式为"零件号",索引类型为主索引,保存修改。
用同样的方法为"供应"表建立索引,索引名为"零件号",索引表达式为"零件号",索引类型为"普通索引"。
建立永久联系的方法是:
在数据库设计器中单击"零件"表中的索引"零件号",按住鼠标左键拖动到"供应"表中的相应索引上即可。
4.打开"供应"表的表设计器,先在列表框中选中"数量"字段,然后在字段有效性规则区域中的规则文本框中输入:
数量>0.and.数量<9999(也可以用表达式构造器生成),在信息文本框中输入:
"数量超范围"(双引号不可少)
二、简单应用(2小题,每题20分,计40分)
在考生文件夹下完成如下简单应用:
1.用SQL语句完成下列操作:
列出所有与"红"颜色零件相关的信息(供应商号,工程号和数量),并将检索结果按数量降序排序存放于表sup_temp中。
2.建立一个名为m_quick的快捷菜单,菜单中有两个菜单项"查询"和"修改"。
然后在表单myform中的RightClick事件中调用快捷菜单m_quick。
考查知识点:
SQL查询语句,查询去向,子查询等。
快捷菜单的建立,在表单中调用快捷菜单。
解题思路:
1.在"零件"表中得到所有颜色为"红"的零件号,然后在"供应"表中获得与此零件号相关的零件信息
select供应商号,工程号,数量from供应;
where零件号iN(select零件号from零件where颜色="红");
intotablesup_temporderby数量desc
2.首先建立菜单,并生成相应的mpr文件,然后在表单中调用。
具体方法是:
在"文件"菜单中选择"新建",在"新建"对话框中选择"菜单",单击"新建文件"按钮,选择"快捷菜单",在菜单设计器中输入两个菜单项"查询"和"修改",单击"菜单"菜单中的"生成",按提示保存为m_quick,并生成菜单程序文件(MPR)。
打开表单myform,双击表单设计器打开代码窗口,在对象中选择form1,在过程中选择RightClick,输入代码:
dom_quick.mpr,保存表单。
三、综合应用(1小题,计30分)
设计名为mysupply的表单(表单的控件名和文件名均为mysupply)。
表单的形式如下图
表单标题为"零件供应情况",表格控件为Grid1,命令按钮"查询"为Command1、"退出"为Command2,标签控件label1和文本框控件text1(程序运行时用于输入工程号)。
运行表单时,在文本框中输入工程号,单击"查询"命令按钮后,表格控件(名称grid1)中显示相应工程所使用的零件的零件名、颜色和重量(通过设置有关"数据"属性实现),并将结果按"零件名"升序排序存储到pp.dbf文件。
单击"退出"按钮关闭表单。
完成表单设计后运行表单,并查询工程号为"J4"的相应信息。
考查知识点:
表单的建立,控件的使用,SQL查询命令等。
解题思路:
1.选择"文件"菜单中"新建"命令,在文件类型选择框中选择"表单",单击"新建文件"按钮。
2.在表单设计器中设置表单的Name属性为"mysupply",Caption属性为"零件供应情况",从控件工具栏中分别选择一个表格、一个标签、一个文本框和两个命令按钮放置到表单上,分别设置标签label1的Caption属性为"工程号",命令按钮Command1的Caption属性为"查询",Command2的Caption属性为"退出",表格的Name属性为"grid1",RecordSourceType属性为"0-表"。
3.在Command1按钮的Click事件中输入:
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf
thisform.grid1.recordsource="pp"
4.在Command2按钮的Click事件中输入:
Thisform.release。
5.保存表单并运行,在文本框中输入J4,并单击"查询"命令按钮。
教材P113~P114域完整性与约束规则
二、1.
select供应商号,工程号,数量from供应;
where零件号iN(select零件号from零件where颜色="红");
intotablesup_temporderby数量desc
教材P132~P133之嵌套查询注意应用条件
重点参见P132例4.8
2.教材P237~P239快捷菜单设计
三、
教材P140~P143超链接查询
教材P131~P132简单的连接查询
对比体会两种等价做法,以及P142~P143指出的超链接时的书写顺序。
教材P141
例4.31普通连接
select仓库.仓库号,城市,面积,职工号,工资;
from仓库join职工;
on仓库.仓库号=职工.仓库号
等价于:
select仓库.仓库号,城市,面积,职工号,工资;
from仓库innerjoin职工;
on仓库.仓库号=职工.仓库号
即innerjoin等价于join
也等价于:
select仓库.仓库号,城市,面积,职工号,工资;
from仓库,职工;
where仓库.仓库号=职工.仓库号
这是普通连接的另一种写法,即不采用innerjoin或join,而是直接用逗号分隔参与连接的表,功能完全相同,而这种格式已经在§4.2.2中介绍过了。
应注意的是,不采用innerjoin或join时,连接条件便不能用on给出,而是直接放在where后面,请参考上述例题体会。
从而,在VF中,内连接,也简称为连接或普通连接,在连接类型表达上就有了三种格式:
采用innerjoin短语,如:
from仓库innerjoin职工
采用join短语,如:
from仓库join职工
直接用逗号分隔,如:
from仓库,职工
再次强调,当采用格式
或
时,连接条件用on给出;当采用格式
时,连接条件便不能用on给出,而是直接放在where后面。
实质上,格式
来自SQL,而格式3出自VF自身。
其功能完全相同,可任意灵活选用。
教材P131
例4.6找出工资多于1230元的职工的职工号和他们所
在的城市
select职工号,城市from职工,仓库;
where(工资>1230)and(职工.仓库号=仓库.仓库号)
select职工号,城市from职工join仓库;
on职工.仓库号=仓库.仓库号where工资>1230
教材P132
例4.7找出工作在面积大于400的仓库的职工的职工号,以及他们工作的城市。
select职工号,城市from职工,仓库;
where(面积>400)and(职工.仓库号=仓库.仓库号)
select职工号,城市from职工join仓库;
on职工.仓库号=仓库.仓库号where面积>400
P142页底~P143页头
注意:
当采用join运算时,在这种格式中join的顺序和on的顺序很重要,具体来讲,各表的join顺序应符合按题目要求进行跨表查找时,各表查找顺序的正序或逆序,只有这两种join顺序是正确的,请切记!
在join顺序正确书写后,on的(即相应连接条件的)书写顺序应该与join的书写顺序恰好相反。
对上述两点举例说明如下:
仍是针对课本P115图3.18中的4个表,要求查询有订单的仓库的仓库号和所在城市,以及该仓库的订单所涉及的供应商的供应商名与地址。
查找顺序:
先在“仓库”表中选中一个仓库号,然后查看在“职工”表中该仓库是否有职工,若有职工,再查看该职工在“订购单”表中是否有订单记录,若有订单记录,再在“供应商”表中查看该订单记录涉及的供应商的供应商名和地址,找到后,再按题目要求将“仓库.仓库号,城市,供应商名,地址”这4列的相应内容选定,留待显示。
重复上述过程,直到查完所有记录为止,并在屏幕上显示最终结果。
上述为按题目要求查找时各表的查看顺序,我们称之为正序,此处为“仓库→职工→订购单→供应商”。
显然逆序则为“供应商→订购单→职工→仓库”
按查找正序书写join条件时select语句如下:
select仓库.仓库号,城市,供应商名,地址;
from仓库join职工join订购单join供应商;
on供应商.供应商号=订购单.供应商号;
on订购单.职工号=职工.职工号;
on职工.仓库号=仓库.仓库号
请体会join的书写顺序为“仓库join职工join订购单join供应商”,为正序,而on的书写顺序与join的书写顺序恰好相反(指的是该表达中三个on体现出的4个表两两连接的次序应与join书写顺序相反,至于每个on后面的具体连接条件,其等号左右的内容可以互换,并不影响结果)。
按查找逆序书写join条件时select语句如下:
select仓库.仓库号,城市,供应商名,地址;
from供应商join订购单join职工join仓库;
on职工.仓库号=仓库.仓库号;
on订购单.职工号=职工.职工号;
on供应商.供应商号=订购单.供应商号
请体会join的书写顺序为“供应商join订购单join职工join仓库”,为逆序,而on的书写顺序与join的书写顺序恰好相反(指的是该表达中三个on体现出的4个表两两连接的次序应与join书写顺序相反,至于每个on后面的具体连接条件,其等号左右的内容可以互换,并不影响结果)。
上述两种表达方式都能得出正确结果,如下图
再次强调除上述正、逆序外,其它join书写顺序都得不出正确结果,切记!
!
扩展:
在经历了有关连接运算join和on的书写顺序的痛苦折磨之后,来看个喜讯吧,在例3.31的讲解中提到了连接运算还有不用join和on形式,当采用逗号分割各表,用where和and引出连接条件的格式时,逗号分割的各表,顺序任意,同时用where和and引出的连接条件也顺序任意,大家可自行验证。
基于此,强烈建议大家,除非题目指定用join和on来完成连接运算,否则请优先选用逗号分割各表,用where和and引出连接条件的格式,这样出错几率将大大降低。
先考虑只查J4工程的相应情况:
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号="J4"
再加上排序要求(教材P134排序):
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=”J4”;
orderby零件.零件名
再加上存到指定永久表pp.dbf中:
教材P143~P144SQLSELECT的几个特殊选项
永久表:
INTOTABLE
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=”J4”;
orderby零件.零件名intotablepp.dbf
实现文本框TEXT1输入任何工程号,均可查:
P63ALLTRIM函数:
去除字符串前后空格。
P195文本框的Value属性:
实时反映文本框的内容。
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf
请注意此时有了“工程号=alltrim(thisform.text1.value)”,则在命令窗口里已经无法运行,只能在表单事件代码里输入后运行验证了(命令窗口不识别thisform等表单术语)。
至此,生成永久表pp.dbf已经完成,下面考虑怎么把此表的内容显示在表格控件grid1中。
P207表6.18
注意
RecordSourceType属性为"0-表"与
RecordSourceType属性为"1-(默认值)别名"
的区别(稍后实际演示区别)
保险起见,应选RecordSourceType属性为"0-表"
然后在Command1按钮的Click事件中输入:
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf
thisform.grid1.recordsource="pp"
注意recordsource属性值为字符型,在代码里赋值时应加定界符,此处提供的是永久表pp的名字。
关掉改写提示信息命令
setsafetyoff
加上这一句后,反复执行时将直接改写已有的表,不再提问,如下:
setsafetyoff
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf
thisform.grid1.recordsource="pp"
下面的代码,加了“USE”指令,关闭了刚生成的表,体会此时
RecordSourceType属性为"0-表"与
RecordSourceType属性为"1-(默认值)别名"
的不同
记住RecordSourceType属性为"1-(默认值)别名"时需要用到的表先打开,否则调不动该表。
而RecordSourceType属性为"0-表"时,不必事先打开所用的表。
setsafetyoff
select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf
use
thisform.grid1.recordsource="pp"
体会不含任何参数的use命令将关闭所有已打开的表,这样,刚刚生成的永久表pp便被关闭了。
可以看到,分别将RecordSourceType设定为
"0-表"和
"1-(默认值)别名"时
分别执行上述代码,"0-表"时有结果,"1-(默认值)别名"时无结果,因后者无力打开指定的表。
至此,综合应用题分析结束,下面拓展表格控件RecordSourceType属性与RecordSource的配合,依然借用上述题目中的SQL语句和题目环境,但已不再局限于题目的要求,请注意此点!
教材P185~P187数据环境
若想要表的内容一开始就显示在表格控件里,可先把用到的表(此处为供应和零件两个表,用谁就添加谁,当然也可都添加上)添加到表单的数据环境中这样在上述RecordSourceType属性为"0-表"与
RecordSourceType属性为"1-(默认值)别名"时
就都可以直接在表格控件的RecordSource属性对话框里点开下拉列表框,点选用到的相应表了。
此时表单一运行,所选表就直接显示在表格控件里了。
建议自己尝试一下。
添加到数据环境的表会在表单运行时自动打开。
需要指出的是,在数据环境里添加了表后,仍可以不在RecordSource属性对话框里点开下拉列表框,点选用到的相应表。
仍可继续在代码中临时提供表名,这并不矛盾,请体会。
若用到的是在代码中临时生成的表(如前述题目中临时生成的永久表pp),显然无法事先添加到数据环境中,那就只能在代码中临时给RecordSource属性赋值了。
若直接将查询语句作为recordsource的来源,则可令
RecordSourceType属性为"4-SQL说明",然后
在Command1按钮的Click事件中输入:
setsafetyoff
thisform.grid1.recordsource="select零件名,颜色,重量from零件innerjoin供应;
on零件.零件号=供应.零件号where工程号=alltrim(thisform.text1.value);
orderby零件.零件名intotablepp.dbf"
再次强调recordsource属性值为字符型,在代码里赋值时应加定界符。
注意:
可发现,若直接将前述代码或命令窗口中的SQL
语句加双引号放到recordsource后面,会运行不出结果,
原因如下:
请注意若在双引号之间输入select语句,则续行符之后应
该有至少一个空格,虽然在命令窗口或程序代码窗口里
不加字符定界符而直接输入select语句时,续行符
之后不加空格照样执行,那
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 强化 操作 第一次 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)