Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в запр.в TQuery2 исп. НД,полученный от TQuery1, select из НД 
:(
    Опции темы
AlexV
Дата 12.12.2002, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.11.2002

Репутация: нет
Всего: нет



Подскажите пожалуйста
Как в запросе select в TQuery2 использовать набор данных, полученный в результате запуска TQuery1 ?
То есть нужно выполнить что-то типа TQuery2.SQL.Add('select ... from TQuery1 where ...');
Но так нельзя ?
PM MAIL   Вверх
oomneeq
Дата 12.12.2002, 21:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AlexV @ 12.12.2002, 13:19)
Подскажите пожалуйста
Как в запросе select в TQuery2 использовать набор данных, полученный в результате запуска TQuery1 ?
То есть нужно выполнить что-то типа TQuery2.SQL.Add('select ... from TQuery1 where ...');
Но так нельзя ?

ну вот прям так конечно нельзя
но добиться того что хочется можно другими путями
например
1)состряпать из TQuery1 VIEW
(create view as TQuery1.SQL.Text - если DB-платформа VIEW поддерживает)

2)Написать для ТQuery такой запрос, чтоб выбирал cразу  то что надо
(select ... from (TQuery1.SQL.Text) опять же DB должен позволять
констукцию select from select )

3)сохранить результсет от TQuery1 во временную таблицу, сделать запрос к ней
(нормальный вариант для локальных DB уп Paradox)
  Вверх
AlexV
Дата 12.12.2002, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.11.2002

Репутация: нет
Всего: нет



3-й вариант мне понравился больше других, поскольку я подключаюсь к Paradox.
У меня возникала такая идея, но возникал вопрос:
Как сохранить результат Query1 в новую таблицу dbf ?
PM MAIL   Вверх
AlexV
Дата 12.12.2002, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.11.2002

Репутация: нет
Всего: нет



.. извиняюсь, я подключаюсь к dbf (FoxPro)
Но все равно вопрос тот же
Как сохранить результат Query1 в новую таблицу dbf ?
PM MAIL   Вверх
neutrino
Дата 12.12.2002, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



А можно использовать вложенные запросы?

P.S. Я в этом не силен. Просто как раз про них читал...




--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
oomneeq
Дата 13.12.2002, 09:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AlexV @ 12.12.2002, 14:13)
.. извиняюсь, я подключаюсь к dbf (FoxPro)
Но все равно вопрос тот же
Как сохранить результат Query1 в новую таблицу dbf ?

Завтра с работы заброшу сюда пример для парадокса
если работаете через бде то для дбф он должен тоже сгодится.
  Вверх
oomneeq
Дата 13.12.2002, 09:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(neutrino @ 12.12.2002, 14:35)
А можно использовать вложенные запросы?

P.S. Я в этом не силен. Просто как раз про них читал...

А что ты называешь вложенными?
Select from select .. ?
если да, то не все БД его подерживают
а локальные так ваще вряд ли.
В завтрашнем примере будет имитация такой вложенности
а пока  - спааатьь :)
  Вверх
Fantasist
Дата 13.12.2002, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



А чем view хуже?
Здесь уже почти все обсудили:

http://www.forum.vingrad.ru/cgi-bin....88;st=0

А в таблицу, это вроде так:

SELECT ... FROM ... INTO <имя таблицы>


--------------------
Волны гасят ветер...
PM MAIL   Вверх
AlexV
Дата 13.12.2002, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.11.2002

Репутация: нет
Всего: нет



Я работаю с ADO. Подключаюсь к dbf. Вложенный запрос пробовал, но выдавались какие-то ошибки, и как я понял, dbf не поддерживает сложные вложенные запросы. Тем вложенность несколькоуровневая и более того, вложенные запросы с группировкой.
Поэтому я считаю, что лучше не лепить все в кучу, а выполнять запросы последовательно, сохраняя промежуточные результаты во временные таблицы.
Как это сделать, я пока не знаю.
У кого есть идеи ?
PM MAIL   Вверх
oomneeq
Дата 13.12.2002, 18:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AlexV @ 13.12.2002, 07:51)

Ну вот обещаный пример
надеюся разберетесь...
останутся вопросы, задавайте смело.

function SQLSet(Alias,SQLStr:string):TRxQuery;
var TryAgain:boolean;
   TmpTabl : TTable;
   DS      : TClientDataSet;
   S       : String;
