RT,因为比较懒让dbgrid显示的数据直接批处理然后提交,而sql表那里我想实现哪个用户修改的就变更成该用户名字('维护人')。之前想用触发器来实现,因为批处理不是qry.open无法fieldbyname……
CREATE TRIGGER [TRIGGER sales] ON [dbo].[Sales]
FOR INSERT, UPDATE, DELETE
AS
var @saleser char(10)
set @saleser='张三' //我想知道这样定义变量究竟是生效了没?
begin
SET NOCOUNT on
update Sales set 维护人=@saleser where 生产订单号 in(select 生产订单号 from inserted)
SET NOCOUNT off
end
但是delphi那里又不知道如何赋值给sql变量……于是寻找方法的时候发现了创建存储过程应该可以实现这个功能
procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from sales'); //查询到dbgrid
open;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
close;
ProcedureName:='Updata_sales_1;1'; //想向@saleser 进行赋值,轰出错Parameters'@维护人'not find
Parameters.Refresh;
Parameters.ParamByName('@维护人').Value:=trim(Edit1.Text);
execproc;
end;
adoquery1.UpdateBatch(arAll);//放在with前面会提示sql语句最多只能镶嵌32层;
end;
究竟哪里出错了求各位大大指点
CREATE TRIGGER [TRIGGER sales] ON [dbo].[Sales]
FOR INSERT, UPDATE, DELETE
AS
var @saleser char(10)
set @saleser='张三' //我想知道这样定义变量究竟是生效了没?
begin
SET NOCOUNT on
update Sales set 维护人=@saleser where 生产订单号 in(select 生产订单号 from inserted)
SET NOCOUNT off
end
但是delphi那里又不知道如何赋值给sql变量……于是寻找方法的时候发现了创建存储过程应该可以实现这个功能
procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from sales'); //查询到dbgrid
open;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
close;
ProcedureName:='Updata_sales_1;1'; //想向@saleser 进行赋值,轰出错Parameters'@维护人'not find
Parameters.Refresh;
Parameters.ParamByName('@维护人').Value:=trim(Edit1.Text);
execproc;
end;
adoquery1.UpdateBatch(arAll);//放在with前面会提示sql语句最多只能镶嵌32层;
end;
究竟哪里出错了求各位大大指点
如:
2011.12.13 15:30 张三 修改
2011.12.14 13:30 李四 删除
@PrdID,
@Saleser
AS
update Sales set 维护人=@Saleser where 生产订单号=@PrdID調用:with ADOStoredProc1 do
begin
ProcedureName:='Updata_sales';
Parameters.Clear;
Parameters.CreateParameter('@PrdId',ftInteger,pdInput,0,100);//这里100是你的订单号 Parameters.CreateParameter('@Saleser',ftstring,pdInput,20,trim(Edit1.Text));
ExecProc;
end;
我对sql很白……我是不应该在存储过程里面creat pro还是因为变量没定义好?
@PrdID int,
@Saleser varchar(20)
AS
procedure TForm1.Button2Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
ProcedureName:='Updata_sales';
Parameters.Clear;
Parameters.CreateParameter('@PrdId',ftstring,pdInput,14,trim(Edit2.Text));
Parameters.CreateParameter('@Saleser',ftstring,pdInput,20,trim(Edit1.Text));
ExecProc;
end;
end;
SQL的存储过程:
CREATE procedure [Updata_sales]
AS
declare @PrdId char(14)
declare @saleser char(10)
update Sales set 维护人=@saleser where 生产订单号=@PrdId
GO是一样的提示~调试出错。我还想问下这样设过程会自动找出表里被删改过的行进行维护人字段updata的吗?批量喔~
declare @PrdId char(14),
declare @saleser char(10)
AS
update Sales set 维护人=@saleser where 生产订单号=@PrdId
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if adoquery1.UpdateStatus=usUnmodified then
begin
adoquery1.FieldByName('维护人').AsString:=saleser;
end;
end;
度娘那里找到的,辛苦了,不过不知道数据量大的时候会不会卡……