Delphi修改按钮的代码

来源:百度知道 编辑:UC知道 时间:2024/05/17 21:00:08
我的界面如图所示,卡号是不能改的,其他都可以改,但是在数据库里身份证这个字段是不能有重复的,其他都可以重复,如果我要是在数据库(access)里把身份证这个字段弄成主键的话,当我修改身份证时,如果出现相同的号码,运行就会出错,如不弄主键的话,我该怎么写这段代码啊?如果弄了这个主键我又该怎么写这段代码啊?解决者加分
我的代码如下:
procedure TFrmdelhuiyuan.BtnmodifyClick(Sender: TObject);
var
sex:string;
chang,chang1,chang2,chang3:integer;
begin
if (edtname.Text='') or (edtcard.Text='') or (edtaddress.Text='') or (edtmobile.Text='') or (edtphone.Text='') or (edtjifen.Text='') or (edtkahao.Text='') then
begin
showmessage('信息显示不全,不能修改!');
end
else
begin
chang:=length(edtcard.Text);
if not (chang=18) then
begin
showmessage('身份证号只能是由18个数字组成,请重输!');
edtcard.SetFocus;
end
else
begin
chang1:=length(edtmobile.Text);
if not (chang1=11) then
begin
showmessage('手机号码只能是由11个数字组成,请重输!');
edtmobile.SetFocus;
end
else
begin
chang2:=length(edtpho

再添加一个query2
with query2 do
begin
Close;
SQL.Clear;
SQL.Add(format('select count(*) as isrepeat from 会员信息表 where card=''%s''',[edtcard.Text]));
Open
if FieldByName(isrepeat).AsInteger = 0 then
begin
//继续操作
end
else
begin
showmessage('数据重复!');
exit;//退出操作
end
end;

要设置为主键。
在提交修改的身份证号码前,首先在数据库查找修改后的密码,看看是否有相同的,如果没有就提交修改,写入数据库,如果有,那么就提示用户,已经有相同的身份证,修改失败。

看你的代码,adoquery1首先查询全部信息,然后用adoquery1去修改某记录,最后再用adoquery1查询全部信息。为什么不使用locate呢?就身份证号重复问题,我建议:在开始修改前,先保存原身份证号,点“修改”按钮时,再用edtcard.Text与原身份证号比较,1)相同,表示未修改身份证号;2)不同,表示修改了身份证号;如果是2),则先用isExist := adoquery1.locate('身份证号',[edtcard.Text],[]);判断是否已经存在,如果存在,则重复,不存在,则不重复,就可以修改了。这样做的目的是:我们少访问数据库数据。