powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры с помощью VBA
23 сообщений из 23, страница 1 из 1
Вызов хранимой процедуры с помощью VBA
    #37984007
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть Excel файл, в котором по выбору элемента списка и нажатии кнопки должна вызваться процедура, хранимая на MySQL (2005). Процедура возвращает таблицу значений. Т.е. выбрали значение из списка -> нажали на кпопку -> получили таблицу.

Процедура выглядит так:

Код: sql
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.
27.
28.
29.
USE [ErrorReports]
GO
/****** Object:  StoredProcedure [dbo].[GetReportByUserName]    Script Date: 10/04/2012 11:37:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetReportByUserName] 
	-- Add the parameters for the stored procedure here
	@Submitter nvarchar(30)
AS	
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	

	select *
	from ErrorReports.dbo.ClientsErrors
	where submitter=@Submitter

	select *
	from ErrorReports.dbo.InternalErrors
	where submitter=@Submitter

END



Как вызвать ее из Excel?

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37984074
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_bless, используя ADO, к примеру.
http://www.sql.ru/forum/actualthread.aspx?tid=943541
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37987979
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но в моем варианте ошибка синтаксиса. Код вышел следующий:

Sub Get_Extended_Report()

submitter = Cells(1, 1).Value

Set MyCommand = New ADODB.Command
With MyCommand
.ActiveConnection = "GetFullSummary"
.CommandText = "dbo.GetReportByUserName"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append. CreateParameter ("@submitter", adVarChar, adParamInput, submitter)
.Execute
End With

End Sub
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988013
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точка после Append

в следующий раз пишите строку, на которой ошибка синтаксиса и правильно оформляйте код - FAQ
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988151
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду знать. При компиляции теперь ошибка "invalid outside procedure", хотя в студии процедура выполняется верно.

В чем может быть проблема?

Код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim submitter As Range

Set submitter = Sheets("Extended_Report").Cells(1, 1)

Set MyCommand = New ADODB.Command
With MyCommand
.ActiveConnection = Connection
.CommandText = "dbo.GetReportByUserName"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append CreateParameter("@submitter", adVarChar, adParamInput, submitter)
.Execute
End With



где:

submitter - значение переменной, которую нужно передать в процедуру
dbo.GetReportByUserName - имя процедуры.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988273
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_bless,

что возвращает ваша хранимка ?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988322
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_bless"invalid outside procedure"это не о процедуре на SQL сервере. Ваш код требуется оформить в виде процедуры, а не просто так на листе писать

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub МояПроцедура()

Dim submitter As Range

Set submitter = Sheets("Extended_Report").Cells(1, 1)

Set MyCommand = New ADODB.Command
With MyCommand
.ActiveConnection = Connection
.CommandText = "dbo.GetReportByUserName"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append CreateParameter("@submitter", adVarChar, adParamInput, submitter)
.Execute
End With

End Sub
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988391
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура возвращает таблицу записей по параметру submitter. Другими словами - перечень детальных отчетов, заполненных сабмиттером.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988411
Не понял, где у тред-стартера затык.
Для примера кусок рабочего модуля книги выложу. На лист экселя возвращается рекордсет, получаемый в ХРП dbo.p_GetMaxDrawDown:
Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Sub OpenConnection()
Set Connection = New ADODB.Connection
Cnct = Provider & _
                    Security & DBName & ServerName
Connection.Open ConnectionString:=Cnct
'MsgBox "Connection Established"
End Sub
Sub GetDrawDown()
'ИСПОЛЬЗУЕТСЯ!!!
Dim rs As ADODB.Recordset

'On Error GoTo KillAdo
OpenConnection
Set GetSourceCommand = New ADODB.Command
With GetSourceCommand
    .ActiveConnection = Connection
    .CommandText = "dbo.p_GetMaxDrawDown"
    .CommandType = adCmdStoredProc
    
    Set rs = _
    .Execute()
End With
'MsgBox rs.GetString
Range(Cells(7, 1), Cells(7, 2)).Clear
Range("A7").CopyFromRecordset rs

'Set GetSourceCommand = Nothing
'Set rs = Notning
CloseConnection
Exit Sub

'KillAdo:
'MsgBox "Ой, ошибка вышла. " & Err.Description, vbCritical
'Set GetSourceCommand = Nothing
'Set rs = Notning
'Set Connection = Nothing

'Application.ScreenUpdating = True
End Sub


PS Вар-т старый, но рабочий.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988449
medea_bless
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
BEGIN
	
	SET NOCOUNT ON;

  
	select *
	from ErrorReports.dbo.ClientsErrors
	where submitter=@Submitter

	select *
	from ErrorReports.dbo.InternalErrors
	where submitter=@Submitter

END




У меня насчет хрп возник вопрос: она 2 набора записей возвращает или все-таки 1?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988504
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
два
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988526
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proдва
А как ч-з АДО в экселе оба набора данных получить?
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988540
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВаш код требуется оформить в виде процедуры, а не просто так на листе писать

Оформила. "Sub or function not defined". Имя процедуры точно правильное. Нашла, что для работы с ADO нужно подключить MS Office ActiveX Data Object 2.0. & Recordset. Первую нашла, второй не вижу (MS Excel 2010)


комплектовщикона 2 набора записей возвращает или все-таки 1?
на данный момент таблицы объединены в 1 view, к которому обращается процедура:

Код: sql
1.
2.
3.
4.
5.
6.
7.
	select *

	from 	dbo.GetFullSummary
	where submitter=@submitter


END



где GetFullSummary - имя view
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988546
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessОформила. "Sub or function not defined". Имя процедуры точно правильное.Еще раз. Это ругается компилятор ВБА и к процедуре на SQL-севрере это не имеет никакого отношения. Вы просто никак не можете разобраться с синтаксисом в ВБА

medea_blessОформила. "Sub or function not defined".Указывайте строку, на которой происходит ошибка
medea_blessНашла, что для работы с ADO нужно подключить MS Office ActiveX Data Object 2.0. & Recordset. Первую нашла, второй не вижу (MS Excel 2010)второе входит в первое, так что достаточно.

Поставьте в САМОМ начале всех модулей (где вы вводите код) строку
Код: vbnet
1.
Option Explicit
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37988704
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Весь код:
Код: vbnet
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.
27.
28.
29.
Sub GetReportData()
Dim objMyConn As ADODB.Connection
Dim objMyCommand As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Dim submitter As Range

Set objMyConn = New ADODB.Connection
Set objMyCommand = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
Set submitter = Sheets("Extended_Report").Cells(1, 1)
        
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=***;Initial Catalog=ErrorReports;User ID=***;Password=***;"
objMyConn.Open

With objMyCommand
.ActiveConnection = objMyConn
.CommandText = "dbo.GetReportByUserName"
.CommandType = adCmdStoredProc
.NamedParameters = True
.Parameters.Append CreateParameter("@submitter", adVarChar, adParamInput, submitter)
.Execute
End With

Set objMyRecordset.Source = objMyCommand
objMyRecordset.Open

ActiveSheet.Range("A6").CopyFromRecordset objMyRecordset

End Sub



ругается на строку .NamedParameters и уже так: "Method or data member not found"
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37989002
портер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У тебя параметр в ХРП типа ВарЧар, а ты в него объект эксельный запихиваешь типа Рэнж.
Нужно
Код: vbnet
1.
2.
Dim submitter As String
submitter=ThisWorkBook.WorkSheets("Extended_Report").Cells(1, 1).text


И еще запятую вроде перед submitter пропустила
Код: vbnet
1.
CreateParameter ("@submitter", adVarChar, adParamInput, ,submitter)


ЗЫ
Код: vbnet
1.
2.
Set objMyRecordset.Source = objMyCommand
objMyRecordset.Open


Это так записывается MyRecordset.Open objMyCommand?
Можно по-простому
Код: vbnet
1.
2.
3.
4.
...
.Parameters.Append .CreateParameter("@submitter", adVarChar, adParamInput, , submitter)
Set objMyRecordset=.Execute
End With
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990010
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибка осталась та же на той же строке. Увидела, что пропустила точку перед CreateParameter - не помогло.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990020
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessругается на строку .NamedParameters и уже так: "Method or data member not found"Проблема в том, что в
medea_blessНашла, что для работы с ADO нужно подключить MS Office ActiveX Data Object 2.0.Надо подключить не 2.0, а 2. 8
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990273
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема была в строке

Код: vbnet
1.
.Parameters.Append .CreateParameter("@submitter", adVarChar, adParamInput, submitter)



При передаче параметра оказывается нужно передавать длину varchar. Прокомпилировалось без ошибок, только вот на страницу ничего не вывелось.
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990331
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
medea_blessПрокомпилировалось без ошибок, только вот на страницу ничего не вывелось.см. сюда. 13286985 Лучше приведи весь код снова со всеми правками
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990346
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все оказалось проще и с минимумом кода.

Если кому-то нужно, то " http://datapigtechnologies.com/blog/index.php/running-a-sql-stored-procedure-from-excel-with-dynamic-parameters%22%5D%D0%B2%D0%BE%D1%82]http://datapigtechnologies.com/blog/index.php/running-a-sql-stored-procedure-from-excel-with-dynamic-parameters"]вот решение
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990371
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует множество различных способов решения задачи...
...
Рейтинг: 0 / 0
Вызов хранимой процедуры с помощью VBA
    #37990422
medea_bless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласна, но для тех, у кого опыта работы с VBA чуть меньше, чем нисколько - самое оно. Спасибо, тему можно закрывать
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вызов хранимой процедуры с помощью VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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