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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2013, 11:25   #11
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Сделал так:

Код:
SELECT * FROM AAA WHERE NOW() - [ДАТА ПОСТУПЛ] > 177 AND [ИСТОЧНИК]=1
Работает...
А теперь нужно сделать еще запрос

Код:
SELECT * FROM AAA WHERE NOW() - [ДАТА ПОСТУПЛ] > 58 AND [ИСТОЧНИК]=2
И собрать эти два запроса в кучу что бы потом отображать в одном гриде
Пытаюсь так:
Код:
SELECT *
FROM AAA WHERE 
NOT EXISTS (SELECT * FROM AAA NOW() - [ДАТА ПОСТУПЛ] > 177 AND [ИСТОЧНИК]=1) 
AND
NOT EXISTS (SELECT * FROM AAA NOW() - [ДАТА ПОСТУПЛ] > 58 AND [ИСТОЧНИК]=2
Понятно, раз пишу, что оно не работает. Выручайте
govorun1 вне форума Ответить с цитированием
Старый 08.12.2013, 11:32   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

У-у, а чего такой хитрый ход мысли? Смотри - хоть одна запись будет найдена в любом из подзапросов, то основной запрос ничего не вернет.

Можно так
Код:
WHERE (NOW() - [ДАТА ПОСТУПЛ] > 177 AND [ИСТОЧНИК]=1) OR
      (NOW() - [ДАТА ПОСТУПЛ] > 58 AND [ИСТОЧНИК]=2)
или объединить два запроса с помощью UNION. Какой вариант оптимальней нужно смотреть в конкретной ситуации, так сразу и не скажу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.12.2013, 12:07   #13
govorun1
Форумчанин
 
Регистрация: 08.11.2013
Сообщений: 137
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У-у, а чего такой хитрый ход мысли? Смотри - хоть одна запись будет найдена в любом из подзапросов, то основной запрос ничего не вернет.

Можно так
Код:
WHERE (NOW() - [ДАТА ПОСТУПЛ] > 177 AND [ИСТОЧНИК]=1) OR
      (NOW() - [ДАТА ПОСТУПЛ] > 58 AND [ИСТОЧНИК]=2)
или объединить два запроса с помощью UNION. Какой вариант оптимальней нужно смотреть в конкретной ситуации, так сразу и не скажу
Сделал так:
Код:
SELECT *
FROM AAA WHERE (NOW() - [ДАТА ПОСТУПЛ] > 177 AND [ИСТОЧНИК]=1) 
OR
(NOW() - [ДАТА ПОСТУПЛ] > 58 AND [ИСТОЧНИК]=2)
А теперь если можно вопрос посложнее.
Задумка такая. При запуске программы будет выполнятся вышеуказанный запрос и его результаты будут отображаться в гриде в отдельной форме. Нужно написать условие (IF...THEN) при котором если результат запроса НЕ ПУСТОЙ то автоматом показывать форму с гридом.
Например:
Код:
procedure TForm2.FormShow(Sender: TObject);
IF....... THEN
FORM4.SHOWMODAL;
Осталось сообразить как правильно условие написать

Последний раз редактировалось govorun1; 08.12.2013 в 12:09.
govorun1 вне форума Ответить с цитированием
Старый 08.12.2013, 12:47   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm2.FormShow(Sender: TObject);
begin
adoquery.sql.text:=Запрос;
adoquery.Open;
IF not adoquery.eof THEN
FORM4.SHOWMODAL;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADOQuery Janger Общие вопросы Delphi 8 07.10.2013 16:38
adoquery Vse Strogo Общие вопросы Delphi 2 05.06.2012 14:39
ADOQuery ара Помощь студентам 3 14.04.2011 00:00
adoQuery ander7 Помощь студентам 3 09.04.2011 09:02