Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Запрос с использованием имен других 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
15-1179224930
boriskb
2007-05-15 14:28
2007.06.10
О русских


2-1179396735
17Landgraf
2007-05-17 14:12
2007.06.10
Как изменить свойства файла


8-1159337541
Mishenka
2006-09-27 10:12
2007.06.10
Какие есть компоненты для конвертирования из BMP в GIF ?


2-1179841159
Sonia
2007-05-22 17:39
2007.06.10
Как показать на экран форму вперед главной


15-1179035202
Пол
2007-05-13 09:46
2007.06.10
инет-магазин