Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получение и присвоение значений параметров внутри запроса / 16 сообщений из 16, страница 1 из 1
03.12.2003, 16:35
    #32342309
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Можно ли сделать в Access нечто подобное:

Parameters [Parameter_1][DataType];
Select [Поля...]
From [хр. проц.]( Select [Значение, передаваемое в хр.проц.] From [таблицы...] Where [Условие, использующее Parameter_1] )

Т.е. хр.проц., используемая в главном View должна получать значение аргумента из подзапроса (параметрического).
...
Рейтинг: 0 / 0
03.12.2003, 16:39
    #32342314
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Если у тебя MS SQL2000 - то да, так делать можно с помощью UDF (User-defined functions - функций пользователя). Подробности в BOL
...
Рейтинг: 0 / 0
03.12.2003, 16:49
    #32342323
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Имеется ввиду чистый Access, т.е.
база mdb > OleDB > Delphi

Т.е. если это в принципе сделать можно, то каков синтаксис непосредственно в Access View? В MSDN есть небольшое описание возможностей хр. процедур, но более сложных случаев (таких, как например этот) нет.
...
Рейтинг: 0 / 0
03.12.2003, 16:56
    #32342335
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
ээээ.... Хранимка? В mdb?
...
Рейтинг: 0 / 0
03.12.2003, 17:08
    #32342356
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
2 Темный
Чему ты удивляешься?
Если в билдере могут быть таблицы, то почему бы в дельфи не быть хранимкам.
...
Рейтинг: 0 / 0
03.12.2003, 17:28
    #32342385
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА

Пошел на сковородке ERP-II писать. И с таблицами, и хранимками и т.д. и т.п. Данные в кастрюле. Связь между конфорками любезно предоставлена ОАО "Чубайс - @"
...
Рейтинг: 0 / 0
03.12.2003, 17:30
    #32342389
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Так. Подзапрос с параметрами что ли нужен?
Если он сохраненый - то да, можно как обычный запрос - только не забудь в итоговом запросе присвоить все необходимые параметры для параметрических запросов (понятно обяснил?)

Select * From QueryWithParametrs

а вот можно написать ли

Select * From (Parameters [Parameter_1][DataType]; Select [Значение, передаваемое в хр.проц.] From [таблицы...] Where [Условие, использующее Parameter_1]) - это будет твое домашнее задание :)
...
Рейтинг: 0 / 0
03.12.2003, 18:11
    #32342466
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Тёмному и Лоху Позорному:
Ваши псевдонимы очень точно определяют уровень ваших познаний.
Для вас и другних умников - "идите в MSDN и спросите".
Вообще, ADO-компоненты Delphi распознавали Access View, написанные определённым образом как ХП уже в Access 97 или 2000 - точно не помню.
В MSDN используется понятие ХП, хотя конечно это было бы правильнее называть параметрическим View, т.к. ХП предполагает наличие алгоритмического языка и возможность написания на нём кода. ХП Access же может содержать единственный SQL-оператор.

Для Senin Viktor.
Спасибо за ответ. Но всё-таки, я не нашёл описания синтаксиса передачи аргумента в ХП, которая находится в разделе From, т.е.:
есть ХП_1. Она описана как:

Parameters [Parameter_1][DataType];
Select [Поля...] From [Таблицы...] Where [Условие, использующее Parameter_1].

есть ХП_2. Она описана как:
Parameters [Parameter_2][DataType];
Select [Поля...] From ХП_1(вот сюда надо передать Parameter_2)

На такой синтаксис - передачу Parameter_2 в круглых скобках Access ругается: "ошибка в предложении From".
Если ты знаешь, где можно прочитать о подобном синтаксисе, не томи, кинь ссылку, пожалуйста.
...
Рейтинг: 0 / 0
03.12.2003, 18:17
    #32342474
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Перечитай свой вопрос. Перечитай мой вопрос. А потом попробуй поскрипеть мозгом.

В MDB нет хранимых процедур. Точка.
...
Рейтинг: 0 / 0
03.12.2003, 18:23
    #32342486
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
авторВаши псевдонимы очень точно определяют уровень ваших познаний.
Это неверное утверждение. Если бы было сказано не уровень познаний, а способ общаться с окружающими, то можно было бы поспорить. А так - точно неверно.
...
Рейтинг: 0 / 0
03.12.2003, 18:28
    #32342493
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
А как ты отнесёшся к такому синтаксису:

CREATE PROCEDURE ProcedureName
(Parameter1 datatype, Parameter2 datatype) AS
SQLStatement

DROP PROCEDURE ProcedureName

который прекрасно съедается MSJet. Заметь MSJet, работающим с файлом mdb, а не каким-нибудь SQL-сервером. Я же сказал "идите в MSDN и спросите". Это значит сюда: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acintsql.asp
Повторюсь, что по-моему правилнее эти ХП было бы называть параметрическими View.
...
Рейтинг: 0 / 0
03.12.2003, 18:31
    #32342494
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
/topic/62552#445020\r
\r
Это Ваши слова. Засим предлагаю закончить это безобразие
...
Рейтинг: 0 / 0
03.12.2003, 19:13
    #32342554
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
2dasistgut \r
\r
Все-таки ХП в Акесе нет. То что Create Proc работает - так это прихоть разработчика - и данная конструкция создает всего лишь обычный запрос Акеса. По ссылке,которую ты дал ничего нет касаемого слов CREATE PROCEDURE \r
\r
По поводу ников - то же не прав.\r
\r
>Но всё-таки, я не нашёл описания синтаксиса передачи аргумента в ХП, которая находится в разделе From\r
\r
Не надо ничего искать. Надо просто передать параметр в итоговый запрос.\r
А вот передаешь ты параметр не верно. Из недописанного FAQ /topic/45634&pg=4
...
Рейтинг: 0 / 0
03.12.2003, 19:36
    #32342586
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Что бы совсем разогнать сомнения в отличии ХП от запросов

