Добрый день. Написал запрос, который выдает определенные данные Запрос:
Код
declare @date1 varchar(64) = '2015-11-25 00:00:00'
declare @date2 varchar(64) = '2016-01-01 00:00:00'
select aa.[Код отгрузки],aa.[Код путевого],rr.shv_Value as [Номер маршрута],
case
when aa.Объем <1.2 then '1'
when aa.Объем>1.2 then round(aa.Объем/1.2,0)
--else 'null'
end 'Кол-во паллет'
,aa.Объем,aa.[Дата погрузки в ТС]
from
( select
c.shp_Code [Код путевого],a.ost_Code [Код отгрузки], a.ost_Volume [Объем], d.shv_Value [Дата погрузки в ТС],shv_AttributeID,d.shv_Value,
c.shp_ID
from lv_ordershipment a with (nolock)
join LV_Order b with (nolock) on b.ord_ID =a.ost_OrderID
join LV_Shipment c with (nolock) on c.shp_ID=a.ost_ShipmentID
join LV_ShipmentAttributesValues d with (nolock) on d.shv_ShipmentID=c.shp_ID
join LV_ShipmentAttributes e with (nolock) on e.spa_ID = d.shv_AttributeID
where
--a.ost_ShipmentID = 111810 and
e.spa_Code = 'SH6'
--and
--d.shv_Value>'2015-11-01 00:00:00'
) aa
join LV_ShipmentAttributesValues rr on rr.shv_ShipmentID=aa.shp_ID
join LV_ShipmentAttributes dd on dd.spa_ID=rr.shv_AttributeID
where dd.spa_Code= 'SH2'
and aa.shv_Value > @date1
and aa.shv_Value<@date2
order by aa.shv_Value desc
Создал подключение в эксель. Имеет вид в экселе следующий
Вопрос:можно ли как-то сделать кнопку Дата в экселе,чтобы пользователи задавали дату не чере фильтр,а посредством этой кнопки?
Но если нужна другая тема, то напишите, будьте добры. "Создание кнопки в Эксель, данные которой, тянуться из запроса в подключении к БД MS SQL 2008 R2. Запрос находится под темой,файл приложен. Файл выполнен в виде сводной таблицы. Если кто-то знает, как создать кнопку с использованием VBA,то прошу поделиться опытом."
Mansso, уже указал. Преодолевайте свою лень. Поднапрягитесь и поищите. Я нашёл ответ на Ваш вопрос, хотя он мне и не интересен. Интерес был чисто спортивный найду или нет после того как написали:
Цитата
B.Key написал: Параметры запроса можно задавать в ячейке excel без vba
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
можно так и искать "параметрический запрос" или, как в #10
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Именно. Одно дело SQL,другое дело Эксель. Для меня эксель просто темный лес. Пользователи попросили сделать кнопку,думаю,что неплохая идея..Но вот как..
Тогда только формирование sql-строки макросом считывая даты из ячеек и подставляя их вместо @date1 и @date2, затем подстановка этой sql-строки в подключение
Сделайте хранимую процедуру и передавайте туда параметры. Пример:
Код
-- Создаём Stored Procedure
create procedure dbo.GetSomeData
@date1 datetime
as
begin
select * from sys.objects
where create_date = @date1;
end;
-- Вызываем её
execute dbo.GetSomeData '2015-11-27';
@date1 - параметр даты. В VBA можно вызвать её так:
Код
Dim rs As ADODB.Recordset
Dim conn As ADODB.Connection
....
conn.GetSomeData "'2015-11-27'", rs '//Последний параметр всегда рекордсет, который будет заполнен результатом.
Доброе время суток Пример, пусть есть таблица Sales.Orders (orderid,custid,empid,orderdate) Создадим на sql server для учебной базы TSQL хранимую процедуру, возвращающую таблицу, с параметрами по дате от до
Код
CREATE FUNCTION dbo.GetBetweenDate
(@fromDate datetime, @toDate datetime)
RETURNS TABLE
AS
RETURN
(Select orderid,custid,empid From Sales.Orders Where orderdate between @fromDate and @toDate)
GO
Отредактируйте файл в архиве вложения на правильную строку подключения, включая имя базы данных в которой находится хранимая процедура. Вкладка Данные/Существующие подключения. Указываете этот файл подключения. Настраиваете параметры.
Как вы понимаете - файл текстовый, так что на его базе можете создавать и другие подключения.
Успехов.
P. S. Коллеги, а может не будем на этом форуме делать филиал sql.ru/forum? Человек что-то сделал, только адаптировать не может. Тогда зачем этот трёп?
Хорош пись умами мериться Оба вариант являются универсальными. Никто ни кого не пытался научить или уличить в чем-то. Было просто написано про один из универсальных форматов даты для запросов, который никак не опровергает наличие и другого. Поэтому просвещать не о чем - оба знаете о чем пишете и никакой ошибки ни в одном из вариантов нет. На этом прошу закончить свои обсуждения форматов дат. Или перебегайте в курилку мериться.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Конкретно по вашему запросу. Создаём stored procedure:
Код
create procedure dbo.GetData
@date1 varchar(64),
@date2 varchar(64)
as
begin
set nocount on;
select aa.[Код отгрузки],aa.[Код путевого],rr.shv_Value as [Номер маршрута],
case
when aa.Объем <1.2 then '1'
when aa.Объем>1.2 then round(aa.Объем/1.2,0)
--else 'null'
end 'Кол-во паллет'
, aa.Объем,aa.[Дата погрузки в ТС]
from
(
select
c.shp_Code [Код путевого],
a.ost_Code [Код отгрузки],
a.ost_Volume [Объем],
d.shv_Value [Дата погрузки в ТС],
shv_AttributeID,d.shv_Value,
c.shp_ID
from lv_ordershipment a with (nolock)
join LV_Order b with (nolock) on b.ord_ID =a.ost_OrderID
join LV_Shipment c with (nolock) on c.shp_ID=a.ost_ShipmentID
join LV_ShipmentAttributesValues d with (nolock) on d.shv_ShipmentID=c.shp_ID
join LV_ShipmentAttributes e with (nolock) on e.spa_ID = d.shv_AttributeID
where
e.spa_Code = 'SH6'
) aa
join LV_ShipmentAttributesValues rr on rr.shv_ShipmentID=aa.shp_ID
join LV_ShipmentAttributes dd on dd.spa_ID=rr.shv_AttributeID
where dd.spa_Code= 'SH2'
and aa.shv_Value > @date1
and aa.shv_Value<@date2
order by aa.shv_Value desc;
end;
Далее вызываем эту хранимку:
Код
Sub F()
Dim rs As Object 'ADODB.Recordset
Dim conn As Object 'ADODB.Connection
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=SQLNCLI11.1;Server=MY_MACHINE_NAME\MY_SQL_SERVER_INSTANCE;Database=MY_DB_NAME;Trusted_Connection=Yes;"
conn.CursorLocation = 3 'adUseClient, чтобы работал RecordCount
conn.GetData "'2015-11-25 00:00:00'", "'2016-01-01 00:00:00'", rs
If rs.RecordCount > 0 Then '//Проверяем, есть ли у нас записи
'// Копируем данные на лист
Sheets(1).Range("A1").CopyFromRecordset rs
Else
MsgBox "Записи не найдены"
End If
End Sub
В ConnectionString прописываете свои данные (примеры можно взять с ConnectionString.com).
В данном случае, без разницы - хранимая процедура или функция. Вариант в файле вложения. Отличается от варианта уважаемого Johny тем, что без макросов и граничные значения дат задаются непосредственно в ячейках на листе. После изменения достаточно нажать обновить. Код хранимой процедуры
Код
CREATE PROCEDURE dbo.GetDateBetweenProc
@fromDate datetime, @toDate datetime
AS
BEGIN
SET NOCOUNT ON;
Select orderid,custid,empid From Sales.Orders Where orderdate between @fromDate and @toDate
END
GO