delphi 修改问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 17:37:23
我做了一个修改按钮,按钮的代码如下:
Adoquery2.Close;
Adoquery2.SQL.Clear;
Adoquery2.SQL.Add('update 工资明细表 set 姓名=:B,业绩=:C,提成=:D,应发=:E,罚单=:F,借款=:G where 工号=:A ');
Adoquery2.Parameters.ParamByName('A').Value:=trim(DBEdit1.Text);
Adoquery2.Parameters.ParamByName('B').Value:=trim(Edit1.Text);
Adoquery2.Parameters.ParamByName('C').Value:=trim(Edit2.Text);
Adoquery2.Parameters.ParamByName('D').Value:=trim(Edit3.Text);
Adoquery2.Parameters.ParamByName('E').Value:=trim(Edit4.Text);
Adoquery2.Parameters.ParamByName('F').Value:=trim(Edit5.Text);
Adoquery2.Parameters.ParamByName('G').Value:=trim(Edit6.Text);
Adoquery2.ExecSQL;

这样当我的数据只有一条的时候可以,但是当我工号为1的时候数据如果有多条,那问题就出来了,全部数据都会被改成一样了,显示特别整齐,有没有什么方法让我的数据跟着我的鼠标走,鼠标选中一条,就只修改一条,谢谢大哥们贴个代码给我,或者告诉我解决方案

可以再where条件匹配的时候加入其它字段,比如说姓名;因为你的工号并不是表的主键,这样的话重复工号的记录肯定会被修改成都一样的记录了.

AdoQuery2.sql.Text:='update Table set..... where 工号=:A and 姓名=:B';

这么写. 你这样的代码是没有问题的,只是你建的数据库有点问题, 应该设置个主键,如果各个字段都有重复的话,就考虑加一个自动加1的字段(整型的),这样修改的话,首先让用户选择某个记录,然后取出主键id,再进行修改.
各个主流数据库均支持这样的主键的.

另,数据库的字段名最好不要是中文名字,因为某些数据库不认中文做字段的.

呵呵,如果有ADO相关的问题,可以在线hi 我哈,,我一般白天都在线的..

你的工号不是唯一的,你的sql语句是修改了所有这个工号的内容。

如果你是用dbgrid的话。
比如dbgrid用的是adoquery1.你点一条,系统会自动获取adoquery1.fieldbyname(id).asstring的值。把id作为条件。你的语句在where后面加个条件:
Adoquery2.SQL.Add('update 工资明细表 set 姓名=:B,业绩=:C,提成=:D,应发=:E,罚单=:F,借款=:G where id=:a');
Adoquery2.Parameters.ParamByName('A').Value:=adoquery1.fieldbyname(id).asstring;

你的sql语句回修改表中所有满足条件: 工号=:A 的记录,除非有别的字段能够把这些记录区别开来.
数据库表的设计应该有关键字的,用关键字做条件就可以.