在一个三层结构中如何设置用户名和密码登录?应用服务器,客户端和后台SQL数据服务器,我想实现的是打开客户端的话,首先出现的是一个用户登录的界面,用户名和密码在SQL数据服务器当中,使用ADO连接SQL,用客户端激发应用服务器,通过应用服务器连接SQL来实现用户登录的确认过程,ADO组件是在应用服务器中用到的。可能我说的不是太清楚,请见谅。谢谢。

解决方案 »

  1.   

    不论如何,你应了解到,你的程序和数据服务器的连接是已定好了的,比如由DBA给你一个合适的身份,那么在程序运行时就和DB服务器进行了连接,然后你才能通过代码间的验证实现用户身份的验证,不知你明白没?
      

  2.   

    4楼的大哥,我已经说了不能这样做,我的意思是从应用服务器这一部分来实现,你说的这个功能我已经实现
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    uses unit2;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    application.Terminate;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    if datamodule2.loginapp(edit1.Text,edit2.Text) then
        begin
            showmessage('登陆成功');
        end else
              begin
                  showmessage('登陆失败');
              end;
    end;end.
    unit Unit2;interfaceuses
      SysUtils, Classes, DB, ADODB,dialogs;type
      TDataModule2 = class(TDataModule)
        ADOConnection1: TADOConnection;
        ADOCommand1: TADOCommand;
        ADOQuery1: TADOQuery;
      private
        { Private declarations }
      public
        { Public declarations }
        function loginapp(username,passwd:string):boolean;
      end;
    Const
      SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
                                    +'Jet OLEDB:Database Password=%s;';var
      DataModule2: TDataModule2;implementationuses Unit1;{$R *.dfm}
    function setadoaccess(mdbpath:string;passwd:string):string;
    begin
    mdbpath:=trim(mdbpath);
    passwd:=trim(passwd);
    result:=format(SConnectionString,[mdbpath,passwd]);
    end;
    function tdatamodule2.loginapp(username,passwd:string):boolean;
    begin
        result:=false;
        with adoquery1 do
            begin
                close;
                sql.clear;
                sql.add('select * from logininfo where usernames=:username and passwd=:passwd');
                parameters.ParamByName('username').Value:=trim(username);
                parameters.ParamByName('passwd').Value:=trim(passwd);
                   try
                open;
                if recordcount>0 then
                    result:=true;
                except on e:exception do
                    begin
                        showmessage(e.Message);
                    end;                                                                       end;
            end;
    end;end.这是原来做的代码,但经过应用服务器,把ADO的这个连接过程放在应用服务器部分小弟很是迷茫啊!
      

  3.   

    呵呵,从网上找些三层的例子看看就知道了,有关ADO,应用层是不去操心的
      

  4.   

    有了这个代码还不会?是不是不会怎么在应用服务器加函数啊?用type library。多看看书吧,很容易的。