社区
VFP
帖子详情
两个小问题
yuanzhang
2004-09-23 10:13:09
1.我建立了两个表,一个是表里是学生(考号,姓名,性别),另外一个表是录取情况(考号,录取院校),这两个表之间是一对一的关系,我在建立这两个表的永久关联时,显示却是一对多的关系,请问这是为什么?
2.VFP中的三个触发器怎么用,能否给个例子说明?
谢谢各位大侠,在线等待!
...全文
88
3
打赏
收藏
两个小问题
1.我建立了两个表,一个是表里是学生(考号,姓名,性别),另外一个表是录取情况(考号,录取院校),这两个表之间是一对一的关系,我在建立这两个表的永久关联时,显示却是一对多的关系,请问这是为什么? 2.VFP中的三个触发器怎么用,能否给个例子说明? 谢谢各位大侠,在线等待!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
十豆三
2004-09-23
打赏
举报
回复
在两个打开的表之间建立关系。
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias] [ADDITIVE]]
参数
eExpression1
指定用来在父表和子表之间建立关系的关系表达式。关系表达式通常是子表主控索引的索引表达式。
子表的索引可以是单项索引 (.IDX)、多项结构复合索引 (.CDX) 或独立复合索引。如果是复合索引,应指定适当的索引标识来排序子表。SET ORDER 可用来指定排序子表的索引标识。
例如,考虑“说明”部分描述的 customer 和 orders 两表。假定子表 orders 已经建立索引,并且使用如下命令用顾客编号进行排序:
SET ORDER TO TAG cust_id
要在 customer 和 orders 两表的顾客编号上建立关系,应选择包含父表 customer 的工作区或使用 IN 子句来指定父表的工作区或别名。然后,发出 SET RELATION 命令,用如下关系表达式指定索引表达式:
SET RELATION TO cust_id INTO orders
除非关系表达式是数值型的,否则子表必须建立索引。如果发出包含非数值关系表达式的 SET RELATION 命令时,子表没有使用索引进行排序, Visual FoxPro 显示错误信息。
如果 eExpression1 是数值型表达式,那么当记录指针在父表中移动时,将计算此表达式。然后,子表的记录指针移到记录编号为 eExpression1 的记录上。
INTO nWorkArea1 | cTableAlias1
指定子表的工作区编号 (nWorkArea1) 或子表的表别名 (cTableAlias1)。
eExpression2 INTO nWorkArea2 | cTableAlias2 ...
指定其他关系表达式 (eExpression2) 和子表,建立另一个父表和子表之间的关系。在一条 SET RELATION 命令中可以创建单个父表与多个子表之间的关系,但是各个关系之间要用逗号隔开。
nWorkArea2 指定工作区编号,cTableAlias2 指定子表的别名。
IN nWorkArea
指定父表的工作区。
IN cTableAlias
指定父表的别名。
IN 子句允许创建关系时不必首先选择父表工作区。如果 SET RELATION 命令中省略了 nWorkArea 和 cTableAlias,父表必须在当前选定的工作区中打开。
ADDITIVE
保留当前工作区中所有已存在的关系并创建指定的新关系。如果命令中不包括 ADDITIVE 子句,将断开当前工作区中的所有关系,然后再创建指定的关系。
备注
在建立关系之前,必须打开一个表(父表),而且还必须在另一个工作区内打开其他表(子表)。
相关的各表通常有一个相同的字段。例如,假定表 customer 包含顾客信息,有顾客姓名、地址和唯一的顾客编号等字段。表 orders 包含订货信息,也有顾客编号字段,同时还有日期和发货信息等字段。
SET RELATION 通过相同的字段,即顾客编号字段来联系两个表。要建立这种关系,子表必须在公共字段上建立索引。建立关系后,不论何时在父表 customer 中移动记录指针到指定顾客编号的记录上时,子表 orders 中的记录指针也将同时移到相同顾客编号的记录上。如果子表中找不到相匹配的记录,子表中的记录指针将停在表尾。
不带任何参数的 SET RELATION TO 命令将移去当前选定工作区中的所有关系。可用 SET RELATION OFF 移去指定的父子关系。
十豆三
2004-09-23
打赏
举报
回复
从当前数据库的表中删除“删除”、“插入”或“更新”触发器。
DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE
参数
TableName
指定要删除触发器的表名。
FOR DELETE | INSERT | UPDATE
指定要删除的触发器。包含 FOR DELETE 删除“删除”触发器,包含 FOR INSERT 删除“插入”触发器,包含 FOR UPDATE 删除“更新”触发器。
备注
使用 CREATE TRIGGER 为表创建“删除”、“插入”或“更新”触发器。
示例
下面的示例创建一个“更新”触发器,该触发器禁止大于 50 的数放入 customer 表的 maxordamt 字段中。display trigger 显示“更新”触发器,DELETE TRIGGER 删除“更新”触发器,重新执行 display database 来检验“更新”触发器是否被删除。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata') && 打开 testdata 数据库
USE CUSTOMER && 打开 customer 表
CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50
CLEAR
DISPLAY DATABASE
DELETE 触发器 ON customer FOR UPDATE
DISPLAY DATABASE
十豆三
2004-09-23
打赏
举报
回复
创建表的删除、插入或更新触发器。
CREATE TRIGGER ON TableName FOR DELETE | INSERT |
UPDATE AS lExpression
参数
TableName
在当前数据库中指定要创建触发器的表。
FOR DELETE | INSERT | UPDATE
指定 Visual FoxPro 创建的触发器类型。
如果所指定类型的触发器已经存在并且 SET SAFETY 是 ON,Visual FoxPro 会提示您是否要改写已存在的触发器。如果 SET SAFETY 是 OFF,则已存在的触发器被自动改写。
AS lExpression
指定触发器激发时,要计算的逻辑表达式。lExpression 可以是返回逻辑值的用户自定义函数或存储过程。可用 MODIFY PROCEDURE 创建表的存储过程。
用户自定义函数或存储过程可通过 AERROR( ) 决定激发触发器的表的名称以及触发器的类型。
如果 lExpression 计算结果为“真”(.T.),则执行激发触发器的命令或事件。
如果 lExpression 的计算结果为“假”(.F.),不执行激发触发器的命令或事件。如果 ON ERROR 过程有效,则执行 ON ERROR 过程来代替激发触发器的命令或事件。如果 ON ERROR 过程无效,则不执行激发触发器的命令或事件,同时 Visual FoxPro 产生错误信息。
备注
利用 CREATE TRIGGER 来俘获引起表中记录被删除、添加或更改的事件。只有数据库表能创建删除、插入或更新触发器。可用 CREATE DATABASE 来创建数据库,用 ADD TABLE 把表添加到数据库中。
下面的列表描述了激发删除、插入或更新触发器的事件。
DELETE 触发器
发出 DELETE 命令
在浏览窗口或编辑窗口的“表”菜单中对记录作删除记号。
注意发出 ZAP 不会造致 DELETE 触发器发生。
INSERT 触发器
发出 APPEND FROM 命令。
发出 APPEND FROM ARRAY 命令。
发出 APPEND BLANK 命令。
从浏览窗口或编辑窗口的“表”菜单追加记录。
发出 IMPORT 命令。
发出 INSERT-SQL 命令。
发出 RECALL 命令。
从浏览窗口或编辑窗口的“表”菜单中清除记录的删除标记。
UPDATE 触发器
发出 GATHER 命令。
发出 REPLACE 命令。
发出 REPLACE FROM ARRAY命令。
发出 UPDATE – SQL命令。
其它造致记录修改的事件, 如一个表单修改字段的内容。
下面的规则适用于用 CREATE TRIGGER 创建的触发器:
不能对有触发器的表使用 INSERT,但可使用 INSERT-SQL。
发出 PACK 不会激发任何触发器。
发出 ZAP 不会激发删除触发器。
如更新具有删除标记的记录,不会激发触发器。
触发器可能不会立即被激发,这取决于当前缓冲模式:
如果表缓冲起作用,当发出 TABLEUPDATE( ) 时,激发更新触发器,表中的每个缓冲记录都被更新。
示例
下面的示例创建了更新触发器。防止大于 50 的值输入到 customer 表的 maxordamt 字段中。第一个 replace 命令执行时,产生错误信息,因为 maxordamt 字段的值大于 50。第二个 replace 命令没有产生错误,因为 maxordamt 的值小于或等于 50。
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && 打开 customer 表
* 设置 maxordamt 字段的触发器为值 <= 50 时失败
CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50
ON ERROR && 恢复系统错误处理程序
WAIT WINDOW "按一键用值 60 来测试触发器"+CHR(13);
+"当你得到错误信息时, 按忽略。"
REPLACE maxordamt WITH 60 && 显示一个错误信息
? maxordamt
WAIT WINDOW "按一键用值 50 测试。"
REPLACE maxordamt WITH 50 && 值是可接受的
? maxordamt
DELETE TRIGGER ON customer FOR UPDATE && 移去触发器
JAVA近百种算法大全
最近找到的JAVA近百种算法大全 分享一下 java算法大全,有近100多种常见算法的源代码,是学习JAVA算法的难得资料,需要的童鞋来下载吧!
commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar程序文件
commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog
HTML5 CSS3 专题 :诱人的实例 3D旋转木马效果相册实例源码
代码为博客实例代码 http://blog.csdn.net/lmj623565791/article/details/32964301 有
问题
博客中留言
【树莓派】树莓派新版系统SSH连接被拒绝
问题
处理,
两个
小
问题
问题
一: 今天小车到了,一下午的时间拼装、给电池充电、给小车配显示器和键盘鼠标,然后开始ubuntu16.04和小车上的ubuntu mate进行无线连接,小
问题
出在了小车的mate系统未打开ssh,下面这个是解决方法: https://www.cnblogs.com/haochuang/p/7089937.html
问题
描述:将全新的树莓派系统烧录,开机然后用SSH远程连接,结果S
c语言
两个
正整数的最小公倍数,C语言求
两个
正整数的最小公倍数
这里将介绍求
两个
正整数的最小公倍数(Least Common Multiple,LCM)的方法。提供两种主要思路,一种是直接根据最小公倍数的定义设计算法,一种是由最大公约数计算得出。下面来介绍这两种方法。定义法求解
两个
正整数的最小公倍数的第一种思路,根据定义设计算法,最小公倍数的本质是一个最小的能同时被两整数整除的自然数。我们先比较两数大小,从较大数开始向上递增,直到找到那个最小公倍数。代码如下:...
VFP
2,741
社区成员
29,131
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章