记时器代码问题,高手帮忙看一下.

juckxu 2007-05-09 10:05:37
我做了一个倒记时器,恩路如下:
在数据库里建一张表:time; 里面有sm,sc字段,分别代表:分和秒.
label1,和label2用来显示分和秒,每隔一秒从数据库取值一次,并将秒的值减一,
代码如下:,运行时,可以看到效果是在倒记时,,但是每隔一秒会自动弹出一个窗口说什么:缺少更新或刷新的皱起键列信息。请高手帮我看看什么地方出错了。




unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB;

type
TForm1 = class(TForm)
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Timer1Timer(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
sm,sc:integer;
m,c:string;
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from time where timeno=''1''');
adoquery1.Open;
sm:=adoquery1.Fieldbyname('sm').AsInteger;
sc:=adoquery1.fieldbyname('sc').AsInteger;
if sc=0 then begin
m:=inttostr(sm);
label2.caption:='00';
label1.caption:=m;
timer1.Interval:=1000;
end;
if sc<0 then begin
sc:=9;
sm:=sm-1;
c:=inttostr(sc);
m:=inttostr(sm);
label2.Caption:=c;
label1.caption:=m;

adoquery1.Edit;
adoquery1.FieldByName('sc').AsInteger:=sc;
adoquery1.FieldByName('sm').AsInteger:=sm;
adoquery1.post;
adoquery1.Refresh;
timer1.Interval:=1000;
end;
if sm=0 then
begin
showmessage('时间到!');
timer1.Interval:=1000;
end
else
begin
c:=inttostr(sc);
m:=inttostr(sm);
label2.Caption:=c;
label1.caption:=m;
sc:=sc-1;
adoquery1.Edit;
adoquery1.FieldByName('sc').AsInteger:=sc;
adoquery1.post;
adoquery1.Refresh;
timer1.Interval:=1000;
end;
end;


end.
...全文
132 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
juckxu 2007-05-09
  • 打赏
  • 举报
回复
忘了说明:倒记时是从10:9开始的。进制是10;

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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