Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
150 / 28 / 3
Регистрация: 24.08.2014
Сообщений: 485
1

Передача параметров из Access в ХП SQL Server

03.05.2017, 10:44. Показов 4311. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем,
подскажите как правильно передать параметры в хранимую процедуру при ее вызове из Access?
На сервере создал ХП:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
USE [ASDF]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[z_Server_Ambzab] 
@D1 datetime = null 
,@D2 datetime = null 
AS
BEGIN
    SET NOCOUNT ON;
SELECT *
FROM dbo.Ambzab;
END
В Access имеются пользовательские функции D1() и D2() (краткий формат дата и время)
Из Access вызываю ХП:
Visual Basic
1
exec z_server_ambzab
Как передать в ХП значение интервала дат Between D1() And D2() ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2017, 10:44
Ответы с готовыми решениями:

Не хватает параметров в запросе аксесс к таблицам SQL Server
Здравствуйте. В приложении на Аксесс все таблицы привязаны с БД SQL Server. Делаю запрос на VBA:...

Ms Access + MS SQL Server
Кто работал в такой связке, подскажите пожалуйста. Если я в Access делаю связные таблицы к SQL...

ACCESS <-> MS SQL Server
Помогите, как засадить данные в ComboBox на форме в ACCESS из таблицы в MS SQL Server 2000 ? Связь...

Access & SQL Server
Ni razu ne delal, wot teper' prihoditsja... Nushno podkljuchit', k Access, bazu dannih...

23
150 / 28 / 3
Регистрация: 24.08.2014
Сообщений: 485
07.05.2017, 17:10  [ТС] 21
Author24 — интернет-сервис помощи студентам
texnik-san, спасибо, заработало, казалось бы ерунда, а три дня промучался

Добавлено через 44 минуты
Подведу итоги, может кому пригодится.
Вариант передачи параметров хранимой процедуре.
Требуется присвоить значения переменным @DT1 и @DT2, чтобы произвести выборку данных из таблицы. Результат получить в виде запроса в Access для последующей с ним работы.
На сервере (хранимая процедура):
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
USE [ASDF]
GO
/****** Object:  StoredProcedure [dbo].[z_server_ambzab]    Script Date: 07.05.2017 7:39:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[z_server_ambzab] 
    -- Add the parameters for the stored procedure here
    @DT1 datetime, 
    @DT2 datetime
AS
BEGIN
 
    SET NOCOUNT ON;
 
SELECT Ambzab.IDZAB, Ambzab.RegDataZ, Ambzab.KDR, Ambzab.KK, Ambzab.PRIMZ, Ambzab.REPEATEDZ, Ambzab.UMOZ, Ambzab.KZ, Ambzab.SLUCHTRUDZ, Ambzab.DNITRUDZ, Ambzab.KONSZ
FROM Ambzab
WHERE (((Ambzab.RegDataZ) Between @DT1 And @DT2));
END
В Access создаем т.н. "запрос к серверу" в котором пишем код:
Visual Basic
1
2
3
EXEC z_server_ambzab @DT1 = '20170101', @DT2 = '20170131'
' или в таком виде:
EXEC z_server_ambzab @DT1 = ' ', @DT2 = ' '
где '20170101' и '20170131' даты в немецком формате без разделителей (2017.01.01 и 2017.01.31), любые, которые есть в таблице, главное чтобы параметры передавались и запрос срабатывал в таком виде.
Далее на событие нажатия кнопки в форме, в которой используется результат запроса к серверу или результат нескольких взаимосвязанных запросов в которых участвует запрос к серверу, вешаем процедуру texnik-san, открываем результирующий запрос:
Visual Basic
1
2
3
4
5
6
Private Sub Кнопка13_Click()
Dim str As String
str = "EXEC z_server_ambzab @DT1 = '" & Format(d1(), "YYYYMMDD") & "', @DT2 = '" & Format(d2(), "YYYYMMDD") & "'"
CurrentDb.QueryDefs("z_Server_Ambzab").SQL = str
DoCmd.OpenQuery "z_server_ambzab"
End Sub
ну и далее как положено, радуемся

Добавлено через 30 минут
*) d1() и d2() функции дата и время, задаваемые пользователем
0
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.05.2017, 21:27 22
Позволю себе еще два примечания:

1)
Цитата Сообщение от rvg Посмотреть сообщение
даты в немецком формате без разделителей (2017.01.01 и 2017.01.31), любые, которые есть в таблице
Выделенное жирным - совершенно необязательно.

2)
Цитата Сообщение от rvg Посмотреть сообщение
(((Ambzab.RegDataZ) Between @DT1 And @DT2))
А вот тут может быть подводный камень, если поле Ambzab.RegDataZ может содержать не только дату, но и время.

Допустим, DT2 равно '20161212'. Вы будете очень удивлены, но 12.12.2016 15:15 не попадет в выборку. Потому что 12.12.2016 15:15 > 12.12.2016 00:00.

Я бы рекомендовала заменить условие на

SQL
1
(Ambzab.RegDataZ >= @DT1) AND (Ambzab.RegDataZ < (@DT2+1))
0
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.05.2017, 21:30 23
Позволю себе еще два примечания:

1)
Цитата Сообщение от rvg Посмотреть сообщение
даты в немецком формате без разделителей (2017.01.01 и 2017.01.31), любые, которые есть в таблице
Выделенное жирным - совершенно необязательно.

2)
Цитата Сообщение от rvg Посмотреть сообщение
(((Ambzab.RegDataZ) Between @DT1 And @DT2))
А вот тут может быть подводный камень, если поле Ambzab.RegDataZ может содержать не только дату, но и время.

Допустим, DT2 равно '20161212'. Вы будете очень удивлены, но 12.12.2016 15:15 не попадет в выборку. Потому что 12.12.2016 15:15 > 12.12.2016 00:00.

Я бы рекомендовала заменить условие на

SQL
1
(Ambzab.RegDataZ >= @DT1) AND (Ambzab.RegDataZ < (@DT2+1))
Добавлено через 3 минуты
Да и переменные @DT1, @DT2 описала бы как date, а не datetime - если только не подразумевается передача точного значения времени (но тогда и рекомендация о замене Between на >= AND < неверна)
1
150 / 28 / 3
Регистрация: 24.08.2014
Сообщений: 485
07.05.2017, 22:20  [ТС] 24
поле RegDataZ получило свойство datetime автоматически при импорте таблиц и поскольку в исходных таблицах оно имеет краткий формат даты, то часы:мин везде имеют значение 00:00, но Ваше замечание в любом случае я учту ))
0
07.05.2017, 22:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2017, 22:20
Помогаю со студенческими работами здесь

Перемещение из access в SQL server
Добрый день. Нужно постоянно перемещать данные из таблицы аксес в таблицу SQL server, для этого...

Люди памагите! Sql server и Access
На сервере у меня есть БД, я через ODBC подключил ее в аксес. Есть формы и все такое. У меня...

Перенос базы Access в SQL Server
начало здесь https://www.cyberforum.ru/ms-access/thread87179-page2.html Сергей1980, ты как я...

Ускорение работы Access-SQL Server
Сабж такой: Имеется некий апгрейд клиент-серверной БД Access-Access на Access-SQL Server следующим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru