在Delphi中以ADO方式登录SQL2000 梁焯彬 2001年 33期 Delphi是现今Windows平台上最好用的开发工具之一,而SQL Server2000又是微软最重要的数据库产品,功能强大,操作方便,两者结合便构成一个完美的Client-Server开发环境。结合微软的ADO数据引擎开发出来的数据库产品,速度快、界面优美而且效率高。SQL server拥有一套严密的登录认证机制,自动维护登录者列表,开发者可以直接利用这种安全机制,省去自己创建用户密码表的麻烦,那么如何在Delphi下登录到SQL Server数据库上呢?笔者结合实践,示范如下:   1.创建一个新的工程,命名为PrjApply,同时创建一个表单作为主窗口,命名为FormMain,可加入主菜单MainMenu;   2.创建一个数据模块,命名为DMApply,加入一个AdoConnection控件,命名为AdoConn,设LoginPrompt=false,保存为UnitDMApply.pas;   3.创建一个表单,命名为FrmEnter,设KeyPreview:=True,引用UnitDMApply单元,保存为EnterSys.pas。   4.在主表单FormMain的OnShow中加入: If not PWCheck then Application.Terminate; //认证失败则退出。   5.为测试程序,请在SQL Server中新建一个数据库Apply2000,并加入新用户,如“梁焯彬”,许可使用Apply2000数据库,角色为DB_Owner。   系统启动后,先弹出密码校验窗口,输入SQL Server中的合法用户名、SQL Server名、用户密码,按“进入”即进行口令认证,有三次机会,三次均错即退出系统。由于认证期间,系统未打开任何数据表,因此数据非常安全。通过全面使用ADO引擎,系统发布时非常简单,只有一个EXE文件,不必预装BDE相关文件也不必装SQL Server的前台工具,无论是局域网用户还是RAS远程用户都一视同仁。   本程序的技术核心在于:生成AdoConnection的连接字符串,赋给:AdoConn.ConnectionString,然后执行AdoConn.Open方法,同时捕捉错误,成功则Connected必定为True,失败则提示用户再试。注意,三个参数任一错误都会导致失败。   单元中在Implementation关键字前有一公用函数PWCheck,负责管理密码校验表单,其它单元可直接执行它。   unit EnterSys;   interface   uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, Buttons,UnitDMApply;   type   TFrmEnter = class(TForm)   ……   ……   private   { Private declarations }   public   { Public declarations }   end;   var   FrmEnter: TFrmEnter; TryTimes:byte;   Function PWCheck:boolean; //可由其它单元调用,密码校验   implementation   {$R *.DFM}   procedure TFrmEnter.ButtonTryClick(Sender: TObject);   var aPassWord,aOperName,aSqlDB,aSqlServer,Apply_ConnStr:string;   begin   Screen.Cursor:=crHourGlass;   aOperName:=EditOper.text; //操作员姓名   aSqlDB:='Apply2000'; //尝试登录的数据库名   aSqlServer:=EditServer.Text; //服务器名   aPassWord:=TrimEditPassWord.Text); //密码串   Apply_ConnStr:='Provider=SQLOLEDB.1;Password='+aPassWord   +';Persist Security Info=True;User ID='+aOperName   +';Initial Catalog='+aSQLDB+';Data Source='+aSqlServer;   Try   TryTimes:=TryTimes+1;   dmApply.AdoConn.Close;   dmApply.AdoConn.ConnectionString:=Apply_Co   nnStr; //ADO连接字符串   dmApply.AdoConn.Open;   if dmApply.AdoConn.Connected then begin   ShowMessage('Apply2000登录成功');   ModalResult:=mrOK   end else ModalResult:=mrCancel;   except   if TryTimes<3 then begin   Beep;   Screen.Cursor:=crDefault;   Showmessage('请再试一次!还有'+Trim(IntToStr(3-TryTimes))+'次机会');   EditOper.SetFocus; //光标定位于第一编辑框   end else ModalResult:= mrCancel; //三次后退出   end;   end;   procedure TFrmEnter.FormCreate(Sender: TObject);   begin   Trytimes:=0; //尝试的次数   end;   procedure TFrmEnter.FormActivate(Sender: TObject);   begin   EditOper.SetFocus; //光标定位于第一编辑框   end;   procedure TFrmEnter.FormDestroy(Sender: TObject);   begin   ModalResult:= mrCancel;   end;   procedure TFrmEnter.FormKeyPress(Sender: TObject; var Key: Char);   begin   if key=#13 then begin //判断是否回车键   key:=#0;   perform(WM_NEXTDLGCTL,0,0); //移动到下一控件   end;   end;   procedure TFrmEnter.CboServerExit(Sender: TObject);   begin   EditPassWord.Text:='';   //清空密码框   end;   Function PWCheck:boolean;   var FrmEnter:TFrmEnter;   begin   FrmEnter:=TFrmEnter.Create(Application); //创建登录表单   if FrmEnter.ShowModal=mrOK then Result:=True   else Result:=false;   FrmEnter.free; //释放登录表单   end;   procedure TFrmEnter.ButtonExitClick(Sender: TObject);   begin   self.Close;   end;   end.   以上程序适用于Delphi5与SQL7或SQL2000。   