![]() |
|
|
#1
|
|||
|
|||
|
Уважаемые, есть программа, что-то вроде электронного органайзера (напоминалка). Все данные хранятся в БД. Работаю через 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;Подскажите или наведите на путь истинный. Лопата есть, куда копать? ![]() Последний раз редактировалось Кодер, 28.06.2012 в 20:08. |
|
#2
|
||||
|
||||
|
Копать от забора и до обеда.
Сделай вывод ошибок SQL, без них ващще ничего не получится, как ни проси. |
|
#3
|
|||
|
|||
|
Похоже, у тебя неправильный SQL для update генерится:
Код:
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;В update пары [поле=значение] идут через запятую. Ну и поле Состояние в кв. скобки возьми. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Неподарок (29.06.2012)
| ||
|
#4
|
|||
|
|||
|
Цитата:
Спасибо. Дело было именно в этом. Мозг имеет свойство уставать,при этом ухудшается внимательность ![]() |