有一个用ADO连接的数据库,我希望在程序中提供用户名和口令,假设我有一个ACCESS数据库,叫MYDATA,我在onlogin中应该怎么写呢????

解决方案 »

  1.   

    要输入ACCESS数据库的用户名和口令,还是你将用户名和口令存在一个表中,要用户登陆时输入,以进行验证?
      

  2.   

    把 LoginPrompt 属性置为 False, 并在 OnWillConnect 中提供用户名和密码
      

  3.   

    需要再加一个FORM用于给用户验证身份
      

  4.   

    如一楼所说,楼主的问题说的不清楚,我也只能用if 判断一下了
    if 想显示ADO的登陆界面 then
      将ADOConnection的LoginPromt设为True
    else if 想自己做登陆界面 then
      begin
        1.建一个用户表: UserID, UserName, Password
        2.然后在程序中找到登陆人员的UserID,然后比较输入的password是否相同
      end;
      

  5.   

    procedure Tfrmlogon.Button1Click(Sender: TObject);
    var
      //MyList:TStringList;
      str,user:string;
    const
      boolstr:array[boolean] of string=('密码错误!','正在登录……');
    begin
      {MyList:=TStringList.Create;}
      try
        label1.Caption:=boolstr[SQLConfigDataSource(0, ODBC_ADD_DSN,
        //                    ~换成Handle就是手工配置
          'SQL Server',                       //数据库类型
          'DSN=MQIS'#0 +                //数据源名称
          'Server='+combobox1.Text+#0 +                 //SQL Server服务器名,从combobox1.text中选取
          'Database=HRMS'#0 +                //数据库名称
          'Description=动态配置ODBC(人力资源信息管理系统)'#0        //描述
          )];  with datamodule2.ADOConnection1 do
        begin
         user:=combobox2.Text;
         ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID='+user+';password='+edit1.Text+';'+'Data Source=MQIS;Initial Catalog=HRMS';
         str:=ConnectionString;
         Connected:=true;
         //open;
        end;
      except
        begin
          edit1.SetFocus;  //焦点提示用户重新输入密码
          label1.Caption:='登录失败!';
          frmlogon.Button1.Enabled:=true;
          frmlogon.button2.enabled:=true;
        end;
      edit1.Clear;  //清空密码
      end;
    end;
      

  6.   

    将ADOConnection的LoginPromt设为false
    建一个用户表: UserID, UserName, Password  假设表名为talbe1 dm_fin是adoconnection
    再登陆界面理这么写
    function Loginshow(var username,password:string):boolean;
    begin
     result:=false;
     Frmlogin:=TFrmlogin.Create(application);
     try
      result:=Frmlogin.ShowModal=mrok;
      if result then
       begin
        username:=trim(frmlogin.edtusername.text);
        password:=trim(frmlogin.edtpassword.text);
       end;
     except
      Frmlogin.Free;
     end;
    end;
    再主界面这么写
    procedure Tfrmmain.login; //登陆
    var username,password:string;
    begin
       if Loginshow(username,password) then
        TRY
         talbe1.open;
         if talbe1.Locate('用户名;密码',vararrayof([username,password]),[]) then
           begin
            loged:=true;
            dm_fin.cdscode.Open;
            statusbar1.Panels[1].text:=dm_fin.cdsuser.fieldbyname('用户名').AsString;
            statusbar1.Panels[3].text:=dm_fin.cdsuser.fieldbyname('部门名称').AsString;
            statusbar1.Panels[5].text:='已登录';
          end
         else
           begin
           dm_fin.finconn.Close;
           application.MessageBox(pchar('登录失败,请检查用户名和密码,或者重新下载基本数据。'),pchar(application.Title),mb_ok+mb_iconinformation);
           end;
        EXCEPT
           dm_fin.finconn.Close;
           application.MessageBox(pchar('未知系统错误,请检查网络连接。'),pchar(application.Title),mb_ok+mb_iconinformation);
           end;
      

  7.   

    Inlogin:=Inlogin+1;
       //查找是否有此用户存在并且密码是否正确
       with DmMain.ADOQDl do
         begin
           sql.Clear;
           sql.Add('select * from czyb where ');
           sql.Add('czyxm='''+cbxm.Text+''' and '+'czymm='''+edmm.Text+'''');
           open;
           //如果不存在
           if eof then
             begin
             //如果输入错误超过三次
              if Inlogin>3 then
                begin
                 showmessage('已经输入三次错误,退出系统!');
                 //退出系统
                 application.Terminate;
                end
              else
                 begin
                 showmessage('输入错误,请重新输入!');
                 cbxm.SetFocus;
                 end;
             end
           else
             begin //保存登录时的用户编号和姓名
                IsUserBh:=fieldbyname('czybm').AsString;
                IsUserName:=fieldbyname('czyxm').AsString;
                FrmDl.Close;
                Application.CreateForm(TFrmlb, Frmlb);
                frmlb.Visible:=false;
                frmlb.ShowModal;
             end;
         end;
      

  8.   

    再次谢谢各位,索性就把问题问的全一些如果我利用表画直方图,我在连接数据库时,是否直接把LoginPrompt属性置为False,就可以呢?还是把 LOGINPROMPT 设置为 TRUE ,在程序中,每次调用数据时都写一段提供连接属性的代码呢?用CONNECTIONSTRING应该怎么写呢?谢谢!
      

  9.   

    'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'..\data\LocData.mdb;Persist Security Info=False;Jet OLEDB:Database Password=数据库的密码';
      

  10.   

    LoginPrompt 属性置为 False, 并在 OnWillConnect 中提供用户名和密码