两个datetimepicker作为筛选条件,为什么一定要分别点击一下才能生效?

filix 2003-08-26 01:14:06
比如:我有两个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的日期不起作用,只有在两个上面分别点击一下(不需要修改),然后执行的结果才是正确的。

请问这是为什么?
...全文
210 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
filix 2003-09-15
  • 打赏
  • 举报
回复
为什么没人回答了?
filix 2003-09-08
  • 打赏
  • 举报
回复
我UP
filix 2003-08-29
  • 打赏
  • 举报
回复
procedure TfrmZpGr.SpeedButtonRefreshClick(Sender: TObject);
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;
tongki 2003-08-27
  • 打赏
  • 举报
回复
关键在于值的更新和释放
tongki 2003-08-27
  • 打赏
  • 举报
回复
不会吧,我不论如何赋值都没有问题呀?

贴出你的赋值代码!UP
filix 2003-08-27
  • 打赏
  • 举报
回复
up
cxz7531 2003-08-26
  • 打赏
  • 举报
回复
另外把adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');的前面加上adoquery1.sql.clear
或者干脆改成
adoquery1.sql.Text:='select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''';
cxz7531 2003-08-26
  • 打赏
  • 举报
回复
不可能吧,你是不是把szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
写到DateTimePicker.OnChange里去了??
filix 2003-08-26
  • 打赏
  • 举报
回复
我上面说的oncreate和onshow只是为了答复上面的问题。
我的实际情况是:
1.日期格式因为我自定义的表结构就是yyyymmdd的,所以日期格式并不是个问题。
2.我在界面上放了2个datetimepicker,一个button,我所写的条件赋值和adoquery操作都在button.click里面。datetimepicker在窗口创建时有初始赋值,在运行中可以更改datetimepicker的值,然后通过button.click进行查询。
3.现在的问题是:如果我不点击两个datetimepicker,直接点击button的话就不会得到正确的结果,只有在两个picker里面点过之后,执行的结果才是正确的。
cxz7531 2003-08-26
  • 打赏
  • 举报
回复
你用什么数据库?我觉得szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);不对
改为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的最前面也可以
filix 2003-08-26
  • 打赏
  • 举报
回复
geyobing(银翼天使):我就是在打开窗口的时候给datetimepicker赋值的。这两个组件是设计时就放在窗口上的,不是动态创建。
cxz7531(cat):因为我查询是要更改条件的,我总不能每查一次就重新打开窗口一遍吧?
zhusongdong(东):我当然是在事件触发时执行sql查询的,这一点我可以肯定,否则怎么会点击以后再查询就对了呢?

我是用按钮触发查询的。语句都放在button的onclick里面。
tiexinliu 2003-08-26
  • 打赏
  • 举报
回复
程序要首先对datatimepicker初始化,就没问题了
大地精灵 2003-08-26
  • 打赏
  • 举报
回复
你可以在窗口打开的时候,就给它付值,就可以了
cxz7531 2003-08-26
  • 打赏
  • 举报
回复
把给datetimepickerFrom.date 和 datetimePickerTo.date赋值的语句写进OnCreate

把szRQ1 := formatdatetime('yyyymmdd',datetimepickerFrom.date);
szRQ2 := formatdatetime('yyyymmdd',datetimepickerTo.date);
adoquery1.sql.add('select * from tablename where fieldname between '''+szRQ1 + ''' and '''+szRQ2+'''');
adoquery1.open;写进Onshow

再试试
漠北刀客 2003-08-26
  • 打赏
  • 举报
回复
看看你的SQL语句是写在什么事件中的,可能没有触发到该事件吧
filix 2003-08-26
  • 打赏
  • 举报
回复
我说的“点击”只是获得焦点的操作,不更改任何值
filix 2003-08-26
  • 打赏
  • 举报
回复
两个赋值语句是在button.click里面,放在adoquery.sql赋值之前。
整个看起来就像这样:

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清掉

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