在设计用户登陆界面时,实行用户名可查询,在输入用户后加了一个查询按钮
本人用SQL的数据库,可不知道怎么样来写这段代码,来实现查询并通过验证。
   有哪为高高高手知道??谢谢急手中

解决方案 »

  1.   

    procedure TLoginUserFrm.OkClick(Sender: TObject);
    var now_pass: String;
        i: integer;
    begin
          with LoginQry do
          begin
               now_pass:=ePassword.Text;
               if length(now_pass) mod 2 <> 0 then
                 now_pass := now_pass + '1';
               for i:=1 to length(now_pass) do
                 now_pass[i]:=chr(ord(now_pass[i])+50);
               if Active then
                 Close;
               Sql.Clear;
               Sql.Add('Select GH, XM, CZQX, KL, ZCRQ From CZYB');
               Sql.Add(' Where GH = ''' + eWorkNo.Text + '''' + ' and KL = ''' +  now_pass + '''');
               try
                 Open;
                 sWorkNo := FieldByName('GH').AsString;
                 sUserName  := FieldByName('XM').AsString;
                 sLimit := FieldByName('CZQX').AsString;
                 Close;
               except
                 Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
                 ModalResult := mrCancel;
                 exit;
               end;
               // sWorkNo, suserName, slimit, sKey are global variable, define in Datamdl.      end;
         if sWorkNo <> '' then
         begin
           with DM do
           begin
             ModalResult := mrOk;
             sPassword := now_pass;
        //     MainFrm.StatusBar.Panels[1].Text := '操作员:' + sUserName;
           end;
           with LoginQry do
           begin
               Close;
               Sql.Clear;
               Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)');
               Sql.Add(' Values ( :a, :b, :c, :d)');
               ParamByName('b').AsString := sWorkNo;
               ParamByName('c').AsString := sUserName;
               SP.Prepare;
               try
                 SP.ExecProc;
                 ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server
                 dLoginTime := ParamByName('a').AsDateTime;
                 ParamByName('d').AsString := '成功';  // Success
                 ExecSql;
               except
                 Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
                 ModalResult := mrCancel;
                 exit;
               end;
           end;
           exit;
         end
         else
         begin
           iLoginNum := iLoginNum + 1;
           Application.MessageBox('登录失败!!!', '失败信息', MB_OK);
           with LoginQry do
           begin
               Close;
               Sql.Clear;
               Sql.Add('Insert Into Log(DLSJ, DLGH, XM, DLZT)');
               Sql.Add(' Values ( :a, :b, :c, :d)');
               ParamByName('b').AsString := eWorkNo.Text;
               ParamByName('c').AsString := eUserName.Text;
               SP.Prepare;
               try
                 SP.ExecProc;
                 ParamByName('a').AsDateTime := SP.ParamByName('@RetDateTime').Value; //Get DateTime from Server;
                 ParamByName('d').AsString := '失败'; // Fail
                 ExecSql;
               except
                 Application.MessageBox('系统出错!!!', '失败信息', MB_OK);
                 ModalResult := mrCancel;
                 exit;
               end;
           end;
           if iLoginNum >= 3 then
           begin
               ModalResult := mrCancel;
               exit;
           end;
           eWorkNo.Text := '';
           eUserName.Text := '';
           ePassword.Text := '';
           eWorkNo.SetFocus ;
           ModalResult := mrNone;
         end;
    end;
    自己改改吧
      

  2.   

    就是在你的用户名称的EDIT控件
    的OnChange事件中添加一句查询的
    代码,把存储用户信息的数据表
    的当前指针转移到该用户的位置上。
    ================================
    当用户输入完毕密码后,敲“登陆”
    按钮时就检查当前位置的“密码”
    字段的值是否与有户输入的一致,
    就行了。
      

  3.   

    查询可以用:
      Table1.Locate();
    的方法。
      

  4.   

    lgqTiger(【老虎】)
    每次都看到有你的回答,是不是想升级到猩猩啊?^_^
      

  5.   

    登陆界面上一般有2种,工号+PSW,选择登陆名+PSW,
    第一种EDIT录入参数后提交给DB去验证.
    第二种COMOBOX在FMCREAT中就将所有用户名拉出来填进去,EDIT输入密码,
    验证可以在本地,也可以在SERVER端.
    不知道你什么意思.
    难道是让用户输上1-2个字符,LIKE 选出库里的用户名?