如何让用户在程序开始时输入数据库的用户名和密码,输入框用edit控件,而不使用delphi缺省的弹出框。(25分)

  • 主题发起人 主题发起人 vpp
  • 开始时间 开始时间
V

vpp

Unregistered / Unconfirmed
GUEST, unregistred user!
连接SQL Server数据库,在程序中自己设计输入用户名和密码的输入框,
应该怎样把输入值取出来,给数据库判断输入是否正确。
程序中有一个DBGrid1,一个Query1,一个Datasource1,两个Edit,用来输入用户名和密码,一个确定按钮。
DataSource1的dataset属性为Query1,
DBGrid1的datasource属性为DataSource1
 
使用database 连接数据库修改database的login属性为false
 
自己在作个登录的窗口
 
我就是问怎么做啊,
用database的login属性为false,好像就没有输入框了,这样不好,
我想通过自己做的输入框来传送用户名和密码
 
登录窗口:loginfrm
主窗口:mainfrm

procedure mainfrm.create()
begin
loginfrm:=Tloginfrm.create(appliction);
loginfrm.showmodal;
...
end;
//loginfrm动态创建,database动态连接
 
自己做也很简单啊,你自己做个FORM,将输入的用户名和密码传到param里就可以了
应该是处理onlogin吧,修改LoginParams就可以了
 
我是问,自己设计的输入框,输入了用户名和密码后,下一步如何判断这个用户名和密码是否正确,如何去连接数据库。
 
南宫吹云,具体怎么传呢,
比如edit1中输入了用户名sa,
edit2中输入了密码as,
具体传送的语句应该怎么写了,
 
Loginfrm上放query
query的连接数据用输入的数据啊
query当然要设置成动态连接了。
我以前做的是用ado实现的很顺利
 
procedure TfmMain.FormCreate(Sender: TObject);
begin
fmLogin := TfmLogin.Create(self); //创建登录窗口
fmLogin.ShowModal;
fmLogin.Free;

if g_Login=false then //检测登录是否成功;
Close;
end;
密码框设计如下:
function TfmLogin.doLogin(password:String): Boolean;
begin
if password=PASS_WORD then
result := True
else
result := False;
end;

procedure TfmLogin.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
if doLogin(Edit1.Text)=false then
begin
if Application.MessageBox(' 密码输入错误,是否继续输入? ','提示',MB_YESNO)=IDNO then
begin
MainFormUnit.g_Login := False;
Close;
end;
end
else
begin
MainFormUnit.g_Login := True;
Close;
end;
end;

procedure TfmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;[:D][:D]
 
zerg112879,我是要去连接数据库的啊。
 
能连上,说明 输入就正确啊,hoho
 
你可以在自己做的登陆窗体里连数据库,可以保存连接参数到ini文件里(最好加密),
然后在登陆的时候在数据库里检索登陆的密码,权限等。(很多程序就是这么做的)
 
vpp:你在loginfrm里用输入的用户名和密码连接数据库啊,
也就是说数据库中必须有此用户的登录权限和角色才能登录数据库打开你的用户表去检查
该用户在应用程序中的权限啊!
 
nana_1978,我是问具体的连接的语句,我现在只有两个edit控件,然后在里面输入了用户名和密码,
然后按“确定”按钮,然后呢?我问然后怎么做?怎么去连接数据库。
 
你的数据库里有你要输入的用户名的登录名么?该用户有权对用户表访问么?
一般系统初始化时都是使用sa做登陆名或预设一个用户,该用户登陆后可以添加修改。
mainfrm.database.loginprompt:=false;

//输入结束
var sql_str:string;
begin

{如果是ado这里可以直接设置adoquery的connectionstring}
sql_str:='';
sql_str:='select * from usertable where username='+''''+trim(edit1.text)+''''+
' and password='+''''+trim(edit2.text)+'''';
loginfrm.query.sql.clear;
loginfrm.query.sql.add(sql_str);
loginfrm.query.ExecSQL;

end;


procedure mainfrm.databaselogin(database:Tdatabase;Loginparams:Tstrings);
begin
loginparams.values['user name']:=loginfrm.edit1.text;
loginparams.values['password']:=loginfrm.edit2.text;
end;
 
哦,对了,是在输入完毕login database
建议采用ado处理,会简化操作
ADOQuery1.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(edit2.Text)+
';Persist Security Info=True;User ID='+trim(edit1.Text)+
';Initial Catalog={数据库名};Data Source={服务器名}';
选择连接方式就是用户输入用户名和密码。
 
procedure TLogin.Button1Click(Sender: TObject);
begin
timeid:=timeid+1;
if timeid<=3 then
begin
dm.LoginTbl.Locate('UserName',combobox1.Items[combobox1.ItemIndex],[]);
if (edit1.Text=dm.LoginTbl.FieldByName('userpassword').AsString) then
begin
checklog:=true;
modalresult:=mrOk;
end
else
begin
showmessage('非法口令,请您输入正确的口令!');
edit1.SetFocus;
end

end
else
begin
showmessage('对不起,你不能进入该系统!');
application.Terminate;
end
end;
 
用输入的用户名和密码就打开连接(用Try),如果打不开就错了,打开就行了啊。
 
分太少提不起兴趣
 

Similar threads

后退
顶部