Форум: "Начинающим";
Текущий архив: 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.042 c