ACCESS2000里怎么写数据库触发器(150分)

  • 主题发起人 主题发起人 anper
  • 开始时间 开始时间
A

anper

Unregistered / Unconfirmed
GUEST, unregistred user!
/* 材料单价表 */
create table base01(
clid varchar2(4) primary, /* 材料编码 */
clname varchar(40), /* 材料名称 */
cldj number /* 材料单价 */
);
/* BOM表头 */
create table base06(
cpid varchar2(4) primary, /* 成品编码 */
cpname varchar2(40), /* 成品名称 */
cpbj number /* 成品价格、来自base01.cldj*base07.clsl再求和 */
);               
/* BOM表体 */
create table base07(
cpid varchar2(4), /* 成品编码 */
clid varchar2(4), /* 材料编码 */
clsl number /* 材料数量 */
);

这表在ACCESS2000里,我想通过修改BASE01的cldj,BASE06里的cpbj就会相应改变,
若是在oracle or sql server要实现这功能我可以通过写触发器实现,可是在
access2000里我找不到写触发器的地方,要是access2000不支持数据库触发器,
请教各位高手,我该怎么做?我想通过在操作窗口BOM表体的clsl的地方写一个
失去焦点的事件,同理应就可以在操作BASE01的cldj的修改时写一个相同功能的
事件,可这段代码应怎样写?若代码太长,请mail to me.
 
access可以写触发器?没看到过咧!gz
 
那客户端该怎么实现?
 
你自己写代码,用事务管理,本来就不提倡什么都写触发器或存储过程,何况ACCESS中没有触
发器这些东东.

以前写的,用ADO连接ACCESS,
if DM.ADOConn.InTransaction then
DM.ADOConn.CommitTrans;
try
DM.ADOConn.BeginTrans;
sSQL:='insert into transactions values(.....';
DM.ADOQryMTS.SQL.Text:=sSQL;
DM.ADOQryMTS.ExecSQL;//第一个表操作
end;
for i:=1 to StrGrid.RowCount-1 do
begin
DM.ADOQryInStock.Active:=False;
DM.ADOQryInStock.Parameters[0].Value:=StrGrid.Cells[fserialno,i];
DM.ADOQryInStock.Active:=True;
if DM.ADOQryInStock.RecordCount>0 then
begin
DM.ADOQryInStock.Edit;
DM.ADOQryInStock.FieldByName('num').AsFloat:=DM.ADOQryInStock.FieldByName('num').AsFloat-StrToFloat(StrGrid.Cells[fnum,i]);
DM.ADOQryInStock.Post;//第二个表操作
if DM.ADOQryInStock.FieldByName('num').AsFloat<0 then
SBar.Panels[0].Text:=sWarning[2]
end
else
begin
SBar.Panels[0].Text:=sWarning[3];
end;
end;
DM.ADOConn.CommitTrans; //COMMIT
except
DM.ADOConn.RollbackTrans;//如果出错就ROLLBACK
exit;
end;
...
 
可这是delphi的代码,有没有VBA的代码,因为我的操作界面也在ACCESS里。
 
ACCESS中的窗口应用时大多是基于表或查询的,所以有很多数据相关的事件,而ACCESS中
还有一个非常有用的对象是宏,它是对ACCESS的一系列操作(对象、数据等等),可以像
DOS中的批处理一样操作,把窗口的事件和宏结合起来,就可以实现类似触发器的效果,
而模块中的程序则相当于存储过程!

可以在窗口的“更新后”事件中用一个叫“SetValue”的宏实现触发器的效果!
 
access不能写触发器, 也不能写存储过程
触发器是自动实现操作的, 用VBA是做不到的
 
to htw:
自动实现也是要有代码去做这件事啊,access虽然没有触发器,但如果可以用较简单的
方法实现其功能,也未尝不可呀!

我想你大概没怎么用过access的“宏”吧,access的“宏”和其他语言、工具中的“宏”
的概念是很不一样的。
 
access没有触发器
 
对,access没有触发器!
建议用sql 2000
 
access2000不支持触发器,实时更新冗余字段应难于实现,应改用在access中定义查询
的方法,在编程时查询是作为表使用的,你就能从查询中得到调用时的实时统计等数据。
如在多层结构中,可用中间层在一个Transaction中用update语句更新相关字段模拟触发器,
如更新失败则放弃先前的更新,可保证数据的一致.
 
以上各位,凡用过access的都知道access是没有触发器的,但从各位的回答来看,大家都
没有用access来开发过程序,如果用过,没有人会忘记access的功能强大的对象--“宏”,
你们好好用一用access吧,非常简单的,而且都是中文版的,会编程的各位肯定会很容易
入手的,实时更新冗余字段在access中是很容易于实现的!

而且通过access的项目文件可以管理SQL Server!
 
和sql server的一样写,不过他里面没有语法检查而已
他还带有向导和模板
点<<创建>>按钮选择创建文本存储过程,就可以打开模板
 
在ACCESS里可以写查询哈哈哈,触发器只有大型数据库才有
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部