我做了一个倒记时器,恩路如下:
在数据库里建一张表: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.