unit zhuce;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Grids, DBGrids;type
  Tzhuceye = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    ButtonAdd: TButton;
    StatusBar1: TStatusBar;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;    procedure ButtonAddClick(Sender: TObject);
   //procedure Button1Click(Sender: TObject);
     procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  zhuceye: Tzhuceye;implementation
 uses Data,zhuye;
{$R *.dfm}
  procedure Tzhuceye.ButtonAddClick(Sender: TObject);
begin
  with DataModuleye.ADOQuerydenglu do
   begin
   close;
   sql.Clear;
   sql.Add('select * from account');
   open;
   end;
   if edit1.Text='' then
     begin
     showmessage('新加用户名不能为空.');
     edit1.SetFocus;
     end
   else
     if edit2.Text='' then
       begin
       showmessage('新密码不能为空.');
       edit2.SetFocus;
       end
     else
       if edit3.Text='' then
         begin
         showmessage('新的重复密码不能为空.');
         edit3.SetFocus;
         end
       else
         if trim(edit2.Text)<>trim(edit3.Text) then
           begin
           showmessage('新密码和重复密码不相一致.');
           edit2.Text:='';
           edit3.Text:='';
           edit2.SetFocus;
           end
         else
             begin
          // DataModuleye.ADOQuerydenglu.edit;
           DataModuleye.ADOQuerydenglu.fieldbyname('Username').AsString:=trim(edit1.Text);
           DataModuleye.ADOQuerydenglu.fieldbyname('Password').AsString:=trim(edit2.Text);
           DataModuleye.ADOQuerydenglu.post;
           end;
           If MessageDlg('是否要把新用户资料写入库中?',MtConfirmation,[mbYes,mbNo],0)=mrYes then
             begin
             DataModuleye.ADOQuerydenglu.post;
             showmessage('添加新用户成功.');
             edit1.Text:='';
             edit2.Text:='';
             edit3.Text:='';
             edit2.SetFocus;
             end
           else
             begin
             //cancel;
             edit1.Text:='';
             edit2.Text:='';
             edit3.Text:='';
             edit2.SetFocus;
             end;
           end;end.
上面一段代码有错误吗?请大家帮帮吗?

