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

解决方案 »

  1.   

    应用服务器返回的结果集和ado连sql server有区别嘛?不太懂,关注
      

  2.   

    我手头有的关于三层的书都没有这方面的介绍,请高手指点一二。目前小弟只是做了一个用ADO连接可以从SQL中取出用户名和密码,确认登录的过程,可有同学说不能这样做,这样做是二层了,只是通过DELPHI和后台SQL连接起来,但没有经过应用服务器,我不知道经过应用服务器该怎样做。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.   

    登陆框是一个相对简单的问题, 如果这个都解决不了,你的程序就写不下去了
    你取数据库中的用户与密码信息应该在课户端用一个clientdataset控件来取吧,clientdataset与客户端的socketconnection或者dcomconnection连接,这两个控件又与应用程序服务器相连,并通过应用程序服务器访问数据库的。