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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2009, 19:53   #1
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
Печаль помогите с совмещением двух запросов. SQL Server

Здравствуйте!!!
Прошу прошения подскажите пожалуйста как лучше сделать.
У меня есть запрос на получения данных их двух таблиц.
Код:
SELECT (данные из таблицы PRIKAZ_OUT, и данные из таблицы PRIKAZ_IN, PRIKAZ_OUT.N_ID AS N_OUT, PRIKAZ_IN.N_ID AS N_IN 
FROM PRIKAZ_OUT INNER JOIN PRIKAZ_IN ON PRIKAZ_OUT.Vid_Op = PRIKAZ_IN.Vid_Op 
AND PRIKAZ_OUT.Osnov = PRIKAZ_IN.Osnov AND 
PRIKAZ_OUT.Shet_OUT = PRIKAZ_IN.Shet_OUT AND 
PRIKAZ_OUT.NIN_CB = PRIKAZ_IN.NIN_CB AND PRIKAZ_OUT.Shet_IN = PRIKAZ_IN.Shet_IN
После чего в тех таблицах нужно удалить строки которые совместились по ряду параметров.
Код:
DELETE
FROM PRIKAZ_OUT ,FROM PRIKAZ_IN
WHERE (PRIKAZ_OUT.N_ID = N_Out) AND (PRIKAZ_IN.N_ID = N_IN)
Заранее большое спасибо.

У нас принято оформлять код специальным тэгом - кнопочка "#".
Модератор
Да прибудет с Вами свет и радость!!!

Последний раз редактировалось mihali4; 21.12.2009 в 19:59.
S_Yevgeniy вне форума Ответить с цитированием
Старый 21.12.2009, 20:10   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Насколько я знаю, в классическом сиквеле оператор удаления не предусматривает удаление записей более, чем из одной таблицы...
Может, я отстал?
mihali4 вне форума Ответить с цитированием
Старый 21.12.2009, 20:23   #3
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

А использовать запрос на удаление для каждой таблицы можно?
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 21.12.2009, 20:25   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Можно. И двумя запросами (к первой, затем ко второй таблице) вы решите свою проблему.
mihali4 вне форума Ответить с цитированием
Старый 21.12.2009, 20:31   #5
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

А вы не могли бы посмотреть кусочек кода что я делаю не так

Просто при работе получаю ошибку ADOQuery1: Cannot Perform this operation on a closed dataset.
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 21.12.2009, 20:35   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так из текста ошибки все видно - датасет (в данном случае ваш ADOQuery1) должен быть активен.
Не вижу "кусочка текста", поэтому:
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Text:='delete from ...';
ADOQuery1.ExecSQL; //не Open и не Active:=True; !
mihali4 вне форума Ответить с цитированием
Старый 21.12.2009, 20:44   #7
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

Т.е. перед тем как удалить строку нужно покинуть предыдущий запрос? Простите если неверно выразился


Я пытался применить
UNION, EXCEPT, INTERSECT
Но почему-то нечего не вышло.


Вот код.
Вложения
Тип файла: rar Unit1.rar (1.0 Кб, 7 просмотров)
Да прибудет с Вами свет и радость!!!

Последний раз редактировалось S_Yevgeniy; 21.12.2009 в 20:53.
S_Yevgeniy вне форума Ответить с цитированием
Старый 21.12.2009, 21:00   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от S_Yevgeniy Посмотреть сообщение
Т.е. перед тем как удалить строку нужно покинуть предыдущий запрос?
Вам никто не мешает поместить на форму некий "универсальный" ADOQuery, при помощи которого вы будете осуществлять только операции, не требующие получения набора данных (к ним и удаление относится).
Но после выполнения таких операций не забывайте обновлять те ADOQuery, при помощи которых вы отображаете данные, таким вот образом:
Код:
ADOQuery1.Close;
ADOQuery1.Open;
mihali4 вне форума Ответить с цитированием
Старый 21.12.2009, 21:13   #9
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

Огромное вам спасибо!!!
это действительно решило мою проблему.
Правда появился еще один вопрос.
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать несколько SQL запросов grinch SQL, базы данных 12 23.03.2009 13:15
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
Помогите новичку в MS-Sql Server ! Gauss БД в Delphi 4 14.03.2008 22:06