Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Вниз

SQL запрос SQL запроса для компонента ADOQuery!   Найти похожие ветки 

 
Helen   (2002-01-29 15:47) [0]

Уважаемые мастера!
Возникли трудности с использованием результатов одного SQL запроса в другом SQL запросе.
Один компонент ADOQuery1 отвечает за некоторую выборку. Как выбрать неповторяющиеся (DISTINCT) значения одного поля этой выборки(компонента ADOQuery1).
Если использовать функцию Format(), то проиллюстрируйте пожалуйста примером как именно.
Заранее спасибо! :)))



 
Delirium   (2002-01-29 16:01) [1]

Этот вопрос надо было в "Базах данных" задавать, я тебе уже в "Потрепаться" написал как сделать через временную таблицу.


 
Helen   (2002-01-29 16:26) [2]

Я конечно извиняюсь, что опять "не туда попала", просто мечусь в поисках решения...:)))

>ADOQuery1:
>Select ... into #tmp from ...
>ADOQuery2:
>Select distinct ... from #tmp
>Единственное условие, ADOQuery1 и ADOQuery2 должны работать >через один и тот-же ADOConnection, так они попадут в одну >сессию на MSSQL.

Я конечно извиняюсь за то что не поняла, но объясни мне поподробней как у них может быть один ADOConnection, если результатом первой выборки (из основной базы) будет временная таблица. А ADOQuery2 должен ссылаться на первый запрос а не снова коннектиться к основной базе.
Значит у ADOQuery2 в свойстве DataSource через компонент DataSource нужно "сослаться" на ADOQuery1? У меня так не получилось.
Заранее спасибо.



 
Delirium   (2002-01-29 18:05) [3]

Нет тут ничего, связанного с DataSource, просто что-бы делать запросы с резульатов их ведь надо где-то хранить. Поэтому создаём временную таблицу, помешаем туда результаты твоего запроса и обращаемя к ней из другого ADOQuery (а можно и из того-же, ведь MSSQL может исполнять несколько инструкций подряд). Вот и всё :)



 
Helen   (2002-01-29 20:12) [4]

for Delirium:

Спасибо :). Ты все правильно говоришь. Но можно ли как-нибудь без пересохранения этой информации на диске, выборки рискуют быть большими. Это "не лишнее" время и место :). Я встречала в умной книжке упоминание что так сделать можно, но конкретно как именно (ссылка запроса на запрос) не понятно.
Заранее всё равно спасибо.


 
wicked   (2002-01-29 20:17) [5]

2 Helen ©

используй view или запросы из запроса (вложенных запросов).... только учти, способ хранения данных во временной таблице имеет свои преимущества: скорость обращения к промежуточным данным, например.... преимущества view и запросов - меньше места занимают....


 
Delirium   (2002-01-29 20:23) [6]

Погоди, ты понимаешь, что для того чтобы выполнить SQL запрос нужен сервер? С локальной выборкой, "оторванной" от СУБД можно делать лишь элементарные вещи - Filter,например, а для чего-то более сложного без сервера не обойтись. К тому-же "...без пересохранения этой информации на диске, выборки рискуют быть большими...", если говорить затратах ресурсов, то на временные таблицы тратится память и дисковое пространство сервера, а не клиента, да и по скорости ты его врятли "обгонишь". Ведь единственная альтернатива - экспорт в какой-нибудь DBF, индексация и обработка на клиенте, что как правило оч.долго. Да и прокачать по сети миллионную выборку, дело не одной секунды :)


 
Alex Y   (2002-01-30 06:08) [7]

2 Helen
К сожалению Delirium прав, выборка в tQuery хранится в памяти и к ней ты можешь обратиться только через методы tQuery, а это построчный проход, фильтрация и пр. Можно переадресовать весь запрос другому tQuery, но выбрать из него не получится.
Соответственно решать тебе, либо создавать временную таблицу, либо обходить выборку построчно и отказаться от второго запроса.


 
Shirson   (2002-01-30 09:00) [8]

А не проще во второй квери просто совместить оба запроса?


 
Helen   (2002-01-30 12:29) [9]

for Shirson:

Тоже пробовала. Первый запрос формируется по ходу программы в зависимости от выбранных "параметров". "Совместить" красиво не получилось :), если только потом фильтром.

for Delirium:

Спасибо! Ты самый активный помощник :).


 
Севостьянов Игорь   (2002-01-30 16:04) [10]

А почему бы не делать все действия в SQL запросе ?
DISTINCT ?
Или вложенные запросы или группировку ?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
1-79367
svv
2002-02-08 16:40
2002.02.25
Tedit переход по Enter к следующему Tedit


1-79344
Данил
2002-02-05 17:22
2002.02.25
Help: Нужно


1-79321
vinni2000
2002-02-07 19:10
2002.02.25
Нужен удобный компонент для выбора Каталога


1-79371
Aleksandr
2002-02-08 19:23
2002.02.25
Как из программы узнать формат строки с датой/временем для SQL-сервера


3-79249
Fareader
2002-01-29 15:30
2002.02.25
Коды ошибок Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский