Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Применение SQL ко всему списку [D7, XP]


SveT ©   (2008-03-20 01:14:00) 

При выполнении загружается спикок значений, подсчет идет только по первому значению, и соответственно апдейтится только это значение:

if DMFrm. ZTQuery.RecordCount>0 then begin
   p2 := DMFrm. ZTQuery.FieldByName('P').AsCurrency;
   K2 := DMFrm. ZTQuery.FieldByName('K').AsCurrency;
   summa := RoundTo(k2 * p2,-2);
end;

 DMFrm.TmpQuery.Close;
  DMFrm.TmpQuery.SQL.Clear;
   DMFrm.TmpQuery.SQL.Add('Update "T.db"');
   DMFrm.TmpQuery.SQL.Add('SET K='+FloatToStr(K2)+',P='+FloatToStr(p2)+', SUMMA='+FloatToStr(summa));
   DMFrm.TmpQuery.SQL.Add('WHERE KOD='''+DMFrm. ZTQuery.FieldByName('KOD').AsString+'''');
 DMFrm.TmpQuery.ExecSQL;


Подскажите, пожалуйста, как сделать чтобы поля "P", "К" и "summa" заполнялись ко всему списку записей, а не только к первой записи.
Спасибо!


zorik   (2008-03-20 09:18:00) [1]

Посмотри внимательно! begin ... endрешит проблему


Johnmen   (2008-03-20 09:16:00) [2]

Копипаст сделан. Пора включать голову. Хотя бы слегка...


SveT   (2008-03-20 09:05:00) [3]

Этот цикл - бесконечен (программа зависает, ресурсы 99,9%). Данные перестали вствляться, соот-но вычислений нет.


SveT   (2008-03-20 09:00:00) [4]

нет DO


SveT   (2008-03-20 08:45:00) [5]

to
> Германн ©

, спасибо за совет с циклом, но
[Error] OPERins.pas(137): 'DO' expected but identifier 'p2' found


Германн   (2008-03-20 02:15:00) [6]


> SveT   (20.03.08 01:14)
>
> При выполнении загружается спикок значений, подсчет идет
> только по первому значению, и соответственно апдейтится
> только это значение:
>

Цикл:
while not DMFrm. ZTQuery.EOF
   p2 := DMFrm. ZTQuery.FieldByName('P').AsCurrency;
  K2 := DMFrm. ZTQuery.FieldByName('K').AsCurrency;
  summa := RoundTo(k2 * p2,-2);
 DMFrm.TmpQuery.Close;
 DMFrm.TmpQuery.SQL.Clear;
  DMFrm.TmpQuery.SQL.Add('Update "T.db"');
  DMFrm.TmpQuery.SQL.Add('SET K='+FloatToStr(K2)+',P='+FloatToStr(p2)+', SUMMA='+FloatToStr(summa));
  DMFrm.TmpQuery.SQL.Add('WHERE KOD='''+DMFrm. ZTQuery.FieldByName('KOD').AsString+'''');
DMFrm.TmpQuery.ExecSQL;
 Next;
end;

тебе поможет. Но поскольку реальная ситуация с таблицами не объяснена в сабже, этот совет может быть не оптимальным.


Германн   (2008-03-20 01:53:00) [7]

Пардон. Забыл добавить, что "такой простой подзапрос" врядли поможет в случае LocalSQL для решения сабжа.
Имхо.


Германн   (2008-03-20 01:50:00) [8]


> ЦУП ©   (20.03.08 01:25) [1]
>
> Вообще, надо изучать SQL.
>

Вот это точно.


SveT   (2008-03-20 01:30:00) [9]


> Вообще, надо изучать SQL.


Я и изую, и с вашей помощью тоже. (когда нет под рукой книги)

Спасибо.


ЦУП   (2008-03-20 01:25:00) [10]

Вообще, надо изучать SQL.

Формат UPDATE с простым подзапросом:

UPDATE MyTable1 SET
 T1Field1=MyValueConst
WHERE T1Field2 IN (SELECT T2Field2 FROM MyTable2 WHERE ...)


Наверх

Титульная страница Поиск, карта сайта Написать письмо