Запрос из цикла

здравствуйте я написал такой запрос
procedure update_produqti(Query_users_1: TADOQuery;st: TStringGrid);
 var i: integer;
 begin
   with st do
   begin
    with Query_users_1 do
     begin
       for i := 1 to 3 do
       begin
      Active:=false;
     SQL.Clear;
     SQL.Add('UPDATE `таблица` SET `таблица`.`столбец1`= `таблица`.`столбец1`- '''+Cells[3,i]+''' WHERE `таблица`.`столбец2`='''+Cells[7,i]+'''; ');
     ExecSQL;
        end;
     end;   // query
   end; // st
 end;
работает хорошо но мне интересно насколько такой запрос правильный for 1 to 3 написал но потом если всё правильно и можно доверять этому запросу в будущем переделаю RowCount - 1
4 ответа

насколько такой запрос правильный
правильный в каком смысле? в смысле SQL? ну если данные обновляет, то правильный а вообще запросы из цикла не очень красиво делать, SQL очень гибкий, все можно сделать и без циклов
и можно доверять этому запросу в будущем
)) в насколько отдаленном будещем? чем глубже, тем сильнее нужно зарядить шарЗЫ я тут запятых отсыпал - ,,,,,, - не стесняйся, бери


kobakoba7, если уж делаешь запрос в цикле, то хотя бы не обновляй в цикле сам запрос. т.е. не надо в цикле писать:
 Active:=false;
     SQL.Clear;
     SQL.Add
в цикле обновляй значения параметров и ExecSQL. И все. А так qwertehok прав. Зачастую в SQL можно и без цикла обойтись, но все же не всегда это возможно.
в будущем переделаю RowCount - 1
Не надо. While not EOF вместо RowCount-1


drvolodko,
в цикле обновляй значения параметров и ExecSQL.
не поняла что имейте виду что за значение параметров что в строке запроса записаны из стринггрида что берёт значения? может промерчик покажитеdrvolodko,
Не надо. While not EOF вместо RowCount-1
с этим тоже не могу разобраться как маиом коде использовать


procedure update_produqti(Query_users_1: TADOQuery;st: TStringGrid);
 var i: integer;
 begin
   with st do
   begin
    with Query_users_1 do
     begin
     close;
SQL.text:='UPDATE `таблица` SET `таблица`.`столбец1`= `таблица`.`столбец1`- '+QuotedStr(Cells[3,i])+' WHERE `таблица`.`столбец2`='+ QuotedStr(Cells[7,i]);
  for i:=1 to rowcount-1 do
       begin
          ExecSQL;
        inc(i)
        end;
     end;   // query
   end; // st
 end;
Как то так. Но знать бы изначальные данные, то тут я думаю и одним запросом можно было бы справитьсяWhile not EOF это для таблиц, а не для стринглиста. Я ошибся.
а не для стринглиста
Точнее не для стринггрида.. Чугунок к вечеру уже совсем протек