关于timer时钟,设定每5分钟执行一次,原先好好的,现在为何不运行了?

kerisyml 2009-01-16 09:30:06
设定timer,每5分钟调用一个存储过程执行,原先一直运行的好好的。现在忽然发现这个时钟不执行存储过程了。我每5分钟执行一次,记录日志的。现发现日志中没有,且存储过程应该执行的数据也没有执行。怎么回事啊?以前没有遇到过。
...全文
388 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao_yong 2009-01-18
  • 打赏
  • 举报
回复
對呀,看一下,timer有沒有在執行,如果有只能說明在執行存儲過程時失敗,可能是存儲過程出現了問題。
你也可以手動執行一下存儲過程,看是否成功。
luntanwujianhua 2009-01-17
  • 打赏
  • 举报
回复
我也覺得應該把時間timer 設置的時間少點。2s好啦
大了。你又不知道timer有沒有變化
taste品味 2009-01-17
  • 打赏
  • 举报
回复
用一个计数器显示到LABEL,看它是否在变化,这样实时看到效果,就知道是否在执行了啊。
ks_reny 2009-01-16
  • 打赏
  • 举报
回复
樓主用的是Oracle,那先看一下存儲過程的狀態是否是正常的.再在程序中用單步調試試試.
Oracle中的視圖,函數,存儲過程,觸發器等要是所用的某些對象發聲變化了,則就會失效的.
QQ12236822 2009-01-16
  • 打赏
  • 举报
回复
调整时间 设小一点 5秒或10秒 设置断点 再看看哪里出问题。
fangsp 2009-01-16
  • 打赏
  • 举报
回复
你可以设置一个断点调试一下,看程序到底进没进Timer里去
再就是不知道你的程序里用了几个Timer
kampan 2009-01-16
  • 打赏
  • 举报
回复
把时间间隔从5分钟改为5秒钟,设置断点,看程序执行了没有,或者看看Timer是否在哪出停掉了。
zoujianqing 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liangpei2008 的回复:]
//题意很模糊,不清楚你的日志记录是如何记录的!

Delphi(Pascal) code
procedure Business;
var
Log:IAppLog;
begin
Log:=TAppLog.Create;
try
try
LogItem('begin A');
businessA;
LogItem('end A');
LogItem('begin B');
businessB
LogItem('End B')
except
on e:Exception do
begin
LogItem('exception raise-'+E.Message)

[/Quote]

这些代码我怎么看不太懂啊,以前从来没有用过,大概是什么意思啊?可以说说吗?
csgdseed 2009-01-16
  • 打赏
  • 举报
回复
timer是否被停掉
或者存储过程执行有错
kerisyml 2009-01-16
  • 打赏
  • 举报
回复
timer中设定好了5分钟间隔,然后用个按钮“启动执行”,把enabled=true。用个按钮“停止执行”,把enabled=false.

再在tiemer事件中调用Oracle的存储过程,存储过程执行会把日志写入数据库中的。

以前是好的,这两天发现不行了。

ajiwuweibin 2009-01-16
  • 打赏
  • 举报
回复
晕,单步调试一下不就知道了,这样的问题人家哪里知道什么原因?
c58342418 2009-01-16
  • 打赏
  • 举报
回复
以前不上论坛还不知道,你们这么积极的,努力学习。:)
auqfiudh 2009-01-16
  • 打赏
  • 举报
回复
呵呵 .
liangpei2008 2009-01-16
  • 打赏
  • 举报
回复
楼上3位好快啊,多写了几句,就到4楼了!
liangpei2008 2009-01-16
  • 打赏
  • 举报
回复
//题意很模糊,不清楚你的日志记录是如何记录的!

procedure Business;
var
Log:IAppLog;
begin
Log:=TAppLog.Create;
try
try
LogItem('begin A');
businessA;
LogItem('end A');
LogItem('begin B');
businessB
LogItem('End B')
except
on e:Exception do
begin
LogItem('exception raise-'+E.Message)
end;
finally
Log:=nil;
end;
end;
end;

procedure businessA
begin
try
//A
except
//向上层抛异常信息
end;
end;
procedure businessB
begin
try
//B
except
//向上层抛异常信息
end;
end;


如果是这样的结构,仍然没有执行,我
在时钟控件投递WM_TIMER至消息队列后,由于消息队列某种原因阻塞,没有正常地处理WM_Timer消息!
不过建议对于实时性比较强的处理,最好用线程循环来处理!
僵哥 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 kerisyml 的帖子:]
设定timer,每5分钟调用一个存储过程执行,原先一直运行的好好的。现在忽然发现这个时钟不执行存储过程了。我每5分钟执行一次,记录日志的。现发现日志中没有,且存储过程应该执行的数据也没有执行。怎么回事啊?以前没有遇到过。
[/Quote]
对于Timer的执行状态有没有加以监控,比如让Timer在界面上也同时输出一份日志,并且把执行过程详细记录下来.
纯冰糖 2009-01-16
  • 打赏
  • 举报
回复
是不是你的代码哪里把Timer的enable给false了,检查检查,或者你在Timer事件里加个ShowMessage,看5分钟弹出来不。


bdmh 2009-01-16
  • 打赏
  • 举报
回复
先看你得timer是否被停掉了,或是其他原因导致执行发生错误,从而没有写进数据

5,392

社区成员

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

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