Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.06.2012, 20:05
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию В поисках Гуру

Уважаемые, есть программа, что-то вроде электронного органайзера (напоминалка). Все данные хранятся в БД. Работаю через 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  
Старый 28.06.2012, 20:44
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Копать от забора и до обеда.
Сделай вывод ошибок SQL, без них ващще ничего не получится, как ни проси.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 28.06.2012, 21:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Похоже, у тебя неправильный 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  
Старый 29.06.2012, 15:40
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Цитата:
Сообщение от lmikle
Похоже, у тебя неправильный 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 пары [поле=значение] идут через запятую.
Ну и поле Состояние в кв. скобки возьми.

Спасибо. Дело было именно в этом. Мозг имеет свойство уставать,при этом ухудшается внимательность
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025