在Delphi中以ADO方式登录SQL2000
?牐?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。
?牐犗低称舳螅鹊雒苈胄Q榇翱冢淙隨QL Server中的合法用户名、SQL Server名、用户密码,按“进入”即进行口令认证,有三次机会,三次均错即退出系统。由于认证期间,系统未打开任何数据表,因此数据非常安全。通过全面使用ADO引擎,系统发布时非常简单,只有一个EXE文件,不必预装BDE相关文件也不必装SQL Server的前台工具,无论是局域网用户还是RAS远程用户都一视同仁。
?牐牨境绦虻募际鹾诵脑谟?:生成AdoConnection的连接字符串,赋给:AdoConn.ConnectionString,然后执行AdoConn.Open方法,同时捕捉错误,成功则Connected必定为True,失败则提示用户再试。注意,三个参数任一错误都会导致失败。
?牐牭ピ性贗mplementation关键字前有一公用函数PWCheck,负责管理密码校验表单,其它单元可直接执行它。
?牐爑nit EnterSys;
?牐爄nterface
?牐爑ses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
?牐燚ialogs, StdCtrls, Buttons,UnitDMApply;
?牐爐ype
?牐燭FrmEnter = class(TForm)
?牐牎?
?牐牎?
?牐爌rivate
?牐爗 Private declarations }
?牐爌ublic
?牐爗 Public declarations }
?牐爀nd;
?牐爒ar
?牐燜rmEnter: TFrmEnter; TryTimes:byte;
?牐燜unction PWCheck:boolean; //可由其它单元调用,密码校验
?牐爄mplementation
?牐爗$R *.DFM}
?牐爌rocedure TFrmEnter.ButtonTryClick(Sender: TObject);
?牐爒ar aPassWord,aOperName,aSqlDB,aSqlServer,Apply_ConnStr:string;
?牐燽egin
?牐燬creen.Cursor:=crHourGlass;
?牐燼OperName:=EditOper.text; //操作员姓名
?牐燼SqlDB:='Apply2000'; //尝试登录的数据库名
?牐燼SqlServer:=EditServer.Text; //服务器名
?牐燼PassWord:=Trim?烢ditPassWord.Text); //密码串
?牐燗pply_ConnStr:='Provider=SQLOLEDB.1;Password='+aPassWord
?牐?+';Persist Security Info=True;User ID='+aOperName
?牐?+';Initial Catalog='+aSQLDB+';Data Source='+aSqlServer;
?牐燭ry
?牐燭ryTimes:=TryTimes+1;
?牐燿mApply.AdoConn.Close;
?牐燿mApply.AdoConn.ConnectionString:=Apply_Co
?牐爊nStr; //ADO连接字符串
?牐燿mApply.AdoConn.Open;
?牐爄f dmApply.AdoConn.Connected then begin
?牐燬howMessage('Apply2000登录成功');
?牐燤odalResult:=mrOK
?牐爀nd else ModalResult:=mrCancel;
?牐爀xcept
?牐爄f TryTimes<3 then begin
?牐燘eep;
?牐燬creen.Cursor:=crDefault;
?牐燬howmessage('请再试一次!还有'+Trim(IntToStr(3-TryTimes))+'次机会');
?牐燛ditOper.SetFocus; //光标定位于第一编辑框
?牐爀nd else ModalResult:= mrCancel; //三次后退出
?牐爀nd;
?牐爀nd;
?牐爌rocedure TFrmEnter.FormCreate(Sender: TObject);
?牐燽egin
?牐燭rytimes:=0; //尝试的次数
?牐爀nd;
?牐爌rocedure TFrmEnter.FormActivate(Sender: TObject);
?牐燽egin
?牐燛ditOper.SetFocus; //光标定位于第一编辑框
?牐爀nd;
?牐爌rocedure TFrmEnter.FormDestroy(Sender: TObject);
?牐燽egin
?牐燤odalResult:= mrCancel;
?牐爀nd;
?牐爌rocedure TFrmEnter.FormKeyPress(Sender: TObject; var Key: Char);
?牐燽egin
?牐爄f key=#13 then begin //判断是否回车键
?牐爇ey:=#0;
?牐爌erform(WM_NEXTDLGCTL,0,0); //移动到下一控件
?牐爀nd;
?牐爀nd;
?牐爌rocedure TFrmEnter.CboServerExit(Sender: TObject);
?牐燽egin
?牐燛ditPassWord.Text:='';
?牐?//清空密码框
?牐爀nd;
?牐燜unction PWCheck:boolean;
?牐爒ar FrmEnter:TFrmEnter;
?牐燽egin
?牐燜rmEnter:=TFrmEnter.Create(Application); //创建登录表单
?牐爄f FrmEnter.ShowModal=mrOK then Result:=True
?牐爀lse Result:=false;
?牐燜rmEnter.free; //释放登录表单
?牐爀nd;
?牐爌rocedure TFrmEnter.ButtonExitClick(Sender: TObject);
?牐燽egin
?牐爏elf.Close;
?牐爀nd;
?牐爀nd.
?牐犚陨铣绦蚴视糜贒elphi5与SQL7或SQL2000。
?牐?