![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день пользователи данного портала. Пишу сюда с просьбой о помощи, т.к. какой уже день подряд не могу решить одну проблему.
Проблема заключается в таймере. Что нужно от таймера: каждые 5 минут делать запрос в бд сайта(mysql) и проверять значения в одном столбце, если количество результатов больше 0, то выводить messagebox, если нет то нет. Проблема заключается в том, что messagebox выводится в не зависимости от условия, если быть более точным. То если условие сработает хоть один раз, то окошко это будет вылазить постоянно, пока не закроется программа. Помогите пожалуйста решить данную проблему. Код прилагаю. код немного упрощен от идеала, но суть думаю понятна. Код:
procedure TForm1.Timer3Timer(Sender: TObject); begin MyQuery1.SQL.Clear; MyQuery1.SQL.Add('SELECT COUNT(*) FROM dynamit_test WHERE status=3'); MyQuery1.Open; j:=MyQuery1.FieldByName('count(*)').AsInteger; if j>0 Then Timer3.Enabled:=False; MyQuery1.SQL.Clear; MyQuery1.SQL.Add('SELECT * FROM dynamit_test WHERE status=3'); MyQuery1.Open; MessageBox(Handle, 'вам пришло новое сообщение','Оповещение',MB_OK); try MyQuery1.Edit; MyQuery1.FieldByName('status').AsString := '2'; MyQuery1.Post; finally end; Timer3.Enabled:=True; end; |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
||||
|
||||
![]() Цитата:
Т.е. вместо такого: Код:
MyQuery1.SQL.Clear; MyQuery1.SQL.Add('SELECT COUNT(*) FROM dynamit_test WHERE status=3'); MyQuery1.Open; Код:
MyQuery1.Close; // Закрыть предыдущую выборку MyQuery1.SQL.Text:='SELECT COUNT(*) FROM dynamit_test WHERE status=3'; // Изменить запрос MyQuery1.Open; // Открыть новую выборку |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
||||
|
||||
![]() а так?
Код:
procedure TForm1.Timer3Timer(Sender: TObject); begin MyQuery1.Close; MyQuery1.SQL.Text := 'SELECT COUNT(*) FROM dynamit_test WHERE status=3'; MyQuery1.Open; if MyQuery1.Fields[0].AsInteger > 0 then begin Timer3.Enabled:=False; MyQuery1.Close; MyQuery1.SQL.Text := 'SELECT * FROM dynamit_test WHERE status=3'; MyQuery1.Open; MessageBox(Handle, 'вам пришло новое сообщение','Оповещение',MB_OK); try MyQuery1.Edit; MyQuery1.FieldByName('status').AsString := '2'; MyQuery1.Post; finally end; Timer3.Enabled:=True; end; end; Поживу - увижу, Доживу - узнаю, Выживу - учту. ![]() [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#7
|
||||
|
||||
![]() Здесь тоже неправильно:
Код:
j:=MyQuery1.FieldByName('count(*)').AsInteger; Код:
j:=MyQuery1.Fields[0].AsInteger; |
#8
|
|||
|
|||
![]() спасибо огромное, вроде работает))) чувствуется у меня будет еще пару вопросов от новичков)))
|