begin
Result:=TRxQuery.Create(nil);
Result.ParamCheck:=false; //to prevent Alias sign to be interpreded as Param sign (:)
try
   with Result do begin
    if Alias<>'' then begin
     DataBaseName:=Alias;
     SQLStr:=DelAllSubstr(':'+Alias+':',SQLStr);
    end;
    SQL.Text:=SQLStr;
    repeat
     try
      TryAgain:=false;
      Open;
     except
      on E:EDBEngineError do begin
       TryAgain:=(E as EDBEngineError).Errors[0].Errorcode=10245;{File is locked}
       TryAgain:=(E as EDBEngineError).Errors[0].Errorcode=10245;{File is locked}
       if TryAgain then Cry('Захват данных другим пользователем. Нажмите OK чтобы повторить попытку.');
       if not TryAgain then raise;
      end
      else raise
     end;
    until not Tryagain;
   end;
  except
   Result.Free;
   raise;
  end
end;

function KHQuasiView(ViewFN,SQLStmnt:string):string;
var TmpQ:TQuery;
    TmpT:TTable;
begin
TmpQ:=SQLSet(SQLStmnt);
TmpT:=TTable.Create(nil);
TmpT.TableName:=ViewFN;
TmpT.BatchMove(TmpQ,batCopy);
TmpQ.Free;
Result:='"'+ViewFN+'"';
TmpT.Free;
end;
  Вверх
Medved
Дата 15.12.2002, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Использовать передачу параметров через свойство DateSource компонента TQuery

или использовать вложенный подзапрос.....

(второй вариант ИМХО предпочтительней)




--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
AlexV
Дата 16.12.2002, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.11.2002

Репутация: нет
Всего: нет



использовать вложенный подзапрос ?
только что попробовал - не получилось.
Пишет [Microsoft][ODBC Visual FoxPro Driver ]Syntax error.
По раздельности было 3 запроса, первые 2 независимые, а 3-й использует результаты первых 2-х.

analitF1
SELECT * FROM analit WHERE (((analit.SCHET)='621' Or (analit.SCHET)='622'))

MAIN_DT621
SELECT * FROM main WHERE (((main.DT_SCHET)="621"));

SELECT AnalitF1.CODE, AnalitF1.NAME, Sum(MAIN_DT621.SUMMA) AS Sum1
FROM AnalitF1 INNER JOIN MAIN_DT621 ON AnalitF1.CODE = MAIN_DT621.DT_CODE
GROUP BY AnalitF1.CODE, AnalitF1.NAME


Вот SQL код TADOQuery после склейки (подзапросы):

SELECT AnalitF1.CODE, AnalitF1.NAME, Sum(MAIN_DT621.SUMMA) AS Sum1
FROM (SELECT * FROM analit AnalitF1 WHERE (((analitF1.SCHET)='621' Or (analitF1.SCHET)='622'))) INNER JOIN (SELECT * FROM main MAIN_DT621 WHERE (((main.DT_SCHET)="621"))) ON AnalitF1.CODE = MAIN_DT621.DT_CODE
GROUP BY AnalitF1.CODE, AnalitF1.NAME

Если подзапросами не получается, то мож первым способом воспользоваться.
Насчет первого способа: Как это в DataSource в TADOQuery запихать параметры?
PM MAIL   Вверх
Medved
Дата 16.12.2002, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 1
Всего: 154



Во-первых Select from select ..  - это детище Майкрософтовских программистов, которое я не рекомендую использовать, так как это отклонение от стандарта SQL.

я уже писал, как правильно создавать вложеные подзапросы, вот линк: http://www.forum.vingrad.ru/cgi-bin....;t=4788



Во-вторых, про передачу параметров через свойство DateSource компонента TQuery

Вот пример:
1)таблица расхода товара (Rashod)- компонент RasQuery (TQuery), к нему подвязан TDataSource - dsRasQuery;
В ней имеются поля NameTovar, Data, Kolvo;

2)таблица товаров (Tovar) - компонент TovarQuery, подвязан dsTovarQuery.
В ней имеются поля NameTovar, Description, Year;

в RasQuery SQL запрос следующего вида:
Код

SELECT * FROM Rashod
WHERE NameTovar = :NameTovar
ORDER BY Date, Kolvo


в TovarQuery:
Код

SELECT NameTovar FORM Tovar
WHERE Year = '2002'


Теперь, свойству DataSource компонента RasQuery пристваиваем dsTovarQuery.

Вот и все!

Должен заметить, что  в качестве значения параметра :NameTovar берется текущее значение поля NameTovar из НД TovarQuery, как если бы это было назначено при помощи оператора

Код

RashodQuery.ParamByName('NameTovar').Value := TovarQuery.FieldByName('Tovar').Value;



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.