powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Научите, пожалуйста, пользоваться PARAMETRS
24 сообщений из 24, страница 1 из 1
Научите, пожалуйста, пользоваться PARAMETRS
    #37730505
z0dium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или подскажите, где про это доступно можно прочитать
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37730511
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37730519
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
z0diumИли подскажите, где про это доступно можно прочитать
Описание PARAMETERS вполне доступно и полно описано в хелпе.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37730791
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldОписание PARAMETERS вполне доступно и полно описано в хелпе.
Разве в хелпе описано всё? Что-то сомневаюсь.
В запросах Access'а (mdb, accdb, ...) "PARAMETERS" и "PROCEDURE" синонимы. Почему? Не знаю.
Когда даём имя параметра можно использовать или не использовать символ "@", при чём Access не будет "переспрашивать" значение параметра. Т.е. я имею ввиду вот это:
Код: sql
1.
2.
PARAMETERS @C Long;
SELECT * FROM tblCustomer WHERE CustomerID = C;


Или так:
Код: sql
1.
2.
PARAMETERS C Long;
SELECT * FROM tblCustomer WHERE CustomerID = @C;


Далее, можно запускать запрос с "фиксированным" параметром. Типа так:
Код: sql
1.
2.
PARAMETERS @C Long = 1000;
SELECT * FROM tblCustomer WHERE CustomerID = C;


В этом случае Access не будет спрашивать значение параметра. При этом когда фиксируем значение параметра можно использовать как встроенные функции, так и пользовательские VBA функции.
Код: sql
1.
2.
PROCEDURE @D DateTime = DMAX("ContractDate", "tblContract");
SELECT * FROM tblContract WHERE ContractDate = D


Далее, во вложенном запросе внутри квадратных скобок можно "фиксировать" значение параметра (правда начиная в А2007 в "сохранённых" запросах такое не проходит, а вот в VBA на лету создавать Recordset пожалуйста):
Код: sql
1.
2.
3.
SELECT * FROM
[PROCEDURE @D DateTime = Date();
SELECT * FROM tblContract WHERE ContractDate = D]. Data



Об этом почему-то хелп молчит как партизан. :)

P.S. Этим конечно же не исчерпываются все нюансы, а только те, которых вспомнил "на скорую руку".
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37730858
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenmds_worldОписание PARAMETERS вполне доступно и полно описано в хелпе.
Разве в хелпе описано всё? Что-то сомневаюсь.
studieren,

если встать на вашу позицию, то любая отсылка к хелпу будет ничтожной, поскольку хелп не содержит полного описания всех деталей ни по одной статье в нем опубликованной. За исключением, может быть только базовых или самых элементарных.
Недаром у нас есть ФАКи, как готовые, так и множество незавершенных.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37742871
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть сохраненный запрос q, он используется в дальнейшем в запросе на создание таблицы. Можно ли ему в секции WHERE программно передать параметр кодом типа
Код: vbnet
1.
q.Parameters("[max_count]").Value = my_value 

и сразу же создать таблицу на основе этого сохраненного запроса с принятым параметром? Типа передали параметр в пользовательскую табличную функцию и на основе этой функции тут же создали таблицу.
ЗЫ Хелп http://office.microsoft.com/ru-ru/access-help/HA001231494.aspx не помог :-/
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746012
z0dium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщик,

я тоже хотел бы узнать возможно ли это?
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746047
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Возможно.
http://www.sql.ru/faq/faq_topic.aspx?fid=410
см. там, где написано q.Execute
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746083
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВозможно.
http://www.sql.ru/faq/faq_topic.aspx?fid=410
см. там, где написано q.Execute
К сожалению, для запроса на выборку q.Execute не работает.
2006 Microsoft Corporation. All rights reservedCannot execute a select query. (Error 3065)

You tried to use the Execute method with a select query. The Execute method is valid only with action queries. Select queries contain a SELECT statement and can return records; action queries do not.
Я вот и хотел узнать, можно ли обойтись без того, чтобы специально создавать временную таблицу - источник данных, а как-то воспользоваться сохраненным запросом на выборку с полученным параметром.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746110
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщик,

Ну Вы даёте. :)
Вы читать не умеете что ли? Я же написал как выглядит запрос с "фиксированным" параметром.
Код: vbnet
1.
2.
PARAMETERS @C Long = 1000;
SELECT * FROM tblCustomer WHERE CustomerID = C;



