Возникла потребность в формировании определенной таблицы с данными, которые хранятся в SQL.
Задача: реализовать возможность вставки в Excel результата обработки SQL запроса. При этом необходимо реализовать возможность изменения параметров запроса из Excel.
Другими словами, пользователь должен открыть таблицу Excel, внести в заданные места необходимые параметры. После этого ему должен отобразиться результат выполнения SQL запроса с учетом введенных параметров.
В нашем случае источником данных будет некая БД, в которую внесены данные по активам, закрепленными за пользователями. Для работы с ними необходимо сделать выборку по фамилии пользователя, результат выборки выгрузить в Excel.
Для реализации задуманного возьмем (например) SQL запрос, который получает необходимые нам данные и созданим на его основе хранимую процедуру (Stored Procedure) SQL:
Для этого открывает редактор VBA (Alt+F11).
Для работы с SQL необходимо подключить соответствующую библиотеку:
Задача: реализовать возможность вставки в Excel результата обработки SQL запроса. При этом необходимо реализовать возможность изменения параметров запроса из Excel.
Другими словами, пользователь должен открыть таблицу Excel, внести в заданные места необходимые параметры. После этого ему должен отобразиться результат выполнения SQL запроса с учетом введенных параметров.
В нашем случае источником данных будет некая БД, в которую внесены данные по активам, закрепленными за пользователями. Для работы с ними необходимо сделать выборку по фамилии пользователя, результат выборки выгрузить в Excel.
Для реализации задуманного возьмем (например) SQL запрос, который получает необходимые нам данные и созданим на его основе хранимую процедуру (Stored Procedure) SQL:
declareТеперь необходимо в VBA добавить код подключения к созданной процедуре.
@WorkPlace nvarchar(125)
SELECT
TOP 1 @WorkPlace=resource.RESOURCENAME
FROM
Resources resource
LEFT JOIN ComponentDefinition product ON resource.COMPONENTID=product.COMPONENTID
LEFT JOIN ComponentType productType ON product.COMPONENTTYPEID=productType.COMPONENTTYPEID
LEFT JOIN ResourceOwner rOwner ON resource.RESOURCEID=rOwner.RESOURCEID
LEFT JOIN SDUser sdUser ON rOwner.USERID=sdUser.USERID
LEFT JOIN AaaUser aaaUser ON sdUser.USERID=aaaUser.USER_ID
WHERE
aaaUser.FIRST_NAME=@OwnerName and productType.COMPONENTTYPENAME=N'Рабочее место'
SELECT
productType.COMPONENTTYPENAME "Тип продукта",
resource.RESOURCENAME "Наименование актива",
product.COMPONENTNAME "Продукт",
resource.SERIALNO "Серийный номер"/*, resource.BARCODE "Штрих-код"*/
FROM
Resources resource
LEFT JOIN ComponentDefinition product ON resource.COMPONENTID=product.COMPONENTID
LEFT JOIN ComponentType productType ON product.COMPONENTTYPEID=productType.COMPONENTTYPEID
LEFT JOIN ResourceOwner rOwner ON resource.RESOURCEID=rOwner.RESOURCEID
LEFT JOIN ResourceAssociation rToAsset ON rOwner.RESOURCEOWNERID=rToAsset.RESOURCEOWNERID
LEFT JOIN Resources rToAssetResource ON rToAsset.ASSTTORESOURCEID=rToAssetResource.RESOURCEID
LEFT JOIN SDUser sdUser ON rOwner.USERID=sdUser.USERID
LEFT JOIN AaaUser aaaUser ON sdUser.USERID=aaaUser.USER_ID
WHERE
rToAssetResource.RESOURCENAME=@WorkPlace
or
(aaaUser.FIRST_NAME=@OwnerName and productType.COMPONENTTYPENAME<>N'Рабочее место')
Для этого открывает редактор VBA (Alt+F11).
Для работы с SQL необходимо подключить соответствующую библиотеку:
Tools -> References -> Microsoft ActiveX Data Objectc 2.6 LibraryПосле чего для получения и вставки данных необходимо использовать следующий код:
В результате в данном случае макрос возмет значение, которое будет присвоено параметру OwnerName1, передаст его в хранимую процедуру SQL для обработки. Результат работы SQL запроса будет вставлен в таблицу Excel начиная с ячейки А13.
Dim OwnerName1 As String
Dim objMyConn As ADODB.Connection
Dim objMyCommand As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCommand = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=server\database;Initial Catalog=DataBaseName;User ID=Username;Password=UserPassword;"
objMyConn.Open
With objMyCommand
.ActiveConnection = objMyConn
.CommandText = "dbo.sd_export_data_to_sql"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append .CreateParameter("@OwnerName", adVarChar, adParamInput, 200, OwnerName1)
.Execute
End With
Set objMyRecordset.Source = objMyCommand
objMyRecordset.Open
ActiveSheet.Range("A13").CopyFromRecordset objMyRecordset
Комментариев нет:
Отправить комментарий