procedure TLoginForm.BitBtn1Click(Sender: TObject);
var
tmp_pass:string;
begin
  if Combobox1.Text='' then exit;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from user where username=:t1');
  adoquery1.Parameters[0].Value:=trim(Combobox1.Text);
  ADOQuery1.Open;
  tmp_pass:=adoquery1.fieldbyname('userpass').AsString;//调用库中与用户名相关联的密码
  if trim(Edit1.Text)<>tmp_pass then
  begin
    application.MessageBox('密码输入错误','注意',mb_iconquestion+mb_ok);
  end
  else
  begin
    username:=trim(Combobox1.Text);
    loginForm.Hide;
    MainForm.Show;
  end;
end;运行时报错为[Error] login.pas(58): Incompatible types: 'TLabel' and 'String'

解决方案 »

  1.   

    what does "Username" refer to?
      

  2.   

    ADOQuery1.SQL.Add('select * from user where username=:t1');
    改成,
    ADOQuery1.SQL.Add('select * from user where username='':t1''');
    字符串需要''
      

  3.   

    用adoquery组件,表名为user,用户名字段是username,密码子段password
    用一个combobox显示用户,edit输入密码。密码正确后进入mainform.否则关闭。
      

  4.   

    pazee(耙子)你帮我看看好吗?我做了好几天了。在过两天就要交了。谢谢了
      

  5.   

    procedure TLogin_Win.FormCreate(Sender: TObject);
    begin
      LoginCount := 1;
      T_Login_zt.TableName := 'hsdw';
      T_login_zt.Open;
      while not T_Login_zt.Eof do
      begin
        Login_zt.Items.Add(T_Login_zt.fieldbyname('dwdm').asstring+'['+T_Login_zt.fieldbyname('dwmc').asstring+']');
        T_Login_zt.Next;
      end;end;procedure TLogin_Win.Login_ztChange(Sender: TObject);
    begin
      T_Login_zt.First;
      while (not T_Login_zt.Eof) and (trimright(T_Login_zt.fieldbyname('dwdm').asstring)<> trimright(copy(Login_zt.text,0,4))) do
        T_Login_zt.Next;
      ztdb := trimright(T_Login_zt.fieldbyname('dbname').asstring);
      with d_M.A_Conn2 do
      begin
        Close;
        ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=True;Data Source='+D_M.server+';User ID='+D_M.loginid+';Password='+D_M.loginpass;
        DefaultDatabase := ztdb;
        Open;
      end;
      with T_Login_czy do
      begin
        Close;
        Connection := D_M.A_Conn2;
        TableName := 'czy';
        Open;
        First;
      end;
      Login_Czy.Items.Clear;
      while not T_Login_Czy.Eof do
      begin
        Login_czy.Items.Add(trimright(T_Login_Czy.fieldbyname('czyxm').asstring));
        T_Login_Czy.next;
      end;end;procedure TLogin_Win.Login_czyChange(Sender: TObject);
    begin
      T_Login_Czy.Open;
      T_Login_Czy.first;
      while not T_Login_Czy.eof and (trimright(T_Login_Czy.FieldByName('czyxm').asstring)<>trimright(Login_czy.Text)) do
        T_Login_Czy.Next;
      pass := trimright(T_Login_Czy.fieldbyname('czymm').asstring);
    end;
    procedure TLogin_Win.Login_OKClick(Sender: TObject);
    begin
      T_Login_Czy.Open;
      if pass <> trimright(E_pass.text) then
      begin
          showmessage('ERROR Password!');
          E_Pass.clear;
          E_Pass.setfocus;
          LoginCount := LoginCount + 1;
          if LoginCount = 4 then
          begin
            Showmessage('登录失败,程序退出...');
            Login_Win.Close;
            Main_Win.Close;
          end;
      end
      else
      begin
        with Main_Win do
        begin
          Programstatus := true;
          czyid := Login_win.T_Login_czy.fieldbyname('czyid').asinteger;
          czyxm := Login_Win.T_Login_Czy.fieldbyname('czyxm').asstring;
          Main_StatBar.Panels[0].Text := formatdatetime('yyyy-mm-dd',date);
          Main_StatBar.Panels[1].Text := Login_win.T_login_zt.fieldbyname('dwdm').asstring + Login_win.T_login_zt.fieldbyname('dwmc').asstring;
          Main_StatBar.Panels[2].Text := Main_Win.czyxm;
          enabled := true;
          setfocus;
        end;
          self.close;
      end;
    end;这段程序绝对没有问题。原版拷贝
      

  6.   

    运行时报错为[Error] login.pas(58): Incompatible types: 'TLabel' and 'String'这个不是着关代码的问题。你看看其他的类型是不是有问题。双击调试下的提示
    看他定位在那一段代码上!!!!!!!!!!!!!1
      

  7.   

    username:=trim(Combobox1.Text);这句中
    username是什么呀,变量还是Tlabel控件的name呀,
    如果是后者username.caption:=trim(Combobox1.Text);
      

  8.   

    username:=trim(Combobox1.Text);
    大概应改成:
    username.Caption:= trim(Combobox1.Text);
      

  9.   

    if trim(Edit1.Text)<>tmp_pass then
      begin
        application.MessageBox('密码输入错误','注意',mb_iconquestion+mb_ok);
      end
      else
      begin
        username:=trim(Combobox1.Text);  ///username?????????????????是什么??
        loginForm.Hide;
        MainForm.Show;
      end;
    end;
      

  10.   

    username?????????????????是什么??
    EDIT用户名
      

  11.   

    adoquery1.fieldbyname('userpass').value;
      

  12.   

    我又写了一段,你们看看,第一段是在combobox1中显示用户名,第二段是验证密码!!结果是没错了,但是不用输入密码就可以进了,输入密码后却不能进。为什么?procedure TLoginForm.ADOQuery1AfterOpen(DataSet: TDataSet);
    begin
     while not adoquery1.eof do
    begin
    username.items.add(adoquery1.fields[0].asstring);
    adoquery1.Next;
    end;
    end;procedure TLoginForm.Button1Click(Sender: TObject);begin
    adoquery1.close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * from user_table where username="'+username.SelText+'"') ;
    adoquery1.open;
    if pswedit.text=adoquery1.fields[1].AsString then
    begin
    mainform.Show;
    loginform.Hide;
    end
    else
    close;
    end ;请指教
      

  13.   

    注意这一句:
    if pswedit.text=adoquery1.fields[1].AsString then
    begin
      mainform.Show;
      loginform.Hide;
    end
    else
      close;
    1。第一个问题:
        当adoquery1打开时,定位到第一条记录,然后判断pswedit的值是否和adoquery1的第一个字段的值相等;如果相等,则主窗口显示,登陆窗口隐藏
    -----接着注意了:
      如果不相等,则自己关闭。------然后呢?登陆窗口是主窗口吗?如果不是的话自己关闭后,对主窗口没有任何影响。所以在这一段应该加上关闭主窗口的代码。2。第二个错误:
         每次点击button1的时候重新读数据库,生成数据集,这给服务器增加了很大的压力,如果只有一个人登录还好,如果有很多人同时登录呢?
         我觉得对于选择操作员和输入认证密码可以只读一次就够了。你可以看看我的例子:T_login_czy指数据库中的操作员库,也可以用query实现。
         一次读取,第一次放到操作员选择的列表,第二次判断密码。完全可以在本地完成。