![]() |
|
#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, без них ващще ничего не получится, как ни проси. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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
|
|||
|
|||
![]() Цитата:
Спасибо. Дело было именно в этом. Мозг имеет свойство уставать,при этом ухудшается внимательность ![]() |