假设我现在已经又一个窗体Form1我想在程序中创建新的Form2应该怎么做呢?是使用Create()吗?窗体的show 方法和 showmodal 又什么区别呢?我应该怎么区分他们呢?小弟我用DELPHI做了一个简单的登陆窗口,当在EdtID中输入员工号(也就是ADOTable1所连接的表中ID字段)第一条记录还可以,可是如果第一次登陆输入后面的员工号(比如表中的第2条记录,第3条记录)就弹出“不存在该员工号!”敬请高手帮助!不知道我讲清楚了没有啊!我在线,敬请回!!!
procedure TFormLogin.BtnOKClick(Sender: TObject);
begin
   adotable1.Open;
  if EdtID.Text='' then
  showmessage('请您输入员工号!')
  else   if (EdtID.Text = trim(adotable1.FieldByName('STF_ID').AsString))
     and (EdtPSWD.Text=trim(adotable1.fieldbyname('PWD').AsString)) then
      begin
      if not adotable1.Eof then
        adotable1.Next;
        showmessage('正确的员工号!');
        form2.showmodal;
        EdtID.Text:=trim(adotable1.FieldByName('STF_ID').AsString);
      end
      else
      showmessage('不存在该员工号!');
      EdtID.Text:='';
      EdtPSWD.Text:='';
      EdtID.SetFocus;
end;

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    form2:=tform2.Create(self);
    form2.ShowModal ;
    form2.Free;
    end;end.
    两者的区别是:用Show时,焦点可以转到别的窗体上,用Showmedol只能在本窗上操作。
    。没有找到用户是因为你没有用循环,你用If怎么可能呢,表里的记录不会循环到最后有
    要用For或While循环才可以的
      

  2.   

    用一个查询控件,这样做
    qry.sql.text='select *from 你的表名 where STF_ID='''+edtid.text+''' and pas='''+edtpas.text+'''';
    qry.open;
    if qry.bof and qry.eof then
    showmessage('登陆不成功')
    else
    form2.show;
    用一个查询控件就行了.劝你看看书
      

  3.   

    谢谢你们二位,我也是刚学DELPHI 我得多向你们请教
      

  4.   

    我觉得你用ADOTABLE控件就不对,应该使用ADOQUERY,因为它有查询功能,你可以输入Select语句来查询你在EDIT中输入的ID,然后在与密码对照,才能验证。你用了ADOTABLE,也可以,但是没有定位符合条件的记录的语句,所以它只定位在第一条记录上,发生你所说的情况,如果你非要用ADOTABLE那ID选择的时候就用DBLookupcombobox控件吧,它可以选择用户ID,或者用LOCATE函数定位符合条件的记录
      

  5.   

    adotable1.Open時光標在第一條記錄的前面,是不會自動移動的。
      

  6.   

    在OnTime时间中,将数据集先Close然后Open可以实现,但效率不高
      

  7.   

    使用ADOQuery,然后用SQL语句进行查询后。记录就会自动移动吗? 也得用FOR循环才能实现吧!
      

  8.   

    创建新的Form2
    application.createform(tform2,form2);
    form2.show;這只是把窗體show出來而已並取得焦點.
    form2.showmodal;是把窗體的焦點鎖在這個form2上.
    如果不關掉form2那焦點就一直在form2上.
    登入窗口最好是用一個combobox,edit兩個來搭配.
    在登入窗口show事件寫
    adoquery1.sql.clear;
    adoquery1.sql.add('...');
    adoquery1.ExecSQL;
    adoquery1.active:=true;
    combobox1.items.clear;
    while not adoquery.eof do
      combobox1.items.add(adoquery1.fieldbyname('用戶名').asstring);
      adoquery1.next;
    end;
    這樣combobox1.text就可以先擇所有的用戶名.
    其它我就不多說了
      

  9.   

    我们这里有好多用户要使用系统,登陆是会不会从combobox中找到自己的名字太慢啊!
      

  10.   

    用lookupcombobox找出所有用户名称,通过ini文件使最近的用户放在第一个。我的系统是这么做的,只能讲这样的思路给你听!