维修记录详表结构: 车辆维修记录表结构:
id int id int
车号 char 车号 char
日期 smalldatetime 保修类型 char
维修项目 char 承修单位 char
配件名称 char 日期 smalldatetime
个数 int 工时费 numeric
单价 numeric 材料费 numeric
工时费 numeric 合计 numeric ([工时费] + [材料费])
材料费 numeric 公式:([单价] * [个数]) 里程 int
年度 int (用公式自动填充)
两个表主键都是id,在同一个窗体用dbgrid显示这两个表,用一个弹出窗体中的edit.text输入表1“维修记录详表”的内容和表2“车辆维修记录表”的保修类型、承修单位、里程,如果把添加到表1同一车号、同一日期,不同维修项目的记录的工时费和材料费各自相加作为表2的工时费和材料费和保修类型、承修单位、里程同时输入到表2成为一条记录,怎样才能实现?
执行SQL语句的函数是DAHelper.pas单元里的一个函数代码如下:
function ExeSqlNoQuery(sql:string):boolean;
var
query:TADOQuery;
ref:integer;
begin
ref:=0;
//判断连接状态是否关闭, 若关闭则打开
if stClosed in Config.ADOCon.State then
Config.ADOCon.Open;
query:=TADOQuery.Create(nil);
query.Connection:=Config.ADOCon;
query.Close;
Config.ADOCon.BeginTrans;
try
query.SQL.Clear;
query.SQL.Add(sql);
//query.Open;
ref:=query.ExecSQL;//影响的行数
Config.ADOCon.CommitTrans;
except
Config.ADOCon.RollbackTrans;
query:=nil;
result:=false;
end;
if ref>0 then
result:=true
else
result:=false;
end;
添加到表一的函数是Fix_Manage.pas单元FixCostAdd我是这样写的,
unit Fix_Manage;
interface
uses DAHelper,ClassesU,ADODB,SysUtils;
function FixCostAdd(FixCar:TFixInfo):boolean;//TFixInfo类成员对应表一结构
var
sql:string;
begin
sql:='insert into 维修记录详表(车号,日期,维修项目,配件名称,个数,单价,工时费)'+
'values('+''''+FixCar.CarNo+''''+','+''''+FixCar.FixDate+''''+','+''''+FixCar.Fix+''''+','+''''+FixCar.FitName+''''+','+''''+inttostr(FixCar.FitNum)+''''+','+''''+floattostr(FixCar.FitPrice)+''''+','+''''+floattostr(FixCar.FitCost)+''''+')';
result:=DAHelper.ExeSqlNoQuery(sql);
end;
想要在执行添加表1的事件里同时添加到表2的函数该怎样写,请高手帮我,急用,多谢!
id int id int
车号 char 车号 char
日期 smalldatetime 保修类型 char
维修项目 char 承修单位 char
配件名称 char 日期 smalldatetime
个数 int 工时费 numeric
单价 numeric 材料费 numeric
工时费 numeric 合计 numeric ([工时费] + [材料费])
材料费 numeric 公式:([单价] * [个数]) 里程 int
年度 int (用公式自动填充)
两个表主键都是id,在同一个窗体用dbgrid显示这两个表,用一个弹出窗体中的edit.text输入表1“维修记录详表”的内容和表2“车辆维修记录表”的保修类型、承修单位、里程,如果把添加到表1同一车号、同一日期,不同维修项目的记录的工时费和材料费各自相加作为表2的工时费和材料费和保修类型、承修单位、里程同时输入到表2成为一条记录,怎样才能实现?
执行SQL语句的函数是DAHelper.pas单元里的一个函数代码如下:
function ExeSqlNoQuery(sql:string):boolean;
var
query:TADOQuery;
ref:integer;
begin
ref:=0;
//判断连接状态是否关闭, 若关闭则打开
if stClosed in Config.ADOCon.State then
Config.ADOCon.Open;
query:=TADOQuery.Create(nil);
query.Connection:=Config.ADOCon;
query.Close;
Config.ADOCon.BeginTrans;
try
query.SQL.Clear;
query.SQL.Add(sql);
//query.Open;
ref:=query.ExecSQL;//影响的行数
Config.ADOCon.CommitTrans;
except
Config.ADOCon.RollbackTrans;
query:=nil;
result:=false;
end;
if ref>0 then
result:=true
else
result:=false;
end;
添加到表一的函数是Fix_Manage.pas单元FixCostAdd我是这样写的,
unit Fix_Manage;
interface
uses DAHelper,ClassesU,ADODB,SysUtils;
function FixCostAdd(FixCar:TFixInfo):boolean;//TFixInfo类成员对应表一结构
var
sql:string;
begin
sql:='insert into 维修记录详表(车号,日期,维修项目,配件名称,个数,单价,工时费)'+
'values('+''''+FixCar.CarNo+''''+','+''''+FixCar.FixDate+''''+','+''''+FixCar.Fix+''''+','+''''+FixCar.FitName+''''+','+''''+inttostr(FixCar.FitNum)+''''+','+''''+floattostr(FixCar.FitPrice)+''''+','+''''+floattostr(FixCar.FitCost)+''''+')';
result:=DAHelper.ExeSqlNoQuery(sql);
end;
想要在执行添加表1的事件里同时添加到表2的函数该怎样写,请高手帮我,急用,多谢!
有一表 L_DAYLOG
字段类型:
ID INT
L_XAY varchar(10)--主键值
L_NAME varchar(5) 要求写一触发器,在用户新增或修改保存时检查L_XAY是否有重复的值,没有时将数据写入表,有时放弃写入数据ID L_XAY L_NAME
001 FH0024 王五
002 FH0142 李四
003 AZ0432 王五
004 LA0478 李四
------------------------------写个例子create trigger Tr_L_DAYLOG on L_DAYLOG
instead of insert, update
asif not update(L_XAY)--没有更新L_XAY列时不触发下面语句
return
if not exists(select 1 from deleted )--判断新增操作
insert L_DAYLOG
select
*
from
inserted i
where
not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)
else --其它更新
update l
set L_XAY=i.L_XAY
from
inserted i
join
L_DAYLOG l on i.ID=l.ID
where
not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)--其它的waterflade 你自行领悟一下
AS
SET NOCOUNT ON
...这中间是你在tigger中要做的事
SET NOCOUNT OFF