我自己设计的登陆窗体有一个下拉窗口来选择数据哭名称
2个edit用来输入用户和密码
一个button来进行登陆事件,我的登陆代码都在
procedure TF_login.Button1Click(Sender: TObject);中
我的思路是开始断开数据库的连接.然后用过滤器提取edit的text与数据库表中
信息核对,核对通过即登陆成功
现在就是还是高不清楚那个数据库的地址怎么设,代码这么写
connectionstring的值是一大串代码,我也不是很清楚怎么拼接(呵呵)
就是这样的:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=mmx;Data Source=mmx;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MMX;Use Encryption for Data=False;Tag with column collation when possible=False
还是看看我的这个源码吧
很简单的:  
procedure TF_login.Button1Click(Sender: TObject);
var
passwd,passwrd:string;
begin
with DataModule1 do
beginadoconnection1.loginprompt:=false;
ADOConnection1.connected:=false;
                            //设置服务器地址,这代码怎么写啊?
ADOConnection1.connected:=true; //连接到数据库
T_user.Filter:='ID='''+i_name.text+''''; //提取用户信息
T_user.Filtered:=true;
T_user.open;
if T_user.recordcount=1 then //判断用户是否存在
begin
passwd:=i_passwd.Text; //获取输入密码
if length(passwd)>5 then
begin
passwd:=copy(passwd+passwd,1,10); 
end;
passwrd:=T_user['PASSWD']; //获取数据库的密码
if (passwrd=passwd) then
//F_main.login:=true // 这里有个问题,请问登陆常量login这个在那里定义啊?
else
Application.MessageBox('请重新输入密码','密码错误',MB_OK);
end
else
Application.MessageBox('请确认用户名','无此用户',MB_OK);
T_user.close;
end;
//if F_main.login then F_login.close;//同上问题end;procedure TF_login.Button2Click(Sender: TObject);
begin
close;
end;end.看这样我的功能能实现吗>还有什么地方有错?
麻烦了  
明天要交了

解决方案 »

  1.   

    为什么是登陆常量呢 
    login若是常量的话 就不可以修改了
    我觉得你还是连接好了数据库以后 用一个adoquery吧
    选取你的数据库中用户名称为输入的用户名称 看看有没有返回值的 有就是存在了查询该用户的密码是什么 不存在直接提示不存在该用户 最后在判断密码是否正确 决定进入或者退出就可以了
      

  2.   

    为什么是登陆常量呢 
    login若是常量的话 就不可以修改了
    我觉得你还是连接好了数据库以后 用一个adoquery吧
    选取你的数据库中用户名称为输入的用户名称 看看有没有返回值的 有就是存在了查询该用户的密码是什么 不存在直接提示不存在该用户 最后在判断密码是否正确 决定进入或者退出就可以了
      

  3.   

    我觉得还不是把连接数据库的那些关键字存到注册表中或某个ini文件中,运行程序的时候再组成连接字符串,登录的时候数据库应该是连接上了的
      

  4.   

    下面是我的一个程序用的代码,代码是写在DataModule的OnCreate事件中有。
    var
      myUserID,mySQLServerIP,myPassword:String;
      Reg:TRegistry;
    begin
      Reg:=Tregistry.Create;                //创建Tregistry对象的实例
      Reg.Rootkey := HKEY_CURRENT_USER ;    //设置根键名称
      Reg.OpenKey('\Software\Microsoft\Managerr_Achive',True);
      try
        myUserID:=Reg.ReadString('UserID');
        mySQLServerIP:=Reg.ReadString('SqlServerIP');
        myPassword:=Reg.ReadString('SqlServerPwd');
        myPassWord:=Decrypt(myPassword,0);
      except
        Application.MessageBox('本机尚未注册 SQL SERVER 服务器!!请先执行<SQL服务器定义.EXE> 注册SQL SERVER服务器!!  ','提示',MB_OK+MB_IconInformation);
        Application.Terminate;
      end;
      Reg.CloseKey;
      Reg.Free;                             //关闭注册表
      try
        with AdoConnection1 do
          begin
            LoginPrompt:=False;
            Connected:=False;        ConnectionString:='Provider=SQLOLEDB.1;Password='+myPassword+';'+
                              'Persist Security Info=True;'+
                              'User ID='+myUserID+';'+
                              'Initial Catalog=Cuctomer_Manager;'+
                              'Data Source='+mySQLServerIP+';'+
                              'Use Procedure for Prepare=1;'+
                              'Auto Translate=True;'+
                              'Packet Size=8192;'+
                              'Use Encryption for Data=False;'+
                              'Tag with column collation when possible=False';
            Connected:=True;
          end;
      except
        Application.MessageBox(pchar('无法登录 SQL SERVER 服务器 !! 有可能是下列原因'+#13+#13+'1、数据库服务器未开 --> 通知系统管理员开机'+#13+'2、本机未定义SQL SERVER服务器 --> 通知系统管理员定义本机   '),'提示',MB_OK+MB_IconInformation);
        AdoConnection1.Close;
        Application.Terminate;
      end;
    end;-------------
    因为我的程序常到连接到不同的SQL服务器,所以还单独做了一个定义SQL器地址的程序,那个程序的唯一目的就是把SQL服务器的地址、登录名和密码写到注册表中
      

  5.   

    说错了
    那个login是变量
    这里的变量值改变来触发主窗体的事件