Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2012, 13:49   #1
Aza-Zel
 
Регистрация: 15.08.2012
Сообщений: 8
По умолчанию SQL запрос в цикле

Здравствуйте. В БД создана таблица detali с первичным ключом id_det.
При работе программы требуется изменять значения в столбце parent.
Собственно, запрос исполняется, но только для первой строчки.
Что же не так?

Код, выполняющий задумку:

procedure TForm2.Button3Click(Sender: TObject);
var k:integer;
i:integer;
begin
ZTable1.Active:=false;
ZTable1.TableName:='test.detali';
ZTable1.Active:=true;
k:=ZTable1.RecordCount; // узнаем число записей в таблице
i:=1;
while i<=k do begin
ZQuery4.Active:=false;
ZQuery4.SQL.Clear;
ZQuery4.SQL.Text:='UPDATE detali SET parent=0 WHERE id_det=' + inttostr(i);
ZQuery4.Active:=true;
i:=i+1;
end;
end;

PS. Прошу прощения, если есть нарушения в оформлении поста. Исправлю, если что не так)
Aza-Zel вне форума Ответить с цитированием
Старый 15.08.2012, 14:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код не верный и вообще судя по этому коду там скорее всего одной командой UPDATE detali SET parent=0 можно все сделать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2012, 14:12   #3
Aza-Zel
 
Регистрация: 15.08.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код не верный и вообще судя по этому коду там скорее всего одной командой UPDATE detali SET parent=0 можно все сделать
мм, я запрос для примера написала.
А если нужен вот такой:
ZQuery4.SQL.Text:='UPDATE detali SET parent=' +inttostr(i) + 'WHERE id_det=' + inttostr(i);
т.е. значения для parent необходимо тоже менять. Хочу на примере простого разобраться, чтобы потом определять parent из более сложного условия. Например, из второго цикла по j..

Как правильно написать цикл и запрос в нем?

Последний раз редактировалось Aza-Zel; 15.08.2012 в 14:17.
Aza-Zel вне форума Ответить с цитированием
Старый 15.08.2012, 14:36   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. Запросы в цикле это нонсенс. Очень-очень плохой пример программирования. В каждом конкретном случае хорошо все обдумать и как правило оказывается, что цикл не нужен
2. Использовать RecordCount для организации цикла очень рискованно, можно на большие неприятности нарваться. Если уж делать, то
Код:
ZTable1.First;
while not ZTable1.Eof do begin
  ...
  ZTable1.Next;
end;
3. Использовать ZQuery4.ExecSQL для запросов с INSERT, UPDATE, DELETE и т.п. вместо Active:=True или Open
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.08.2012, 14:42   #5
Aza-Zel
 
Регистрация: 15.08.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
1. Запросы в цикле это нонсенс. Очень-очень плохой пример программирования. В каждом конкретном случае хорошо все обдумать и как правило оказывается, что цикл не нужен
2. Использовать RecordCount для организации цикла очень рискованно, можно на большие неприятности нарваться. Если уж делать, то
Код:
ZTable1.First;
while not ZTable1.Eof do begin
  ...
  ZTable1.Next;
end;
3. Использовать ZQuery4.ExecSQL для запросов с INSERT, UPDATE, DELETE и т.п. вместо Active:=True или Open
О, большое спасибо) Буду пробовать)
Aza-Zel вне форума Ответить с цитированием
Старый 15.08.2012, 14:47   #6
Aza-Zel
 
Регистрация: 15.08.2012
Сообщений: 8
По умолчанию

Ура! Пошло!
Аватар, низкий вам поклон) вроде фигня, а я с ней второй день вожусь) Сделал, как сказали.

А цикл мне нужен. Конечно, это нехорошо так дерево строить, и есть хорошие статьи для этого, но я слишком плохой программист, чтобы в них разобраться.
Aza-Zel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос Frosts SQL, базы данных 2 17.05.2011 22:34
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15