Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли сделать SQL запрос внутри Дельфи к результатам запроса в [D5, MSSQL]


Страницы:   1 2

theEnter ©   (2002-10-14 08:55:00) 

Можно ли сделать SQL запрос внутри Дельфи к результатам запроса выполненного на сервере?
:-) Дело в том что когда я делаю обыкновенный запрос к SQL Server , то иногда мне нужно эти результаты обработать более детально, а бегать в цикле по полям ADOQuery1.Fields[i] неудобно - ведь результат запроса - таблица и к ней логичнее применить SQL запрос ! Заранее спасибо!


Adony   (2002-10-16 10:32:00) [1]

2 mtihonov
это не совсем то, что требуется.
т.к. таблица все-равно будет создана на сервере :)


SeB   (2002-10-15 17:27:00) [2]

2petrov

А нельзя ли поподробнее про компоненты, которые делают запросы из датасета? Где скачать можно?


MegaBass   (2002-10-15 12:09:00) [3]

проще TClientDataset там есть BeforeGetRecord --OwnerData
можешь передавать на сервер любые данные
я делаю так с дополнительными WHERE условиями.


perov   (2002-10-15 10:59:00) [4]

отправил на мыло.


theEnter   (2002-10-15 10:07:00) [5]

perov © : Интересно а что это за компоненты ? Если нестандартные, то где их можно взять ?


perov   (2002-10-15 07:51:00) [6]

есть компоненты, которые делают запросы из любогодатасета. (правда я ими не пользовался)


mtihonov   (2002-10-15 06:24:00) [7]

Рассмотри следующее предложение:
В текущем Connecte (это обязательно) создаешь временную таблицу
SELECT Field1,Field2,...
INTO #TempTableName
FROM MyTable
WHERE <Условия>

Для данного Connect"а будет создана временная таблица. Для этого Connect"а ее имя будет #TempTableName, на самом деле ее имя будет #TempTableName___________XXXXX. Далее можешь работать с этой временной таблицей:
SELECT Field1,Field2,...
FROM #TempTableName
WHERE <Условия>

После закрытия Connect"а таблица #TempTableName будет автоматически уничтожена. Эта таблица видна только в данном Connect"е для тебя. Если хочешь чтобы временная таблица была видна другим пользователям - назови ее ##TempTableName.
Насчет уничтожения такой таблицы ничего сказать не могу - не проверял. Читай Help по MS SQL.


Max Zyuzin   (2002-10-14 12:07:00) [8]

>22606 © (14.10.02 11:26)
;о)


passm   (2002-10-14 12:01:00) [9]

theEnter (14.10.02 11:54)> Для автоматической установки типа/значений параметров в запросе. Т. е. если в запросе Query1 имеется параметр "PARAM1" и указан DataSource, то перед открытием/исполнением если в источнике DataSource будет найдено поле PARAM1, то фактически выполнится Query1.ParamByName("PARAM1").AssignField(FieldByName(DataSource.DataSet.FieldByName("PARAM1")))


ЮЮ   (2002-10-14 11:56:00) [10]

Для организации связи Master-Detail. Разве в Helpe об этом не написано???


theEnter   (2002-10-14 11:54:00) [11]

passm ©: Что такое вложеный запрос я знаю, но зачем тогда в TQuery поле DataSource ?


22606   (2002-10-14 11:51:00) [12]

Если вопрос стоит именно так, то никак.
Здесь Вы, скорее всего, представляете, что первый запрос выполнился и выполнять его вторично нет смысла, то это не совсем так, так как результаты первого запроса все-равно хранятся на сервере до того момента, пока Вы не вытяните его на клиента, а как кто-то здесь уже отвечал (кстати тот-же Max Zyuzin ©), это может быть более долгим и ресурсоемким, чем выполнить все на сервере - то-ли одним запросом то-ли с помощью View.


passm   (2002-10-14 11:47:00) [13]

theEnter (14.10.02 11:39)> Тебе все равно не сделать то, что ты хочешь - запрос выполняется на сервере и над данными расположенными в БД. Выполнить запрос на результат - это фантастика :-).
Тебе же народ предлагает конструкцию:
SELECT T1.*
FROM (SELECT Q1...
FROM TABLE1 AS Q1) AS T1(FIELD1,.. FIELD_N)
Вложенный запрос наз-ся.


theEnter   (2002-10-14 11:39:00) [14]

22606 © :
>Тогда нет никаких препятствий - создавай View
Вы имеете в виду создать View на сервере? Исли так тогда - Чем это лучше простого обращения к Серверу обычным запросом ? Если не понял - извините, но всетаки проблема осталась: как мне указать что источником для запроса Query является другой запрос ADOQuery ?


passm   (2002-10-14 11:37:00) [15]

22606 © (14.10.02 11:26)> Разбиение запросов на просмотры нужно не столько серверу сколько пользователю/программисту для облегчения его понимания/написания, многократного использования и предоставления защищенных данных пользователям (правильное применение запросов уменьшает вероятность несанкционированного доступа к данным).


22606   (2002-10-14 11:26:00) [16]

Да, спасибо, Max Zyuzin ©, я уже после своего ответа это увидел, но и Вы внимательнее читайте ответ :-) - оба раза я предположил, что скорее всего все можно оформить в один запрос.
Но очень часто бывает, что и первичный запрос очень навороченный и быстрее сделать два, чем втолковать серверу в одном запросе чего от него хотят.


22606   (2002-10-14 11:16:00) [17]

Сорри, не заметил, что в вопросе ты указал сервер - MSSQL.
Тогда нет никаких препятствий - создавай View.
Хотя, повторюсь, возможно можно и в рамках одного запроса все сделать.


Max Zyuzin   (2002-10-14 11:14:00) [18]

>22606 © (14.10.02 11:10)
Внимаетельнее читай вопрос, там указан сервер MSSQL. Предложение со View разумно, но возможно все можно офрмить одним запросом...


22606   (2002-10-14 11:10:00) [19]

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

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

Если отбросить вероятность того, что данную операцию "Ы" нельзя выполнить в рамках одного запроса (а скорее всего все-таки можно), то мне больше нравится предложение Reindeer Moss Eaterс применением View, если конечно используемый сервер дает такую возможность.
То есть вместо Select"a создаешь View, а потом к нему обращаешься как к таблице. View , кстати, можно и не удалять, если данная операция ("Ы") :-) будет часто выполняться.


MishaH   (2002-10-14 10:11:00) [20]

В ADOQuery есть свойство Recordset - к нему можно применить фильтр: ADOQuery.Recordset.Filter = "Field like ""%ля-ля%"" and ...". Убрать фильтр: ADOQuery.Recordset.Filter = ""
Это не поможет (писал по памяти, остальное есть в справке)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо