delphi多查询条件自由组合问题

我在窗体上用CheckBox控件设置查询字段,设置方法如下:procedureTForm1.CheckBox1Click(Sender:TObject);beginifC... 我在窗体上用CheckBox控件设置查询字段,设置方法如下:
procedure TForm1.CheckBox1Click(Sender: TObject);begin if CheckBox1.Checked=true then begin CheckBox1.Hint:='b.oprdeptid 部门代码,'; CheckBox1.HelpKeyword:='b.oprdeptid,'; end else begin CheckBox1.Hint:=''; CheckBox1.HelpKeyword:=''; endend;
其他CheckBox控件设置方法都一样
问题是sql中,由于是用户自由选择查询字段,怎么判定用户选择的最后一个字段不能有逗号,group by中最后一个字段也不能有逗号
sql语句如下
ADOQuery1.sql.add('select '+CheckBox1.Hint+''+CheckBox2.Hint+''+CheckBox3.Hint+''+CheckBox4.Hint+''+CheckBox5.Hint+''+CheckBox6.Hint+''+CheckBox7.Hint+''+CheckBox8.Hint+''+' from 表1 a,表2 b'+' where a.key=b.key'+'group by' +CheckBox1.HelpKeyword+''+CheckBox2.HelpKeyword+''+CheckBox3.HelpKeyword+''+CheckBox4.HelpKeyword+''+CheckBox5.HelpKeyword+''+CheckBox6.HelpKeyword+''+CheckBox7.HelpKeyword+''+CheckBox8.HelpKeyword+'');
展开
 我来答
windblast
推荐于2016-10-22 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13621
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

据个人理解,貌似不是什么大难题,你只要检查生成的语句中,最后一个字符是否是逗号,如果是逗号就删除。


示例代码如下:


  s1 := CheckBox1.Hint+''+CheckBox2.Hint+''+CheckBox3.Hint+''+CheckBox4.Hint+''+CheckBox5.Hint+''+CheckBox6.Hint+''+CheckBox7.Hint+''+CheckBox8.Hint;
  if s1[Length(s1)]=',' then
    s1 := Copy(s1,1,Length(s1)-1);
    
  s2 := CheckBox1.HelpKeyword+''+CheckBox2.HelpKeyword+''+CheckBox3.HelpKeyword+''+CheckBox4.HelpKeyword+''+CheckBox5.HelpKeyword+''+CheckBox6.HelpKeyword+''+CheckBox7.HelpKeyword+''+CheckBox8.HelpKeyword;
  if s2[Length(s2)]=',' then
    s2 := Copy(s2,1,Length(s2)-1);
  
  sql := 'select '+ s1 + ''+ ' from 表1 a,表2 b where a.key=b.key group by '+ s2;
  ADOQuery1.sql.add(sql);

 

顺便提一句:


if CheckBox1.Checked then


就可以了,不用   = true

百度网友26bea30
2015-06-05 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:89.5万
展开全部

我不建议你这么做,sql语句进行拼装输出最好,比如:

var
str string;
str:='select ';
//组合出查询的内容
if(CheckBox1.checked=true)
begin
    str:=str+'CheckBox1.text';
end;
....
str:=str+' where ';
//组合出查询的条件
if(CheckBox1.checked=true)
begin
    str:=str+ '......'//.代表你的字段的填写什么的
end;
//使用Ado查询
Adoquery.add(str);

这样写就没有你上面的问题了,而且也方便调试,当然,还可以继续精简上面的代码,就看你自己了!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式