回 帖 发 新 帖 刷新版面

主题:为什么每次只能查询第一句话啊

我做的是复选框操作,单一其中某一个复选框是能成功的,但当复选两个以上的话,操作就不能成功,就好象只是选中了一个复选框
代码如下:
procedure Twannengform.RzBitBtn1Click(Sender: TObject);
var str,str1:string;
begin
  if not (rzcheckbox1.Checked or rzcheckbox2.Checked or  rzcheckbox3.Checked ) then
  begin
  showmessage('请选择查询范围');
  exit;
  end;
   if rzcheckbox1.Checked then str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间 ,bz 备注 from t_info where id="1" 
  else if rzcheckbox1.Checked and rzcheckbox2.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间,bz 备注 from t_info where (id="1" or id="2")'
   else if rzcheckbox1.Checked and rzcheckbox3.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间,bz 备注 from t_info where (id="1" or id="3")'
   else if rzcheckbox2.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间,bz 备注 from t_info where id="2"'
   else if rzcheckbox2.Checked and rzcheckbox3.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间,bz 备注 from t_info where (id="2" or id="3")'
   else if rzcheckbox3.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间,bz 备注 from t_info where id="3"'
   else if rzcheckbox1.Checked and rzcheckbox2.Checked and rzcheckbox3.Checked then
   str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间 ,bz 备注 from t_info';

   {if not (rzcheckbox4.Checked or rzcheckbox5.Checked or  rzcheckbox6.Checked or rzcheckbox7.Checked ) then
   begin
   showmessage('请选择查询的年级段!');
   exit;
   end;}
   if rzcheckbox4.Checked then str1:='and xh like "2003%"'
   else if (rzcheckbox4.Checked and rzcheckbox5.Checked) then str1:='and xh like "2003%" or xh like "2004%"'
   else if (rzcheckbox4.Checked and rzcheckbox5.Checked and rzcheckbox6.Checked) then str1:='and xh like "2003%" or xh like "2004%" or xh like "2005%"'
   else if rzcheckbox5.Checked then str1:='and xh like "2004"'
   else if (rzcheckbox5.Checked and rzcheckbox6.Checked) then str1:='and xh like "2004%" or "2005%"'
   else if (rzcheckbox5.Checked and rzcheckbox6.Checked and rzcheckbox7.Checked) then str1:='and xh like "2005%" or xh like "2004%" or xh like "2006%"'
   else if rzcheckbox6.Checked then str1:='and xh like "2005%"'
   else if (rzcheckbox6.Checked and rzcheckbox7.Checked) then str1:='and xh like "2005%" or xh like "2006%"'
   else if rzcheckbox7.Checked then str1:='and xh like "2006%"'
   else
   begin
   showmessage('请选择有意义的查询!,用户最多只能查询连续的三个年级段');
   exit;
   end;

   try
   with query1 do
   begin
   sql.Clear;
   sql.Add(str);
   sql.Add(str1);
   open;
   rzfieldstatus1.Caption:='共查询到'+inttostr(recordcount)+'条记录';
   end;
   except
   showmessage('查询失败!');
   end;
end;

回复列表 (共3个回复)

沙发

你自己跟着你的IF THEN ELSE看看.早错完了.还....
if rzcheckbox1.Checked 
 then....
 else if rzcheckbox1.Checked and rzcheckbox2.Checked 
       then.....
       else.... 
如果rzcheckbox1选中的话,后面的if then当然就不可能执行.;
如果rzcheckbox1没选中的话.(if rzcheckbox1.Checked and rzcheckbox2.Checked )
还判断rzcheckbox1干嘛..
哎.没法根你说.自己再看看吧.

板凳


现在问题是复选两个以上,操作就不能成功啊
请指点我啊

3 楼

var str:string;
i:integer;
begin
i:=0;
str:='select xh 学号,xm 姓名,xb 性别,bj 班级,sr 出生年月,jg 籍贯,lxfs 联系方式,qq QQ号码,sqssj 申请书时间,dxsj 党校时间,fzsj 推优时间,ybsj 预党时间,zzsj 转正时间 ,bz 备注 from t_info'
if rzcheckbox1.Checked then 
 begin
  str:=str+' where id=''1''';
  i:=i+1;
 end;
if rzcheckbox2.checked then
 begin 
   if i>0 then str:=str+' and' else str:=str+' where';
   str:=str+' id=''2''';
   i:=i+1;
 end;
if rzcheckbox3.checked then
 begin
  if i>0 then str:=str+' and' else str:=str+' where';
  str:=str+' id=''3''';
  i:=i+1;
 end;
这样写怎么样?你是不是想实现这种效果.多个复选框的话以此类推...

我来回复

您尚未登录,请登录后再回复。点此登录或注册