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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 09:29   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Последовательное выполнение запросов

Добрый день! Как выполнить запросы один за другим? Наприме, я выполняю какой-то запрос. Получил некий результат. Затем, по задумке, я должен выполнить другой запрос, но, уже применимо к результату, который был получен в результате работы предыдущего запроса. БД на ADO.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 09:34   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Добрый день! Как выполнить запросы один за другим? Наприме, я выполняю какой-то запрос. Получил некий результат. Затем, по задумке, я должен выполнить другой запрос, но, уже применимо к результату, который был получен в результате работы предыдущего запроса. БД на ADO.
ADO
Код:
Запрос1
Commit
Запрос2
Commit
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 11.10.2010, 09:46   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

И что я должен оттуда уяснить? Я выполняю один запрос:
Код:
procedure TForm1.DBText4Click(Sender: TObject);
begin
  Form1.DataSource1.DataSet:=Form1.ADOTable1;
  Form1.ADOQuery1.Active:=False;
  Form1.ADOQuery1.SQL.Text:='select * from export where [Number application]=' + QuotedStr(Form1.Label55.Caption);
  Form1.ADOQuery1.Active:=True;
  Form1.DataSource1.DataSet:=Form1.ADOQuery1;
end;
получил некий результат. Затем должен выполнить второй запрос:
Код:
procedure TForm1.DBText11Click(Sender: TObject);
begin
 Form1.DataSource1.DataSet:=Form1.ADOTable1;
 Form1.ADOQuery1.Active:=False;
 Form1.ADOQuery1.SQL.Text:='select * from export where [ScanDate]=' + QuotedStr(Form1.Label55.Caption);
 Form1.ADOQuery1.Active:=True;
 Form1.DataSource1.DataSet:=Form1.ADOQuery1;
end;
который должен быть применен к результату первого запроса.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 10:04   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
И что я должен оттуда уяснить? Я выполняю один запрос:
Код:
procedure TForm1.DBText4Click(Sender: TObject);
begin
  Form1.DataSource1.DataSet:=Form1.ADOTable1;
  Form1.ADOQuery1.Active:=False;
  Form1.ADOQuery1.SQL.Text:='select * from export where [Number application]=' + QuotedStr(Form1.Label55.Caption);
  Form1.ADOQuery1.Active:=True;
  Form1.DataSource1.DataSet:=Form1.ADOQuery1;
end;
получил некий результат. Затем должен выполнить второй запрос:
Код:
procedure TForm1.DBText11Click(Sender: TObject);
begin
 Form1.DataSource1.DataSet:=Form1.ADOTable1;
 Form1.ADOQuery1.Active:=False;
 Form1.ADOQuery1.SQL.Text:='select * from export where [ScanDate]=' + QuotedStr(Form1.Label55.Caption);
 Form1.ADOQuery1.Active:=True;
 Form1.DataSource1.DataSet:=Form1.ADOQuery1;
end;
который должен быть применен к результату первого запроса.
ADO - это интерфейс доступа к БД, судя по всему у вас скорей всего MS SQL Server.

1) чтобы пользоваться результатом первого запроса, нужно его куда-нибудь сохранить, ну или хотя бы не изменять переменную (ADOQuerry1);
2) чтобы второй запрос оперировал результатом первого - нужно сохранить результат первого запроса в БД, например, создать временную таблицу, если исходные данные нельзя изменять.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 11.10.2010, 10:11   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

У меня ADO. Я же четко написал. Причем тут MS SQL Server. Как выполнить первый пункт?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 12:30   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а что есть "результат работы предыдущего запроса"?
даже из твоих примеров не следует никаких попыток что-то куда-то применить
soleil@mmc вне форума Ответить с цитированием
Старый 11.10.2010, 12:45   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
а что есть "результат работы предыдущего запроса"?
Это есть набор записей, который был возвращен после выполнения первого запроса и к которому нужно применить второй запрос.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.10.2010, 13:06   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

к огромному сожалению, в Delphi не реализован механизм, когда можно в качестве источника данных для запроса указывать набор, полученный ранее (в результате предыдущего запроса)

в отличие от того же .NET - там это просто сказка! (я уже молчу про LINQ)

поэтому, Вам нужно:
или объединять Ваши последовательные запросы так, чтобы это был ОДИН запрос к БД
(например: SELECT * FROM (SELECT * from from export where [Number application]= .... ) Z1 where Z1.ScanDate= .... )
или писать ХП на сервере, где в MS SQL можно делать выборки в табличные переменные (ну или временные таблицы, как кому больше нравится), потом эти выборки использовать в качестве источников данных для других выборок и т.д. и т.п...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2010, 13:16   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после выполнения первого запроса и к которому нужно применить второй запрос.
У меня глупый вопрос: А почему не сделать все одним вложенным запросом? Зачем их по порядку выполнять?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2010, 13:56   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

учи СКЛ короче
нет ничего сложного в том чтобы применить оба фильтра в одном запросе через "И"
только вот неясно - каким образом в одном и том же поле Form1.Label55.Caption окажутся данные по полю Number application и ScanDate одновременно?!
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение запросов Dima-fenomen Microsoft Office Access 4 11.03.2010 23:15
Последовательное чтение записей artemavd БД в Delphi 32 09.09.2009 20:14
последовательное выполнение процедур в макросе iamaxl Microsoft Office Excel 4 07.07.2009 16:23
Выполнение запросов к БД rcr БД в Delphi 17 22.05.2009 16:28
Последовательное копирование непустых строк.. Judge52 Microsoft Office Excel 2 13.03.2009 08:23