请大家帮忙看看:主要用了timer控件,每5分钟向数据库查询一次看看有没有数据。早上来了看看不能用,只用重新启动程序才能用,程序在服务器上,总不能每天都要重启呀,谢谢大家,请看看哪里有问题,难道timer会自动关闭?
procedure TForm1.Button1Click(Sender: TObject);
var
  Mobile_Type:pchar;
  CopyRight:pchar;
  CopyRightToCOM:pchar;
begin
  CopyRight:=PChar('//XXX公司,网址www.sohu.com//');
  if Sms_Connection(CopyRight,StrToInt(Edit1.text),9600,Mobile_Type,CopyRightToCOM)<>0 then
    begin
      Label1.Caption:='连接成功,芯片为:'+Mobile_Type+'!';
    end
  else
    Label1.Caption:='连接失败!'
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  Sms_Disconnection;
  Label1.Caption:='已断开!';
end;procedure TForm1.Timer1Timer(Sender: TObject);
var  i ,j : integer;
begin
  IDList.Clear;
  MobileList.Clear;
  ContentList.Clear;
  if mybase.RecordCount('TB_SendMessage','isSent','0') > 0 then
  begin 
    mybase1.SQL := 'select * from  TB_SendMessage where isSent = 0 ';
    temQuery1 :=  mybase1.OpenQuery;
    temQuery1.First;
    for i := 0 to  temQuery1.RecordCount - 1 do
    begin
      IDList.Add(temQuery1.fieldbyname('ID').AsString);
      MobileList.Add(temQuery1.fieldbyname('receivers').AsString);
      ContentList.Add(temQuery1.fieldbyname('title').AsString);
      temQuery1.Next;
    end;
    //mybase1.DisConnetServer;
//-----------------------------------发送短信---------------------------------//
    for j := 0 to  IDList.Count - 1 do
    begin
      if Sms_Send(mobilelist[j],ContentList[j]) = 1 then
      begin
        myList := listView1.Items.Add;
        MyList.Caption := inttostr(j);
        MyList.SubItems.Add(mobilelist[j]);
        Mylist.SubItems.Add(ContentList[j]);
        Mylist.SubItems.Add(datetimetostr(now()));
        Mylist.SubItems.Add('发送成功'); 
        mybase2.UpdateIsSent(IDList[j]);
        //mybase2.DisConnetServer;
        //showmessage('发送成功!');
        sleep(15000);
      end else
      begin
        myList := listView1.Items.Add;
        MyList.Caption := inttostr(j);
        MyList.SubItems.Add(mobilelist[j]);
        Mylist.SubItems.Add(ContentList[j]);
        Mylist.SubItems.Add(datetimetostr(now()));
        Mylist.SubItems.Add('发送失败');
        //showmessage( IDList[j]+'shibai');
        //mybase2.UpdateIsSent(IDList[j]);
        //showmessage('发送失败!');
        sleep(15000);
      end;
    end;
  end;
  //mybase.DisConnetServer;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
  IDList := TstringList.Create;
  MobileList := TstringList.Create;
  ContentList := TstringList.Create;
  mybase := TDBBase.Create;
  mybase1 := TDBBase.Create;
  mybase2 := TDBBase.Create;
  temQuery1 := TADOQuery.Create(nil);  mybase.ConnetServer();
  mybase1.ConnetServer();
  mybase2.ConnetServer();  button1.OnClick(button1);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IDList.Free;
  IDList := nil;
  MobileList.Free;
  MobileList := nil;
  ContentList.Free;
  ContentList := nil;
  mybase.Free;
  mybase := nil;
  mybase1.Free;
  mybase1 := nil;
  mybase2.Free;
  mybase2 := nil;
  //temQuery1.Free;
  //temQuery1 := nil;
  mylist.Free;
  mylist := nil;
end;
end.

解决方案 »

  1.   

    你的定时器里没有看到刷新数据的语句。如:mybase.requery;
    //只有这个判断语句
    if mybase.RecordCount('TB_SendMessage','isSent','0') > 0 then
      

  2.   

    没有看到你的表mybase的SQL语句及刷新语句正常的情况下:
    mybase.sql:='select * from tel';
    mybase.open;
    在定义器中应该执行一下mybase.requery();//重新从服务器读取数据,否则你表中的数据一起是你第一次打开时的数据。
    if mybase.recor............
      

  3.   

    我按照你的 Button1Click 事件一样写了,也确定端口号是正确的,用超级终端是可以连接的,为什么用DELPHI 就怎么都连不上,总显示 “连接失败” 可否赐教?procedure TForm2.Button2Click(Sender: TObject);
    var
    Mobile_Type:pchar;
    CopyRight:pchar;
    CopyRightToCOM:pchar;
    begin
    CopyRight:=PChar('通讯测试公司');
    if Sms_Connection(CopyRight,StrToInt(Edit1.Text),9600,Mobile_Type,CopyRightToCOM)<>0 then
       begin
         Edit2.Text:='连接成功,芯片为:'+Mobile_Type+'!';
       end
    else
       Edit2.Text:='连接失败!'
    end;