for 循环嵌套两个if, 条件只满足前面的if,为什么后面一个if的语句都会执行

Sam大哥 2016-10-18 01:24:32
procedure Tmulti_box.Edit2KeyPress(Sender: TObject; var Key: Char);
var
i:integer;
begin
if Key=#13 then
with ADOQuery4 do
begin
Close;
sql.Text:='select * from Sunitscanning where [2D_sn]='''+trim(edit2.Text)+''' and s_status=0 ';
open;
if not IsEmpty then
begin
for i:= 0 to 9 do
if a[i]=Edit2.text then
begin
showMessage('ABC!');
Edit2.Text:='';
Edit2.SetFocus;
end;
if a[i]<>Edit2.text then
begin
a[SCountpcs]:=Edit2.text;
inc(SCountpcs);
SpeedButton1.Caption:=InttoStr(SCountpcs);
ShowMessage(IntToStr(SCountpcs));
ShowMessage(a[0]);
Edit1.Text:='';
Edit2.Text:='';
Edit1.SetFocus;
end;
end
else
begin
showMessage('BCD!');
edit2.Text:='';
edit2.SetFocus;
end;


...全文
2933 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
reverzeng 2016-11-08
  • 打赏
  • 举报
回复
路过
qq_36549804 2016-10-31
  • 打赏
  • 举报
回复
同意楼上观点,在第二个if 也即第一个if .....end 后面加一个 else 即 if...end else if ....end;
莫鸣 2016-10-25
  • 打赏
  • 举报
回复

 var
        i:integer;
 begin
    if Key=#13 then
       with ADOQuery4 do
        begin
          Close;
           sql.Text:='select * from Sunitscanning where [2D_sn]='''+trim(edit2.Text)+''' and s_status=0 ';
           open;

           if not IsEmpty then
             begin
                  for i:= 0 to 9 do
                  if a[i]=Edit2.text then
                   begin
                    showMessage('ABC!');
                    Edit2.Text:='';
                    Edit2.SetFocus;
                  end
                  else
                   if a[i]<>Edit2.text then
                 begin
                    a[SCountpcs]:=Edit2.text;
                    inc(SCountpcs);
                    SpeedButton1.Caption:=InttoStr(SCountpcs);
                    ShowMessage(IntToStr(SCountpcs));
                    ShowMessage(a[0]);
                    Edit1.Text:='';
                    Edit2.Text:='';
                    Edit1.SetFocus;
                  end;
             end
             else
             begin
                 showMessage('BCD!');
                 edit2.Text:='';
                 edit2.SetFocus;
             end;
      end;
 end;
Sam大哥 2016-10-20
  • 打赏
  • 举报
回复
引用 9 楼 leeky 的回复:
if a[i]=Edit2.text then begin showMessage('ABC!'); Edit2.Text:=''; //此处改变了Edit2.Text,影响后面的判断, Edit2.SetFocus; end // ; else // if a[i]<>Edit2.text then begin a[SCountpcs]:=Edit2.text; inc(SCountpcs); SpeedButton1.Caption:=InttoStr(SCountpcs); ShowMessage(IntToStr(SCountpcs)); ShowMessage(a[0]); Edit1.Text:=''; Edit2.Text:=''; Edit1.SetFocus; end;
一样的问题,第一次重复会报错,第二次重复就不报错了,不知道哪里的问题
leeky 2016-10-20
  • 打赏
  • 举报
回复
if a[i]=Edit2.text then begin showMessage('ABC!'); Edit2.Text:=''; //此处改变了Edit2.Text,影响后面的判断, Edit2.SetFocus; end // ; else // if a[i]<>Edit2.text then begin a[SCountpcs]:=Edit2.text; inc(SCountpcs); SpeedButton1.Caption:=InttoStr(SCountpcs); ShowMessage(IntToStr(SCountpcs)); ShowMessage(a[0]); Edit1.Text:=''; Edit2.Text:=''; Edit1.SetFocus; end;
Sam大哥 2016-10-20
  • 打赏
  • 举报
回复
引用 7 楼 leeky 的回复:
if a[i]=Edit2.text then begin showMessage('ABC!'); Edit2.Text:=''; //此处改变了Edit2.Text,影响后面的判断, Edit2.SetFocus; end; if a[i]<>Edit2.text then begin a[SCountpcs]:=Edit2.text; inc(SCountpcs); SpeedButton1.Caption:=InttoStr(SCountpcs); ShowMessage(IntToStr(SCountpcs)); ShowMessage(a[0]); Edit1.Text:=''; Edit2.Text:=''; Edit1.SetFocus; end;
确实只能判断个一次,第个重复记录就判断不出来了,像这种情况要如何修改
baidu_29043823 2016-10-19
  • 打赏
  • 举报
回复
你的for循环最好用上begin end,不然容易出错
baidu_29043823 2016-10-19
  • 打赏
  • 举报
回复
if a[i]<>Edit2.text then 前面加上else,再把上一行的end后面的;去掉
cuixd2020 2016-10-19
  • 打赏
  • 举报
回复
procedure Tmulti_box.Edit2KeyPress(Sender: TObject; var Key: Char); var i:integer; begin if Key=#13 then begin with ADOQuery4 do begin Close; sql.Text:='select * from Sunitscanning where [2D_sn]='''+trim(edit2.Text)+''' and s_status=0 '; open; if not IsEmpty then begin for i:= 0 to 9 do begin if a[i]=Edit2.text then begin showMessage('ABC!'); Edit2.Text:=''; Edit2.SetFocus; end; if a[i]<>Edit2.text then begin a[SCountpcs]:=Edit2.text; inc(SCountpcs); SpeedButton1.Caption:=InttoStr(SCountpcs); ShowMessage(IntToStr(SCountpcs)); ShowMessage(a[0]); Edit1.Text:=''; Edit2.Text:=''; Edit1.SetFocus; end; end end else begin showMessage('BCD!'); edit2.Text:=''; edit2.SetFocus; end; end; end; end;
leeky 2016-10-19
  • 打赏
  • 举报
回复
if a[i]=Edit2.text then begin showMessage('ABC!'); Edit2.Text:=''; //此处改变了Edit2.Text,影响后面的判断, Edit2.SetFocus; end; if a[i]<>Edit2.text then begin a[SCountpcs]:=Edit2.text; inc(SCountpcs); SpeedButton1.Caption:=InttoStr(SCountpcs); ShowMessage(IntToStr(SCountpcs)); ShowMessage(a[0]); Edit1.Text:=''; Edit2.Text:=''; Edit1.SetFocus; end;
lyhoo163 2016-10-18
  • 打赏
  • 举报
回复
procedure Tmulti_box.Edit2KeyPress(Sender: TObject; var Key: Char);
var i:integer;
begin
  if Key=#13 then
  begin
    with ADOQuery4 do
    begin
      Close;
      sql.Text:='select * from Sunitscanning where [2D_sn]='''+trim(edit2.Text)+''' and s_status=0 ';
      open;
      if not IsEmpty then
      begin
        for i:= 0 to 9 do
        begin
          if a[i]=Edit2.text then
          begin
            showMessage('ABC!');
            Edit2.Text:='';
            Edit2.SetFocus;
          end;
          if a[i]<>Edit2.text then
          begin
            a[SCountpcs]:=Edit2.text;
            inc(SCountpcs);
            SpeedButton1.Caption:=InttoStr(SCountpcs);
            ShowMessage(IntToStr(SCountpcs));
            ShowMessage(a[0]);
            Edit1.Text:='';
            Edit2.Text:='';
            Edit1.SetFocus;
          end;
        end;
      end
      else begin
        showMessage('BCD!');
        edit2.Text:='';
        edit2.SetFocus;
      end;
    end;
  end;
end;
这样试试。
jjpweb 2016-10-18
  • 打赏
  • 举报
回复
第二个if前加个else
Frank6600 2016-10-18
  • 打赏
  • 举报
回复
for 循环没有加begin...end

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