我使用了两个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语句无效,还是有其它方法?急啊...
解决方案 »
- 用TidFTP如何获取服务器上某个目录下的文件个数,或者判断该目录下是否有文件存在?
- UDP需要区分客户端和服务端?
- TSHFileOpStruct复制文件的问题
- 在delphi中怎样删除一个文件夹(很可能里面有很多子文件夹和文件)?
- 两个窗体之间如何传递值?比如点击窗体form1中的按钮1时form2.show,在form2.show中如何取得值?
- 高分求详解!!好基本的问题,如分不够再加!
- 好问题!
- fastreport合计?来看看把
- 我发现Delphi的Bug啦!!!!
- 急急!请问哪有delphi 5的安装程序下载?
- 为什么delphi7编译的程序在支持中文的英文操作系统下显示不出来中文,delphi5显示正常,delphi7是不是要设置什么?
- StringGRid问题 急 在线等
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了