delphi中使用sql server触发器实例
触发器
1.利用触发器添加数据
用触发器对相关表添加数据时,所添加的记录将存储在系统临时表“inserted”中,可以将该表中的字段信息添加到其他表的相应字段中。在用触发器向其他表添加数据时,应注意表中的字段是否有不为空的记录。
下面利用触发器在“tb_Stu”表中添加记录后,在“tb_Mark”表中会自动添加相应的记录。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
(2)主要程序代码如下:
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
SQL.Add('FOR INSERT');
SQL.Add('AS');
SQL.Add('DECLARE @id Int,@name varChar(10)');
SQL.Add('Select @id=学生编号,@name=学生姓名 from inserted');
SQL.Add('INSERT INTO tb_Mark (学生编号,学生姓名,高数,外语,计算机文化基础,马经,数据库管理,数据结构,软件工程) VALUES (@id,@name,0,0,0,0,0,0,0)');
EXECSQL;
end;
2.利用触发器更新数据
在表中更新数据时,将更新前的数据存放在系统临时表“deleted”中,将更新后的数据存放在系统临时表“inserted”中。在触发器中可以根据“deleted”表中的字段对相关表进行查询,并用“inserted”表中的数据修改相关表中的信息。
下面利用触发器在“tb_Stu”表中更新记录后,在“tb_Mark”表中会自动更新相关的数据。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
(2)主要程序代码如下:
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
SQL.Add('FOR UPDATE');
SQL.Add('AS');
SQL.Add('DECLARE @id Int,@name varchar(10)');
SQL.Add('select @id=学生编号 from deleted');
SQL.Add('select @name=学生姓名 from Inserted');
SQL.Add('UPDATE tb_Mark SET 学生姓名=@name WHERE 学生编号 = @id');
EXECSQL;
end;
3.利用触发器删除数据
在对表中的数据进行删除时,会将删除的记录存入系统临时表“deleted”中,触发器将利用该表中的信息在相关表中进行查询,并删除符合条件的记录。
注意:如果某两个表是一对一的关系,那么触发器应创建在从表中。
下面利用触发器在“tb_Stu”表中删除记录后,“tb_Mark”表将自动删除相关的记录。
操作步骤如下:
(1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
(2)主要程序代码如下:
with ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('CREATE TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
SQL.Add('FOR DELETE ');
SQL.Add('AS');
SQL.Add('DECLARE @id Int,@name varchar(10)');
SQL.Add('select @id=学生编号,@name=学生姓名 from deleted');
SQL.Add('Delete tb_Mark where 学生编号=@id and 学生姓名=@name');
EXECSQL;
end;