Уважаемые, есть программа, что-то вроде электронного органайзера (напоминалка). Все данные хранятся в БД. Работаю через
ADO.
В таймере ежесекундно делаю выборку из БД, все найденые записи вывожу на экран в новой форме.
qrProverka - AdoQuery которым я считываю в таймере данные из БД
qwProverka - AdoQuery, для записи данных в таймере
Проблема в том, что программа считывает, но не записывает.
Код:
//ПРОВЕРКА ЗАДАЧ НА ВЫПОЛНЕНИЕ
procedure TMainForm.Timer1Timer(Sender: TObject);
var S:String;
begin
try
qrProverka.SQL.Text := 'select * from [Задачи] where '+
'(([Дата исполнения] < :NowDT) or ([Дата исполнения] = :NowDT)) and '+
'(([Состояние] = :sost1) or ([Состояние] = :sost2)) and '+
'[Показано] = 0';
qrProverka.Parameters.ParamByName('NowDT').Value:=TDateTime(Now);
qrProverka.Parameters.ParamByName('sost1').Value:='Пропущено';
qrProverka.Parameters.ParamByName('sost2').Value:='В ожидании';
qrProverka.Open;
with TMessageForm.Create(Self) do begin
label1.Caption := 'Задача №'+qrProverka.FieldByName('ID').AsString+' от '+qrProverka.FieldByName('Дата регистрации').AsString;
label2.Caption := qrProverka.FieldByName('Наименование').AsString;
label3.Caption := 'Выполнить '+qrProverka.FieldByName('Дата исполнения').AsString;
memo1.Text := qrProverka.FieldByName('Описание').AsString;
show;
end;
//Если Состояние = В ожидании то меняем на Пропущено
if qrProverka.FieldByName ('Состояние').AsString = 'В ожидании' then S := ' and Состояние = '+QuotedStr('Пропущено')
else S := '';
//Обновляем задачу. Отмечаем что показали ее
qwProverka.SQL.Text := 'UPDATE Задачи SET [Показано] = :view'+S+' WHERE [ID] = :uid';
ShowMessage(qrProverka.FieldByName('ID').AsString);
qwProverka.Parameters.ParamByName('uid').Value := qrProverka.FieldByName('ID').AsString;
qwProverka.Parameters.ParamByName('view').Value := 1;
qwProverka.ExecSQL;
qrproverka.Refresh;
ShowMessage(qrProverka.FieldByName('Показано').AsString);
qrProverka.Next;
finally
end;
end;
Подскажите или наведите на путь истинный. Лопата есть, куда копать?
