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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2010, 11:51   #1
kairat_tuyakbaev
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 20
По умолчанию SQL Update не могу разобраться

Привет всем. Хотелось бы попросить помощи в решении вот такого вопроса.

Есть две таблицы, надо обновить столбец одной таблицы из другой таблицы. Выходить ошибка "в операции должен использоваться обновляемый запрос". Вот код:

Код:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 22004 SET Имя=(SELECT Имя FROM Main)');
ADOQuery1.ExecSQL;
ADOQuery1.Active:=true;

Последний раз редактировалось kairat_tuyakbaev; 23.09.2010 в 13:30.
kairat_tuyakbaev вне форума Ответить с цитированием
Старый 23.09.2010, 13:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну потому что вложенный запрос абсолютно неверен.
1) не указано откуда брать Имя
2) нет указана связь вложенной таблицы с таблицей 22004

p.s. я уже не говорю о том, что нельзя делать .Active := true; для запросов, которые изменяют данные!

Последний раз редактировалось Serge_Bliznykov; 23.09.2010 в 13:23.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2010, 13:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

3) Запрос может вернуть несколько записей
4) Запрос вообще может ничего не вернуть

короче косяков - more
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2010, 13:28   #4
kairat_tuyakbaev
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 20
По умолчанию

Решил вот код:
UPDATE 22004, Main
SET 22004.Имя=Main.Имя
kairat_tuyakbaev вне форума Ответить с цитированием
Старый 23.09.2010, 17:36   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не знаю, какая у Вас СУБД и почему Вы решили, что данный код решает Вашу проблему...

Имхо, этот код даже проверку на синтаксическую правильность не пройдёт,
не говоря уже о результатах...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2010, 23:29   #6
kairat_tuyakbaev
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не знаю, какая у Вас СУБД и почему Вы решили, что данный код решает Вашу проблему...

Имхо, этот код даже проверку на синтаксическую правильность не пройдёт,
не говоря уже о результатах...

Не знаю у меня работает. Вот код
Код:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE 22004, Main1 SET 22004.Имя = Main1.Имя ');
ADOQuery1.ExecSQL;
adoquery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT * FROM 22004';
ADOQuery1.open;
Но есть одна проблема в таблице 22004 на все поля Имя присваивается только одно значения. например
таб 22004
id имя
1 Иван
2 иван
3 иван
а должно быть так
id имя
1 Иван
2 артем
3 серега
С одной таблицы UPDATE нормально работает! но с двумя таблицами вот такая беда! Кто знает как можно решить проблему???

Последний раз редактировалось Stilet; 24.09.2010 в 08:18.
kairat_tuyakbaev вне форума Ответить с цитированием
Старый 24.09.2010, 10:52   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

странно что вообще работает
ну тогда добавь в запрос еще такую строчку
Код:
where 22004.id = Main1.id
soleil@mmc вне форума Ответить с цитированием
Старый 24.09.2010, 12:38   #8
kairat_tuyakbaev
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
странно что вообще работает
ну тогда добавь в запрос еще такую строчку
Код:
where 22004.id = Main1.id
Спасибо вам большое!!! Как я раньше не догадался! Работает!!! бд access

Последний раз редактировалось kairat_tuyakbaev; 24.09.2010 в 12:40.
kairat_tuyakbaev вне форума Ответить с цитированием
Старый 24.09.2010, 15:49   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ну по-хорошему запрос должен выглядеть так
Код:
update 22004
set Имя = (
      select Имя
      from Main1
      where 22004.id = Main1.id)
и конечно же в результате будут затерты данные (строка будет, не будет данных в этой строке) в табл. 22004 если строк с таким айди нет в табл. Main1
soleil@mmc вне форума Ответить с цитированием
Старый 24.09.2010, 17:21   #10
kairat_tuyakbaev
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 20
По умолчанию

подзапросами не получается выходить ошибка "в операции должен использоваться обновляемый запрос"
kairat_tuyakbaev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться Var17 Общие вопросы Delphi 6 27.03.2010 01:21
Не могу разобраться как отобразить в CTreeCtrl из БД SQL Боб Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 5 24.03.2010 18:18
[C++] Не могу разобраться ... AquaticSoul Общие вопросы C/C++ 8 24.03.2010 16:23
Не могу разобраться semAz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.03.2010 17:43