我做了一个倒记时器,恩路如下:
在数据库里建一张表:time; 里面有sm,sc字段,分别代表:分和秒.
label1,和label2用来显示分和秒,每隔一秒从数据库取值一次,并将秒的值减一,
代码如下:,运行时,可以看到效果是在倒记时,,但是每隔一秒会自动弹出一个窗口说什么:缺少更新或刷新的皱起键列信息。请高手帮我看看什么地方出错了。
unit Unit1;interfaceuses
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.
在数据库里建一张表:time; 里面有sm,sc字段,分别代表:分和秒.
label1,和label2用来显示分和秒,每隔一秒从数据库取值一次,并将秒的值减一,
代码如下:,运行时,可以看到效果是在倒记时,,但是每隔一秒会自动弹出一个窗口说什么:缺少更新或刷新的皱起键列信息。请高手帮我看看什么地方出错了。
unit Unit1;interfaceuses
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.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货