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+''); 展开
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+''); 展开
2个回答
推荐于2016-10-22 · 知道合伙人软件行家
关注
展开全部
据个人理解,貌似不是什么大难题,你只要检查生成的语句中,最后一个字符是否是逗号,如果是逗号就删除。
示例代码如下:
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
展开全部
我不建议你这么做,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);
这样写就没有你上面的问题了,而且也方便调试,当然,还可以继续精简上面的代码,就看你自己了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询