我使用了两个Tcombobox组件,和两个TDATEEDIT组件,想要达到的效果是这样:
combobox1的Items属性值有以下几个一班,二班,三班(bj),combobox2的ITEMS属性有:是用来排序的
不排序,按姓名(XM),按日期(regedate)三种,两个TDATEEDIT组件分别是开始和结束时间(条件),我现在的代码是:
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from student')
adoquery1.sql.add(' where banji=:banji and regedate<:regedate1 and regedate>:regedate2');
adoquery1.sql.add('order by :paixu asc');
adoquery1.Parameters.ParamValues['banji']:=COMBOBOX1.TEXT;
adoquery1.Parameters.ParamValues['paixu']:=?????;
adoquery1.Parameters.ParamValues['regedate1 ']:=DATEEDIT1.DATE;
adoquery1.Parameters.ParamValues['regedate2 ']:=DATEEDIT2.DATE;
adoquery1.open;
但是如果我想要这样的结果COMbobox1.text没有内容时候,可以查询全部记录,但是如果我的combobox1.text没有内容的时候,什么也查不出来,
2.排序的问题又怎么办?我不知道?????加什么,如果按XM排序的话,
adoquery1.Parameters.ParamValues['paixu']:='xm',提示类型不对,
如果COMBOBOX2.TEXT条件为不排序的话,怎么使ORDER BY语句无效,还是有其它方法?急啊...
combobox1的Items属性值有以下几个一班,二班,三班(bj),combobox2的ITEMS属性有:是用来排序的
不排序,按姓名(XM),按日期(regedate)三种,两个TDATEEDIT组件分别是开始和结束时间(条件),我现在的代码是:
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from student')
adoquery1.sql.add(' where banji=:banji and regedate<:regedate1 and regedate>:regedate2');
adoquery1.sql.add('order by :paixu asc');
adoquery1.Parameters.ParamValues['banji']:=COMBOBOX1.TEXT;
adoquery1.Parameters.ParamValues['paixu']:=?????;
adoquery1.Parameters.ParamValues['regedate1 ']:=DATEEDIT1.DATE;
adoquery1.Parameters.ParamValues['regedate2 ']:=DATEEDIT2.DATE;
adoquery1.open;
但是如果我想要这样的结果COMbobox1.text没有内容时候,可以查询全部记录,但是如果我的combobox1.text没有内容的时候,什么也查不出来,
2.排序的问题又怎么办?我不知道?????加什么,如果按XM排序的话,
adoquery1.Parameters.ParamValues['paixu']:='xm',提示类型不对,
如果COMBOBOX2.TEXT条件为不排序的话,怎么使ORDER BY语句无效,还是有其它方法?急啊...
2order语句里面不能用参数,这种情况你只能用字符串连接来解决
sqlstr,orderstr:string;orderstr:='';
orderstr:='xm';
sqlstr:='select * from student where 1=1';//加上1=1的目的是为了后面条件好加'and'
if combobox1.text<>'' then
sqlstr := sqlstr+' and banji='''+ combobox1.text+'''';
if combobox2.text<>'' then
....//一样操作
if orderstr<>'' then
sqlstr := sqlstr+' order by ’+orderstr+' desc';sqlstr);
var
sqlstr,orderstr:string;orderstr:='';
orderstr:='xm';
sqlstr:='select * from student where 1=1';//加上1=1的目的是为了后面条件好加'and'
if combobox1.text<>'' then
sqlstr := sqlstr+' and banji='''+ combobox1.text+'''';
if combobox2.text<>'' then
....//一样操作
if orderstr<>'' then
sqlstr := sqlstr+' order by ’+orderstr+' desc';
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(sqlstr);
adoquery1.open;
and regedate=<:regedate1 and regedate>=:regedate2
建议:
adoquery1.Parameters.ParamValues['regedate1 ']:=StrToDateTime(FormatDateTime('yyyy-mm-dd,DATEEDIT1.DATE));
adoquery1.Parameters.ParamValues['regedate2 ']:=StrToDateTime(FormatDateTime('yyyy-mm-dd,DATEEDIT2.DATE));
2order语句里面不能用参数,这种情况你只能用字符串连接来解决
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from student')
ADOQuery1.SQL.add(' where banji=:banji and regedate between :regedate2 and :regedate1 order by regedate');// :regedate2<:regedate1
ADOQuery1.Active :=false;
// 注意: ADOQuery1.Parameters[0].DataType := ftdatetime
// 注意: ADOQuery1.Parameters[0].DataType := ftdatetime
//regedate1 regedate2 所在的Parameters 的 DataType值 是否 为 ftdatetime ADOQuery1.Parameters.ParamByName('regedate1').Value := DATEEDIT1.DATE;
ADOQuery1.Parameters.ParamByName('regedate2').Value := DATEEDIT2.DATE; ADOQuery1.Active := true;
*****
adoquery1不用open了