Допустим, у Вас есть запрос "q" у которого параметр "max_count".
Теперь Вы хотите создать таблицу "Table1" с фиксированным значением для параметра "max_count". Т.е. именно такой запрос, который не спрашивает у пользователя значение для параметра. Тогда запрос выглядит примерно так:
Код: sql
1.
2.
PARAMETERS max_count Long = 1000;
SELECT * INTO Table1 FROM q


Или так:
Код: sql
1.
2.
PARAMETERS max_count Long = DCount("НекоеПоле", "НекаяТаблица");
SELECT * INTO Table1 FROM q


Вместо "SELECT * INTO" можно "INSERT INTO ..." (так даже лучше)! Более того, вместо "DCount" можете подсучить собственную VBA функцию.
И самое главное такой запрос можно и не сохранить, а сразу использовать через Execute.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746170
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenкладовщик,

Ну Вы даёте. :)
Вы читать не умеете что ли? Я же написал как выглядит запрос с "фиксированным" параметром.
Код: vbnet
1.
2.
PARAMETERS @C Long = 1000;
SELECT * FROM tblCustomer WHERE CustomerID = C;



Допустим, у Вас есть запрос "q" у которого параметр "max_count".
Теперь Вы хотите создать таблицу "Table1" с фиксированным значением для параметра "max_count". Т.е. именно такой запрос, который не спрашивает у пользователя значение для параметра. Тогда запрос выглядит примерно так:
Код: sql
1.
2.
PARAMETERS max_count Long = 1000;
SELECT * INTO Table1 FROM q


Или так:
Код: sql
1.
2.
PARAMETERS max_count Long = DCount("НекоеПоле", "НекаяТаблица");
SELECT * INTO Table1 FROM q


Вместо "SELECT * INTO" можно "INSERT INTO ..." (так даже лучше)! Более того, вместо "DCount" можете подсучить собственную VBA функцию.
И самое главное такой запрос можно и не сохранить, а сразу использовать через Execute.
Наверное, я просто тупой. Давайте по порядку:
1. У меня есть сохраненный запрос на выборку с параметром.
2. На основе этого запроса с принятым параметном мне нужно создать таблицу из сконструированного сохраненного запроса на создание таблицы (он макросом в акцессе запускается).
Значит, что я пишу в коде VBA?
ЗЫ Хотел сначала свой вар-т написать, но постеснялся опять позориться.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746175
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил все-таки рискнуть. Как-то так нужно?
Код: vbnet
1.
2.
3.
4.
Set q = CurrentDb.QueryDefs("qry_TestParameters")
PARAMETERS max_count Long = 1000
DoCmd.RunMacro "macro_TWR_Report"
q.Close: Set q = Nothing
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746189
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщик,

Сначала надо узнать значение параметра. Узнав в динамике создаём SQL текст и запускаем запрос "на лету", а можно запускать и сохранённый запрос. Вот по поводу второго вариант в FAQе Как запускать запросы из VBA в первом же вопросе уже всё прожевано. Осталось только проглотить. :)
Вот простейший код:
Код: vbnet
1.
2.
3.
4.
5.
Dim q As DAO.QueryDef
Set q = CurrentDb.QueryDefs("qry_TestParameters")
q.Parameters("max_count") = 1000
q.Execute
Set q = Nothing


Там же в FAQе указан способ отключения подтверждений.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746200
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в FAQе как я понимаю коды должны быть образцово-показательными.
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim q As DAO.QueryDef, p As DAO.Parameter
  Set q = CurrentDb.QueryDefs("ИмяЗапроса")
  q.Parameters("[Введите начальную дату:]").Value=Cdate(Ваше_значение_параметра)
'и т.д. пока не переберете все параметры
  q.Execute 
  q.close: set q=Nothing


Вопрос к модераторам.
Переменную "p" объявить-то объявили, но в коде вообще не использовали. Тогда зачем "p" вообще нужен здесь? :)
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746254
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenкладовщик,

