Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос, Составной запрос 
:(
    Опции темы
MihailCarib
Дата 19.8.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте уважаемые форумчане! Прошу не ругать новичка - вопрос простой, но что-то у меня запрос не получается. Ситуация такая: есть база данных Date_mark, в ней есть поле "Дата", есть поле "Фамилия". Я знаю, как выбрать из всех полей таблицы человека с определенной фамилией:

  Form10.Query1.Close;
  Form10.Query1.SQL.Clear;
  Form10.Query1.SQL.Text:='SELECT * FROM Date_mark where Фамилия=:p';
  Form10.Query1.ParamByName('p').Value:= Edit2.Text;
  Form10.Query1.OPEN;

Знаю, как выбрать  дату

Form10.Query1.Close;
  Form10.Query1.SQL.Clear;
  Form10.Query1.SQL.Text:='SELECT * FROM Date_mark where( Дата between :p and :c)';
  Form10.Query1.ParamByName('p').Value:=StrToDate(Edit1.Text);
  Form10.Query1.ParamByName('c').Value:=StrToDate(Edit3.Text);
  Form10.Query1.OPEN;

Но если мне нужно выбрать дату из уже выбранной фамилии, а не из всего "Date_mark", или наоборот, из выбранной даты выбрать только эту фамилию?  Не хочу все делать одновременно, например так: 

Form10.Query1.SQL.Text:='SELECT * FROM Date_mark (where( Дата between :p and :c)) and (where (Фамилия=:p))';

Надо именно выбрать сначала все события с фамилией, а потом из полученного набора выбрать дату (или наоборот). 

Примерчик если можно дайте, пожалуйста!
 
PM MAIL   Вверх
Keeper89
Дата 19.8.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

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



Цитата(MihailCarib @  19.8.2010,  18:31 Найти цитируемый пост)
Не хочу все делать одновременно, например так: 

Насколько мне известно, это единственный способ...


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


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(MihailCarib @  19.8.2010,  19:31 Найти цитируемый пост)
Не хочу все делать одновременно, например так: 

А в чём проблема-то? Нормальный запрос с условием.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Vas
Дата 19.8.2010, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(MihailCarib @  19.8.2010,  18:31 Найти цитируемый пост)
Form10.Query1.SQL.Text:='SELECT * FROM Date_mark (where( Дата between :p and :c)) and (where (Фамилия=:p))';

токи where один раз
Код

Form10.Query1.SQL.Text:='SELECT * FROM Date_mark where  Дата between :p and :c  and Фамилия=:p';


Добавлено @ 20:16
Цитата(MihailCarib @  19.8.2010,  18:31 Найти цитируемый пост)
Надо именно выбрать сначала все события с фамилией, а потом из полученного набора выбрать дату (или наоборот). 

А почему именно так, нафига два запроса делать? Одним с составным условием быстрее будет и проще.

Это сообщение отредактировал(а) Vas - 19.8.2010, 20:17


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
MihailCarib
Дата 19.8.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мужики, ну я же не просто так от не...  делать сижу тут и нервничаю. Я понимаю, что составной запрос  проще и правильнее, но есть ТЗ, в котором написано именно так и никак иначе. И хоть расшибись. При чем все остальное уже готово, осталось вот только эту "фишку" сделать...
PM MAIL   Вверх
Frees
Дата 19.8.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



дословно что в ТЗ написано?

Добавлено @ 22:09
Код

SELECT *
FROM
(SELECT * FROM Date_mark where( Дата between :p and :c)) S
WHERE s.Фамилия=:f



Код

  Form10.Query1.Close;
  Form10.Query1.SQL.Clear;
  Form10.Query1.SQL.Text:='SELECT * FROM Date_mark where Фамилия=:f';
  Form10.Query1.ParamByName('f').Value:= Edit2.Text;
  Form10.Query1.OPEN;

Form10.Query1.Close;
  Form10.Query1.SQL.Clear;
  Form10.Query1.SQL.Text:='SELECT s.* FROM ('+ Form10.Query1.SQL.Text +') s where( s.Дата between :p and :c)';
  Form10.Query1.ParamByName('f').Value:= Edit2.Text;
  Form10.Query1.ParamByName('p').Value:=StrToDate(Edit1.Text);
  Form10.Query1.ParamByName('c').Value:=StrToDate(Edit3.Text);
  Form10.Query1.OPEN;


глупое решение но и требование, извиняюсь, глупое

Добавлено через 8 минут и 39 секунд
еще такой вариант
Код

  Form10.Query1.Close;
  Form10.Query1.Filtered := False;
  Form10.Query1.SQL.Clear;
  Form10.Query1.SQL.Text:='SELECT * FROM Date_mark where( Дата between :p and :c)';
  Form10.Query1.ParamByName('p').Value:=StrToDate(Edit1.Text);
  Form10.Query1.ParamByName('c').Value:=StrToDate(Edit3.Text);
  Form10.Query1.OPEN;
  Form10.Query1.Filter := 'Фамилия = ' + Edit2.Text;
  Form10.Query1.Filtered := True;


Это сообщение отредактировал(а) Frees - 19.8.2010, 22:12


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
cat512
Дата 22.8.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile бред какой-то, таких аналитиков и тз.писателей гнать надо из компании. Люди наоборот боряться за то что-бы лишний раз сервер не нагружать

Добавлено через 7 минут и 41 секунду
ещё можно использовать master-detail query. Может реч идёт о них. Утебя на клиенте будет два набора данных, один с фамилиями другой с датами, с каким хочеш с таким и работай. Или тебе надо всё в одном держать?
PM MAIL   Вверх
MihailCarib
Дата 22.8.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Согласен, бред. Такое бывает, когда  ТЗ пишут деятели, ни...чего не понимающие в программировании, да и в остальном тоже слабо. Вот деньги они считают круто, мне бы так.  Нашел формальную лазейку в ТЗ, организовал составной запрос. Должны "проглотить", хоть и с боем. Спасибо всем. 
PM MAIL   Вверх
Deniz
Дата 23.8.2010, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



MihailCarib, можно еще локальными фильтрами воспользоваться.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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