比如:我有两个datetimepicker:datetimepickerFrom 和 datetimePickerTo,通过把日期格式化为YYYYMMDD形式的字符串作为条件加入到adoquery中。
szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
adoquery1.open;现在发现在form创建时赋值的两个datetimepicker的日期不起作用,只有在两个上面分别点击一下(不需要修改),然后执行的结果才是正确的。请问这是为什么?
szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
adoquery1.open;现在发现在form创建时赋值的两个datetimepicker的日期不起作用,只有在两个上面分别点击一下(不需要修改),然后执行的结果才是正确的。请问这是为什么?
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
adoquery1.open;写进Onshow再试试
cxz7531(cat):因为我查询是要更改条件的,我总不能每查一次就重新打开窗口一遍吧?
zhusongdong(东):我当然是在事件触发时执行sql查询的,这一点我可以肯定,否则怎么会点击以后再查询就对了呢?我是用按钮触发查询的。语句都放在button的onclick里面。
改为szRQ1 := formatdatetime('yyyy-mm-dd',DateTimePicker1.date);
那就把szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
adoquery1.open;
写进button的onclick
要想在窗口刚显示出来的时候,也有查询结果,就把这段代码原封不动复制到onshow,至于给datetimepickerFrom.date 和 datetimePickerTo.date赋值的语句放在oncreate可以,放在onshow的最前面也可以
我的实际情况是:
1.日期格式因为我自定义的表结构就是yyyymmdd的,所以日期格式并不是个问题。
2.我在界面上放了2个datetimepicker,一个button,我所写的条件赋值和adoquery操作都在button.click里面。datetimepicker在窗口创建时有初始赋值,在运行中可以更改datetimepicker的值,然后通过button.click进行查询。
3.现在的问题是:如果我不点击两个datetimepicker,直接点击button的话就不会得到正确的结果,只有在两个picker里面点过之后,执行的结果才是正确的。
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
写到DateTimePicker.OnChange里去了??
或者干脆改成
adoquery1.sql.Text:='select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''';
整个看起来就像这样:procedure button1.onclick(sender : TObject);
var szRQ1,szRQ2 : string;
begin
szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
Open;
end;
end;我当然会先把sql清掉
var szRq1,szRq2 : string;
begin
szRq1 := formatdatetime('yyyymmdd',Datetimepicker1.date);
szRq2 := formatdatetime('yyyymmdd',Datetimepicker2.date);
ReLoad(szRq1,szRq2);end;
procedure TfrmZpGr.reload(ARq1,Arq2 : string);
var szTemp : string;
begin
szTemp := 'select * from www_zpgr where Kdrq between '''+Arq1+''' and '''+Arq2+'''';
with Q do
begin
close;
sql.clear;
sql.add(szTemp);
try
Open;
except
messagedlg('刷新支票购入记录时出错',mtError,[mbOk],0);
exit;
end;
end;
end;