Сначала надо узнать значение параметра. Узнав в динамике создаём SQL текст и запускаем запрос "на лету", а можно запускать и сохранённый запрос. Вот по поводу второго вариант в FAQе Как запускать запросы из VBA в первом же вопросе уже всё прожевано. Осталось только проглотить. :)
Вот простейший код:
Код: vbnet
1.
2.
3.
4.
5.
Dim q As DAO.QueryDef
Set q = CurrentDb.QueryDefs("qry_TestParameters")
q.Parameters("max_count") = 1000
q.Execute
Set q = Nothing


Там же в FAQе указан способ отключения подтверждений.
Вот такая примерно ситуация:
1. Есть у меня сохраненный запрос на выборку qry_TestParameters1 с текстом
Код: sql
1.
2.
3.
SELECT *
FROM TradesT
WHERE (((TradesT.Date)=[d1]));


2. Есть сохраненный запрос qry_TestParameters2 на создание таблицы
Код: sql
1.
2.
SELECT qry_TestParameters1.* INTO tbl_TestParam
FROM qry_TestParameters1;


Как qry_TestParameters2 запустить в коде и создать таблицу, если d1 - это дата #23/03/2012#, к примеру?
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37746310
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://allenbrowne.com/bug-13.html - это насчет в хелпе есть все
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747485
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
кладовщикУ меня есть сохраненный запрос q, он используется в дальнейшем в запросе на создание таблицы.кладовщикК сожалению, для запроса на выборку q.Execute не работает.
Так запускайте сразу Ваш запрос на создание таблицы. Все параметры вложенных в него запросов доступны как его собственные параметры.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747486
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
studierenВопрос к модераторам.
Переменную "p" объявить-то объявили, но в коде вообще не использовали. Тогда зачем "p" вообще нужен здесь? :)
Поправим, спасибо.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747489
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
кладовщикэто дата #23/03/2012#
Такой даты быть не может. Может быть дата #03/23/2012#.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747796
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычкладовщикУ меня есть сохраненный запрос q, он используется в дальнейшем в запросе на создание таблицы.кладовщикК сожалению, для запроса на выборку q.Execute не работает.
Так запускайте сразу Ваш запрос на создание таблицы. Все параметры вложенных в него запросов доступны как его собственные параметры.
Отлично, именно этот ответ мне помог.
PS В дате в примере описался, конечно.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747797
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но, получается, если он (запрос на создание таблицы), входит в макрос, выполнить его в составе макроса с параметром не получится? Или я опять туплю?
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37747897
ТвердолобыйЛамер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кладовщикИли я опять туплю?
Вам уже советовали забыть про макросы,и переходить на программирование в VBA ?
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37749185
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТвердолобыйЛамеркладовщикИли я опять туплю?
Вам уже советовали забыть про макросы,и переходить на программирование в VBA ?
Сделал программно, без макроса.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub GetTWRReport(ByVal max_tr_count As Byte)
Dim c As DAO.QueryDef
DoCmd.SetWarnings False
'DoCmd.RunSQL "DROP TABLE tblTradesCountByDays"
Set c = CurrentDb.QueryDefs("100qry_Create3TradesCountByDays")
c.Parameters("[max_count]").Value = max_tr_count
c.Execute
c.Close: Set c = Nothing
DoCmd.OpenQuery "qry_Create_Report_TWR", acViewNormal, acEdit
End Sub


Если не комментить строку DoCmd.RunSQL "DROP TABLE tblTradesCountByDays", то при выполнении
Код: vbnet
1.
Application.Run "GetTWRReport", 3

вылезает ошибка исполнения 3010 : tblTradesCountByDays уже существует.
Это так и должно быть, или что-то где-то можно изменить, чтобы такой ошибки не возникало? При исполнении запроса на создание таблицы "100qry_Create3TradesCountByDays" вручную Акцесс запрашивает параметр и после его ввода выполняет запрос без проблем.
-----
Не люблю Progress OpenEdge.
...
Рейтинг: 0 / 0
Научите, пожалуйста, пользоваться PARAMETRS
    #37749248
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
кладовщикc.Execute
DoCmd.OpenQuery ...
DoCmd.RunSQL ...
Application.Run ...
Какое разнообразие... А зачем? Посмотрите вот это:
http://www.sql.ru/faq/faq_topic.aspx?fid=410
Там будет сказано, что оптимальный вариант - это метод Execute. Кроме того, там будет сказано, что DoCmd.SetWarnings False не есть хорошо.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Научите, пожалуйста, пользоваться PARAMETRS
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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