解决方案 »

  1.   

    1 命名不合理,不要用edit1,edit2 改成 edt_UserName,edt_PassWord 这样的名称2 将输入内容验证(是否输入名称为空,两个密码是否相同这些)和提交数据库分开.
    var
      AUserName,APassWord:String;
      if CheckInput(AUserName,APassWord) then
        if DBAddUser(AUserName,APassWord) then //保存到数据库
          showmessage('添加新用户成功.'); 错误在 DataModuleye.ADOQuerydenglu.post; 执行后,数据都保存, 后面才问:是否要把新用户资料写入库中然后又一次的 post .
      

  2.   

    说 的有道理,那怎么改呢?把DataModuleye.ADOQuerydenglu.post;删掉吗?你能帮忙把这一部分改改吗?谢谢了
      

  3.   

    能帮忙改改吗?我把with DataModuleye.ADOQuerydenglu do 
      begin 
      close; 
      sql.Clear; 
      sql.Add('select * from account'); 
      open; 
      end; 
    删掉了。。
      

  4.   

    能帮我改改吗?我已经把
    with DataModuleye.ADOQuerydenglu do 
      begin 
      close; 
      sql.Clear; 
      sql.Add('select * from account'); 
      open; 
      end; 
    删掉了.....
      

  5.   

    你用adotable好了
    ADOTable1.Active := true;
    ADOTable1.Insert;
    ADOtable1['用户名'] :=edit1.Text;
    ADOtable1['密码'] :=edit2.Text;
    ADOtable1['第2个密码'] :=edit3.Text;
    ADOTable1.Post;
    application.MessageBox('用户添加成功,'添加成功',0);多看看书上例子上面都有的
      

  6.   

    我就是想用adoquery呢??总得有解决办法啊,不能看见这个难就躲开吧?
      

  7.   

      if edit1.Text='' then 
        begin 
        showmessage('新加用户名不能为空.'); 
        edit1.SetFocus; 
        exit;//要加哦
        end 
      

  8.   

    procedure Tzhuceye.CheckInput(var AUserName,APassWord1,APassWord2:String):Boolean;
    begin
     Result:=Length(AUserName)>0 and Length(APassWord1)>0 and (APassWord1=APassWord2);
    end;function Tzhuceye.DBAddUser(const AUserName,APassWord:String):Boolean;
    var
      AADOQ:TADOQuery;
    begin
      Result:=False;
      AADOQ:=DataModuleye.ADOQuerydenglu;
      With AADOQ do
      begin
        SQL.Clear;
        SQL.Add(Format('Insert Into TableName(UserName,PassWord) values(%s<%s)',
                  [AUserName,APassWord]));
        Result:=ExecSQL>0;
      end;
    end;procedure Tzhuceye.btn_Add(Sender:TObject);
    var
      AUserName,APssWord1,APssWord2:String;
    begin
      AUserName:=Trim(edt_UserName.Text);
      APassWord1:=edt_PassWord1.Text;
      APassWord2:=edt_PassWord2.Text;
      if CheckInput(AUserName,APassWord1,APassWord2) then
        if DBAddUser(AUserName,APassWord1) then
           showmessage('添加新用户成功.'); 
    end;end;
     
      

  9.   


      with DataModuleye.ADOQuerydenglu do 
      begin 
       close; 
       sql.Clear; 
       sql.Add('select * from account'); 
       open; 
      end; 
      
      t_usr,t_pw,t_repw:string;
      t_usr=edit1.Text.trim;
      t_pw=edit2.Text.trim;
      t_repw=edit3.Text.trim;
      
      if t_usr='' then 
      begin 
        showmessage('新加用户名不能为空.'); 
        edit1.SetFocus; 
        return;
      end     if t_pw='' then 
        begin 
          showmessage('新密码不能为空.'); 
          edit2.SetFocus; 
          return;
        end    if t_repw.Text='' then 
       begin 
           showmessage('新的重复密码不能为空.'); 
           edit3.SetFocus; 
           return;
       end   if t_pw<>t_repw then 
      begin 
              showmessage('新密码和重复密码不相一致.'); 
              edit2.Text:=''; 
              edit3.Text:=''; 
              edit2.SetFocus; 
              return;
      end 
      //======================= 
      //=============密码和验证密码...这里就可以引申出二个功能.
      //=============个人修改(去验证老的密码,再录入新密码和验证密码,)和
      //=============万能修改(就是不需要验证的,看你的的程序,就没有去验证老密码,这里就不需要再有一个验证密码了)
      //=============个人修改的安全性高,但在实际软件操作过程中,总会有人不知道原密码,需要管理员直接给个新密码的(万能修改)
      //=======================
      DataModuleye.ADOQuerydenglu.fieldbyname('Username').AsString:=trim(edit1.Text); 
      DataModuleye.ADOQuerydenglu.fieldbyname('Password').AsString:=trim(edit2.Text); 
      DataModuleye.ADOQuerydenglu.post; 
      //========================
     //上面你已经更新资料了,下面就不需要了.如果是多层结构,不能直接修改数据表的.(响应请求后,服务给你一个临时表,你看到的都是临时表的情况)
     //那么上面修改就不成立,那下面可以加上你的话.不过,需要用SQL语句去修改的.你这样就不对.
     /*         If MessageDlg('是否要把新用户资料写入库中?',MtConfirmation,[mbYes,mbNo],0)=mrYes then 
                begin 
                DataModuleye.ADOQuerydenglu.post; 
                showmessage('添加新用户成功.'); 
                edit1.Text:=''; 
                edit2.Text:=''; 
                edit3.Text:=''; 
                edit2.SetFocus; 
                end 
              else 
                begin 
                //cancel; 
                edit1.Text:=''; 
                edit2.Text:=''; 
                edit3.Text:=''; 
                edit2.SetFocus; 
                end; 
              end;  *///===============================
    程序写出来,要具有可看性,看你的程序一个字,累.现在才是一个简单的功能,如果是十几屏的,估计没人愿意看了.
    能不用ELSE的,要少用.
    我看你第一句就省力了,但后面不用变量,直接写控件加属性,你费力,我们看的也费力.多用变量(私有).
    控件命名可以更简洁一些,还有控件命名也要简单明了.
    做为新手,你要多加油,呵呵.