Создадим запрос, используя синтаксис создания ХП
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function CreateProc()
   Dim strProc As String
    
   strProc =  "Create Procedure qryCustByCity "  & _
       "(prmCity varchar) as "  & _
       "select * from Customers where City = prmCity" 
    
   CurrentProject.Connection.Execute strProc
            
End Function


Создаться запрос
Код: plaintext
1.
2.
3.
   PARAMETERS prmCity Text;
   SELECT *
   FROM Customers
   WHERE (((Customers.City)=[prmCity]));


Выполним его
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Function RSFromParameterQuery(strCity As String)
   Dim prm As ADODB.Parameter
   Dim cmd As ADODB.Command
   Dim rst As ADODB.Recordset
  
   Set cmd = New ADODB.Command
   Set cmd.ActiveConnection = CurrentProject.Connection
  
   cmd.CommandText =  "qryCustByCity" 
   cmd.CommandType = adCmdStoredProc
  
   Set prm = cmd.CreateParameter( "prmCity" , adVarChar, adParamInput, _
      Len(strCity))

   prm.Value = strCity
  
   cmd.Parameters.Append prm
  
   Set rst = New ADODB.Recordset
   rst.Open cmd
  
   Do Until rst.EOF
      Debug.Print rst( 0 ), rst( 1 ), rst( 2 )
     rst.MoveNext
   Loop
  
End Function


Получим сообщение об ошибке.(Invalid SQL Statement;expected 'DELETE', 'INSERT','PROCEDURE', 'SELECT' or 'UPDATE' )
И будем его получать всю жизнь, пока не изменим
cmd.CommandType = adCmdStoredProc
на
cmd.CommandType = adCmdTable


:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with Microsoft Jet  4 . 0  you can use the ANSI CREATE PROCEDURE syntax to create 
a new query

In previous versions of Access, you could use either a procedure clause or a 
parameter query to create SQL statements that use parameters. Although both 
types of queries are still supported, another syntax you can use is the new 
CREATE PROCEDURE statement (its synonym is CREATE PROC). The new syntax is 
more ANSI- 92  compliant, and when scaling up to a Microsoft SQL Server database 
or MSDE, the syntax can be converted more easily. 

The CREATE PROCEDURE and DROP PROCEDURE statements can be executed only 
through the Jet OLE DB provider and ADO. They will return an error message if 
used through the Access SQL View user interface or DAO. Also note that 
procedures created with the CREATE PROCEDURE statement are saved in the 
database, but are not exposed as saved queries in the Access user interface. You 
can work with them only in ADO and ADOX programming code.
...
Рейтинг: 0 / 0
03.12.2003, 21:31
    #32342674
dasistgut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
Да, со ссылкой я ошибся, извините.
Вот: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acadvsql.asp
Статья "Advanced Microsoft Jet SQL for Access 2000". В начале статьи есть оглавление, в котором ссылка на параграфы "Procedures" и "Using a Procedure".

Перечитайте, пожалуйста 8-й топик. Там я написал, что правильнее было бы называть их параметрическими представлениями, но MS использует термин "Procedure". Поэтому можно считать это вопросом терминологии.

В приведённом в предыдущем топике третьем абзаце из документации написано, что в пользовательском интерфейсе Access нет объектов класа ХП. Действительно, то, что создаётся с помощью Create Procedure... видно как запросы. Но в 3-м топике этого обсуждения указано:

база mdb > OleDB > ADO > Delphi

т.е. я работаю не из Access или VB, а из Delphi. Но компоненты ADO уже распознают эти объекты как ХП.

Но всё это не относится к основной теме.
Ребята увели разговор совсем в другую сторону от первоначального вопроса.
Вопрос был не в том, как передать значения параметров в объект ADODB.Command или в TADOStoredProc, а как правильно написать оператор SQL так, чтобы он внутри себя вызывал, пускай будет "View с параметрами", передавая этому "View с параметрами" значение, рассчитываемое им самим.

Вопрос о ХП теперь действительно может быть закрыт.
...
Рейтинг: 0 / 0
04.12.2003, 08:57
    #32342866
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение и присвоение значений параметров внутри запроса
2dasistgut
>Вопрос ...как правильно написать оператор SQL так, чтобы он внутри себя вызывал, пускай будет "View с параметрами", передавая этому "View с параметрами" значение, рассчитываемое им самим.

Ну ничего другого, кроме того, что я написал посоветовать не могу. И судя по отсуствию реакции на ранее данные советы - ты или не понял, что нужно делать либо тебе просто лень делать и ты ждешь готового решения.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получение и присвоение значений параметров внутри запроса / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]