最近在做一个管理方面的软件,初学者。但每次都是处在看代码的阶段,实际自己动手做的时候还是遇到很多问题,最近就是在做一个登录界面的时候就如何与数据库想连的时候出了问题,哪位能给出你们的思想思路和源代码吗?如果有的话我送100分,(不但是要源代码,最主要是写下你们作这方面的思路了,代码我倒是看过一些了,还有就是涉及到权限管理方面的).例如:假设就一个project工程文件,在执行project.exe是调出login单元窗口只有填写正确的用户名和密码之后才能进入相应的界面,如进入main单元,各位大侠来谈谈吧,我是初学者!!还有就是如何实现动态设置ODBC,而不需要通过控制面板里面去设计?如何实现用户能够保存密码,免得下次再次输入?

解决方案 »

  1.   

    在application.run之前调用验证密码的窗口,其实代码很简单odbc在注册表里 HKEY_CURRENT_USER\Software\ODBC\ODBC.INI你看看密码保存在这册表的隐蔽处并加密就可以了
      

  2.   

    使用ADOTable
    主要用到的组件ADOTable、Label、Edit、Button等
    在SQL2000中建立了一个名字为USERS的数据表字段包括name password
    以下几个程序类同:
    主要代码如下:
        var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.FormActivate(Sender: TObject);
    begin
      edit1.Text := ''; //runtime
      edit2.Text := '';
      x := 0;
      adotable1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Students;Data Source=(local)';
      adotable1.TableName := 'USERS';
      adotable1.Open;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      adotable1.Close;
      close;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      //检测用户名是否输入
      if trim(edit1.Text) = '' then
      begin
        showmessage('请输入用户名!');
        edit1.SetFocus;
        exit;
      end;
      //检测密码是否输入
      if trim(edit2.text) = '' then
      begin
        showmessage('请输入密码!');
        edit2.SetFocus;
        exit;
      end;
      //从ADOTable1记录集中查找合法的用户
      adotable1.First;
      while not adotable1.Eof Do
      begin
    if trim(edit1.Text) = trim(ADOTable1.fieldbyname('Name').AsString) then
          break;
        adotable1.MoveBy(1);
      end;
      //判断是否为合法用户
      if ADOTable1.Eof then
      begin
        showmessage('你输入的用户非法!');
        edit1.SetFocus;
        exit;
      end;
      //判断用户密码输入是否正确
      if trim(edit2.text) <> trim(ADOTable1.FieldByName('Password').AsString) then
      begin
        x := x + 1;
        if x = 3 then
        begin
          showmessage('密码输入错误三次,程序退出!');
          close;
        end;
        showmessage('密码输入错误!');
        edit2.SetFocus;
        exit;
      end;
      //打开系统主窗体
      form1.Hide;
      form2.ShowModal;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then
        edit2.SetFocus;
    end;procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then
        button1.SetFocus;
    end;end.
      

  3.   

    模拟一个效果出来建立一个工程,包括form1,form2,form2种有edit1和button1
    -----------
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      form1.Hide;
      form2.ShowModal;
      Application.Run;
    end.
    --------------form2加入代码procedure TForm2.Button1Click(Sender: TObject);
    begin
    if edit1.Text<>'yes' then
    application.Terminate
    else
    form1.Show;
    close;
    end;
    ------------------------------------------------
    就有了
      

  4.   

    implementation
       uses Registry;\\---------------------------------------加入
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin
     with TRegistry.Create do
    begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey( 'SOFTWARE\XXXXXXXX',True);
    WriteString('olddate','345345345');
    CloseKey;
    Free;end;end;procedure TForm1.Button2Click(Sender: TObject);
    var s:string;
    begin
       with TRegistry.Create do
    begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey( 'SOFTWARE\XXXXXXXX',True);
    s:=readString('olddate');
    CloseKey;
    Free;
       showmessage(s);
    end;
    end;end.
    把xxxx换成HKEY_CURRENT_USER\Software\ODBC\ODBC.INI对应的值就可以了
      

  5.   

    让 窗体在主窗体show时showmodal
    密码信息可以保存在注册表或者其他文件中!
      

  6.   

    随便说一下我的邮箱:[email protected]
    期待着: flyman307() 的代码和文档。
      

  7.   

    在这里我说一下,我主要是与数据库相连是会出错,要调用showmodal倒是知道了,不过对Delphi是比较陌生,现在突然要找:begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      form1.Hide;
      form2.ShowModal;
      Application.Run;
    end.这段代码在哪个文件下倒是忘了,我总是要先删掉那个主单元如main再去打开project工程文件才能找到,然后再从回收站还原main单元,还修改form1.hide   form2.showmodal不好意思啊~~~初学的菜鸟!!不适合搞计算机的菜鸟啦^-^^-^^-^^-^^-^^-^
      

  8.   

    在菜单栏里的:Project->View Source
      

  9.   

    我想做一个登陆界面,jinjazz(我是jin)的虽然可以但如果是非法用户输入,程序不退出继续显示登陆界面,请问如何实现?
      

  10.   

    哈哈~~~~~~~~来晚了~~~~~~~~~~~~~ODBC是向注册表里写的
    至于登陆窗口你在project里写就可以了,上面有说清楚
    我有程序 不过太大了!没办法发给你!
      

  11.   

    1. 项目单元如下:
    begin
      Application.Initialize;
      Application.ShowMainForm:=false; //程序不显示主窗口  
      Application.CreateForm(TForm_main, Form_main); //创建主窗口
      Application.Run;
    end.
    2. Main单元的OnCreate如下:
    begin
     FrmLog:= TFrmLog.Create(Application); //创建登陆窗口
     if FrmLog.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己
     else Application.Terminate; //否则,程序结束
    end;
    3. login单元如下:
    var
      FrmLog: TFrmLog;
      ErrTime: Integer; //密码输入次数,全局变量implementation
    uses Main; //引用主窗口
    {$R *.dfm}procedure TFrmLog.FormCreate(Sender: TObject);
    begin
     ADOQuery1.Open; //查询密码
     ErrTime:=0; //给输入密码次数赋初值
    end;procedure TFrmLog.Button1Click(Sender: TObject);
    begin
     if ErrTime>=2 then
     begin
      ModalResult:=mrCancel; //密码错误3次,自动关闭,给主窗口返回值mrCancel
      Exit;
     end;
     if Edit1.Text<>ADOQuery1.FieldByName('pswd').AsString then
     begin //密码错误
      inc(ErrTime);
      MessageDlg('密码错误,请重新输入!',mtWarning,[mbOK],0);
      Edit1.Text:='';
      Exit;
     end;
     ModalResult:=mrOK; //密码正确,自动关闭,给主窗口返回值mrOK
    end;end.被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。如果点击右上角的X关闭之,则自动返回mrCancel。不妨把“取消“按钮的ModalResult属性设为mrCancel,这样,用户点击“取消”也会自动关闭窗口,并返回值mrCancel
      

  12.   

    哎呀,其实大家还没有明白我的意思,我是说如何制作一个一个从数据库中提取数据的窗体,即用户名和密码都在数据库中去了,也就是在登录窗体上面我放了一个TQuery组件,我要如何写里面的SQL属性呢?是写成select * from login表 where (?这个条件不知道怎么写)我知道上面大家所说的意思就是说事先自己给定一个用户名给他登录是吧?而我的意思就是说想作一个“对于新来的用户让他们自己先注册一个用户名,然后再进去。”大家有做过这样的东西吗?