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

Вниз

Запрос с использованием имен других dataset (виртуальных таблиц)   Найти похожие ветки 

 
Alex7 ©   (2007-05-17 11:19) [0]

Здравствуйте, уважаемые мастера.
Подскажите, пожалуйста, как будет выглядеть текст запроса, если в  нем использовать имена других TADOQuery.
Другими словами в:
SELECT ... FROM Table1 T1 INNER JOIN Тable2 ON (T1.Id = T2.Id)
заменить имя таблицы Table1 базы данных на имя DataSet, сформированного с помощью другого TADOQuery. (База MS Access 2003)
Спасибо!


 
ЮЮ ©   (2007-05-17 11:24) [1]

Запрос положить не в TADOQuery, в "Запросы" в Access и назвать Query2

Тогда  
 SELECT ... FROM Table1 T1 INNER JOIN Query2 Q2 ON (T1.Id = Q2.Id)


 
Desdechado ©   (2007-05-17 11:45) [2]

СУБД не имеет представления о твоих каких-то программных датасетах. Она оперирует своими.


 
Alex7 ©   (2007-05-17 11:47) [3]

Спасибо за ответ. К сожалению применить это решение не смогу. Тексты обоих запросов нужно формировать динамически в RunTime.


 
ЮЮ ©   (2007-05-17 12:13) [4]

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


 
Alex7 ©   (2007-05-17 13:25) [5]

С ДЕЛЬФИ только начал работать. В Parodox-е можно результат выполнения запроса присвоить переменной типа TCursor, а затем работать с ней как с таблицей.db (изменять в ней данные, использовать её в других запросах).
Исходные условия конкретной задачи (отображения данных в Контролах) благоприятствуют следующему решению: Пусть относительно долго, но редко выполняется тяжелый запрос, который первично усекает даные, и формирует виртуальную таблицу, а затем часто(так нужно) и быстро его усекает второй запрос. Это сама идея-велосипед. По условиям же конкретной задачи и второй запрос также нужно будет связывать с одной-двумя таблицами базы данных, но не так тяжело по времени выполнения.
Можно ли реализовать как-то так, может дадите ссылку?
Спасибо.


 
DrAndrey ©   (2007-05-17 14:31) [6]

Что значит усекает второй запрос? Почему виртуальную? Какая используется БД? И вообще часто-редко - это как?


 
Sergey13 ©   (2007-05-17 14:48) [7]

> [5] Alex7 ©   (17.05.07 13:25)

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


 
Alex7 ©   (2007-05-18 08:09) [8]

Здравствуйте, уважаемые мастера.
Изините, было не моё время суток.
>DrAndrey ©  [6]
1. Слово усекает применил для обозначения сокращения объема данных.
2. Access в многопользовательском режиме.
3. Раз в час - редко, несколько раз в минуту - часто.

По условиям задачи даные только просматриваются, не редактируются.
Задача  - каталог объектов(имен файлов), каждый объект которого принадлежит нескольким деревьям признаков. Хорошо в лесу: один конкретный лист висит только на одном дереве, если он вообще висит, в данной задаче - на нескольких одновременно. Поэтому и пришла идея двухступенчатого отбора.
Повторю идею-велосипед: Первый запрос по сложным условиям выбирает часть данных из многотабличной нормализованной базы, формируя одну таблицу даных (конечно происходит денормализация). Эта таблица-набор данных формируется  не как дополнительная таблица в самой базе данных, а как переменная приложения (может быть какой-нибудь временный файл) у пользователя. Второй, динамический формируемый, запрос отбирает данные из этого файла-переменной для отображения в гридах.

>Sergey13 ©  
Спасибо за "оптимизировать первичный запрос, добавляя нужные индексы". Наверное это путь к решению.


 
Sergey13 ©   (2007-05-18 08:51) [9]

> [8] Alex7 ©   (18.05.07 08:09)
> Повторю идею-велосипед

Твоя идея легко решается с помощью временных таблиц, они собственно и придуманы для этого. Но при этом нужны НАСТОЯЩИЕ временные таблицы, поддерываемые СУБД. Приспосабливание под это дело обычных таблиц может здорово замусорить БД и замедлить ее работу. В аксесе таких временных таблиц, насколько я знаю нет.
Так что единственный приемлемый путь - оптимизация выборки. Это облегчается у тебя тем, что БД только для чтения. Можно как угодно ее денормализовать и проиндексировать.


 
Alex7 ©   (2007-05-18 11:26) [10]

>Sergey13
Спасибо за ответ.



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

Форум: "Начинающим";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
2-1179328567
nuflin
2007-05-16 19:16
2007.06.10
Очень важный вопрос


2-1179416636
Kostafey
2007-05-17 19:43
2007.06.10
Запрет на редактирование/удаление записи по значению


15-1178804743
Manic Mechanic
2007-05-10 17:45
2007.06.10
СТРИМ


15-1178787861
Vlad Oshin
2007-05-10 13:04
2007.06.10
Почему то сбилось нахождение кода по щелчку в ObjectInspector


15-1178900041
Juice
2007-05-11 20:14
2007.06.10
XML редактор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский