高手来讲讲思路(25分)

  • 主题发起人 主题发起人 xaxaxa
  • 开始时间 开始时间
X

xaxaxa

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一个问题:

一个dbgrid,在它的update事件中想实现以下过程,当我向dbgrid的其中一列添加数据的时候,首先检索数据表,查看我要添加的内容是不是已经存在,如果存在提示错误,如果不存在,把内容insert到数据表中,可是现在我要更改这一列数值的时候就出现问题,假设原来有个AAA,我现在想把AAA改成AAABBB,这时AAA仍然存在,只是又insert了个AAABBB,我想把AAA改成AAABBB应该怎么实现这个过程,
procedure TFrmain.DBGrideh1Columns0UpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var i:integer;
stri:string;
begin
stri:=text;
WITH queryxl1 do
begin
close;
sql.Clear;
sql.Add('select 素材名称 from 素材参数 where 素材名称='''+stri+'''' );
open;
end;
if queryxl1.IsEmpty=false then
begin
showmessage('该素材名已经存在);
end
else
begin
with queryinsert do
begin
close;
sql.Clear;
sql.Add('insert into 素材参数(素材名称) values('''+stri+''')');
ExecSQL;
end;
end;
 
没有高手吗?
 
為什麼要用插入語句呢?你不是要更改嗎 用更新語句不是更好嗎
with queryinsert do
begin
close;
sql.Clear;
sql.Add('update 表名 set 素材参数(素材名称)=('''+stri+''') where 素材参数(素材名称)='AAA'');
ExecSQL;
end;
 
程序写太长了,我用存储过程写吧,反正意思是一样的
CREATE PROCEDURE REFLASHDATA(@A varchar(50),@NewA varchar(50),@B varchar(50) ,@Result int OUTPUT) AS
Set @Result=0 --默认正常保存
IF EXISTS(SELECT * FROM T WHERE A=@NewA)
BEGIN
Set @Result=-1 --已存在
RETURN
END

IF @A=@NewA
INSERT T(A,B) VALUES(@A,@B)
ELSE
BEGIN
IF EXISTS(SELECT * FROM T WHERE A=@A)
UPDATE T SET A=@NewA,B=@B WHere A=@A
ELSE
INSERT T(A,B) VALUES(@NewA,@B)
END
 
关健是要先判断对"素材名称"这列的操作,到底是修改呢还是新增呢?
可以这样判断:
if DBGrideh1.DataSource.DataSet.FieldByName("素材名称").OldValue = null then
begin
//是新增素材名称,
//旧值:null
//新值:DBGrideh1.DataSource.DataSet.FieldByName("素材名称").Value
end
else begin
//是修改素材名称,
//旧值:DBGrideh1.DataSource.DataSet.FieldByName("素材名称").OldValue
//新值:DBGrideh1.DataSource.DataSet.FieldByName("素材名称").Value
end
 
多人接受答案了。
 

Similar threads

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