Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос в запросе в adp
|
|||
|---|---|---|---|
|
#18+
Люди! Наверняка такие вопросы часто здесь проходят, может на эту "ламерскую" тему есть ФАКи? Есть adp и MSSQL2k Мне нужно сделать на основании одного запроса другой, но в первый запрос мне нужно передать параметры - никак не могу понять как это сделать, т.к. если я делаю представление (насколько я понимаю это и есть views), то туда я не могу передавать параметры, если я делаю сохр. процедуру, то на ее основе так же не могу строить запросы... Объясните пожалуйста "популярно" как правильно и для чего использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2001, 10:26 |
|
||
|
Запрос в запросе в adp
|
|||
|---|---|---|---|
|
#18+
Прежде всего, хочу заметить, что запросы с параметрами как класс в SQL в лоб не реализуются. Запросы с параметрами в MDB Access есть ничто иное как мало эффективная попытка их как-то сымитировать. На практике такие запросы использовать очень неудобно, если они должны быть источниками других запросов, которые в свою очередь являются источниками данных формы или отчета. Я говорю о возможностях задания значения параметров в вызывающем запросе - она просто отсутствует, остается только вводить значения параметров вручную в ответ на выскакивающие невпопад диалоговые окна. Идеология "черного ящика", которому на вход подается некоторая информация, а с выхода снимаются итоговые результаты, в SQL далеко не всегда по-человечески реализуется. На практике функциональность запроса с параметрами в SQL реализуют многими способами. Каждый из них имеет свои плюсы и минусы. Метод 1. Самый тупой и простой - сформировать на клиенте текст обычного непараметризованного запроса, в текст которого подставлены уже конкретные значения параметров. При изменении значения параметров формируется новый текст запроса и снова отправляется на сервер. Метод 2. Использование хранимых процедур с параметрами. Один из наиболее существенных недостатков хранимой процедуры - неспособность возвращать обновляемый набор данных. В Access обычно это обходится использованием свойств формы Unique table и Resinc command. Их использование позволяет добавление и модификацию записей перенаправить в таблицу, в то время как отображается в форме записи, возвращаемые хранимой процедурой. Метод 3. Использование inline-функций SQL2000 (в более ранних версиях они отсутствуют). Inline-функции с параметрами, возвращающая table, по своим возможностям и функциональности наиболее близки к понятию "черного ящика". Inline-функция также как и хранимая процедура возвращает необновляемый набор записей. Однако, ее можно использовать во View, который уже будет возвращать обновляемый набор записей (особенно, если у VIEW имеются instaed-триггеры). Правда, с ними несколько неудобно работать из Access-2000. ADP этой версии заточен под версию SQL 7.0, в которой нет UDF. Поэтому работа с UDF из ADP Access-2000 возможна только обходными методами (например, UDF пишутся в QA, задействуются во VIEW, а ADP работает только со VIEW). Метод 4. Использование prepared-запросов. В коде VBA ADP это сводится к формированию объекта ADO Command с непустой коллекцией Parameters и заданием свойства prepared=true. В тексте SQL-команды вместо значения параметров указываются знаки вопроса. Например: select * from AnyTable where Fld1=? and Fld2=? Вместо знаков вопроса ADO автоматом подставляет значение первого и второго параметра. SQL-сервер при поступлении на него подобных запросов строит специфический план выполнения запроса, расчитанный заведомо на то, что параметры могут изменять значения. При поступлении на SQL-сервер повторно аналогичной команды с другими значениями параметров, при условии, что план ранее выполненного запроса еще находится в процедурном кэше, полная компиляция запроса не производится - в ранее подготовленный план подставляются новые значения параметров. Это позволяет сэкономить на многократной перекомпиляции схожих запросов, у которых изменяется только некоторая параметризованная часть. Последний метод позволяет обращаться и из Access2000 к inline-функциям, если в тексте запроса пишется что-то вроде: select * from MyFunc(?, ?) Данный метод имеет свои удобства и неудобства. При задании подобных запросов в качестве источника данных формы необходимо оперировать свойством формы InputParameters (см. хелп). Тем, кто переходит с MDB на ADP, следует обратить особое внимание, что VBA-функции, которые могли встраиваться в текст MDB-запросов, в ADP в текст запросов встраиваться не могут. Оно и понятно - ADP-запрос выполняется не в среде Access и VBA, а на SQL-сервере, которому про VBA ничего не известно. Могут быть еше комбинации приведенных методов. Какой именно метод использовать - решать программисту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2001, 12:17 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1824464]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 393ms |

| 0 / 0 |
