powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск процедуры SQL из Excel
14 сообщений из 14, страница 1 из 1
Запуск процедуры SQL из Excel
    #34884764
Всем здравствуйте! Не получается запустить процедуру(в приложении) SQL из Excel. процедуру запускаю след. образом:

Set prPubs = New ADODB.Command
With prPubs
.ActiveConnection = cnPubs
.CommandText = "PrcGen_Select3"
.CommandType = adCmdStoredProc
.NamedParameters = True

.Parameters.Append .CreateParameter("@Mode", adInteger, adParamInput, 3, 106)
.Parameters.Append .CreateParameter("@DealID", adBigInt, adParamInput, 12, 940000010519#)
.Parameters.Append .CreateParameter("@InstitutionID", adBigInt, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@DateCurrent", adDate, adParamInput, , #10/18/2007#)
.Parameters.Append .CreateParameter("@DateEnd", adDate, adParamInput, , #7/10/2008#)
.Parameters.Append .CreateParameter("@RefreshMode", adInteger, adParamInput, 1, 1)
.Parameters.Append .CreateParameter("@FullMode", adInteger, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@RestMode", adInteger, adParamInput, 1, -1)
.Parameters.Append .CreateParameter("@MCMode", adInteger, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@SortMode", adInteger, adParamInput, 1, 1)


Set rsPubs = .Execute

End With

' Копирование записи в ячейку A1 на листе Sheet1.
Лист1.Range("A1").CopyFromRecordset rsPubs

Ругается на последней строчке, "run time error '3704' Операция недопускается, если объект закрыт". По отладчику видно, что результат выполнения процедуры нулевой (в отладчике смотрю rsPubs, fields, значение counts = 0). Если же захожу в queryAnalyzer, то эта процедура с этими же параметрами выдает мне данные. Параметры передаются процедуре верно, проверял каждый по отдельности (в процеруде есть тип dsidentifier его можно передавать процедуре как adBigInt, проверял). Я с ADO не знаком, подскажите пожалуйста, где "копать" :) . Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34885097
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не открыто соединение с базой. Откуда берется cnPubs?
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34885279
соединение открыто, это не полный текст программы, а только описание процедуры. Вот что выяснил, если вместо нее подставить простейщую процедуру, в которой будет только инструкция select, то она отработает, если же в эту процедуру я добавлю ещё инструкцию insert, то она выдает вот такую ошибку, но при этом insert отработает, а select нет.
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34885289
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection

' Строка подключения.
Dim strConn As String

'Использование поставщика OLE DB SQL Server.
strConn = "PROVIDER=SQLOLEDB;"

'Подключение к базе данных на сервере.
strConn = strConn & "DATA SOURCE=e-fs;INITIAL CATALOG=test_2;"

'Использование встроенного входа.
strConn = strConn & " INTEGRATED SECURITY=sspi;"

'Открытие подключения.
cnPubs.Open strConn
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34885470
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй используй параметры так

Set Param = prPubs.CreateParameter("Mode", adInteger, adParamInput)
Param.Value =Mode
prPubs.Parameters.Append Param

Set Param = prPubs.CreateParameter("DealID", adInteger, adParamInput)
Param.Value =DealID
prPubs.Parameters.Append Param
...................

или то что у тебя без @
попробуй тоже без .NamedParameters = True никогда это не использовал
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34885490
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ХП опция SET NOCOUNT ON стоит?

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886685
Точно! После set nocount on, простейшая процедура с двумя инструкциями заработала! А вот изначальная процедура нет, думаю что это из-за того, что после исполнения в queryAnalyzer'е на вкладке messages она возвращает след. значение:
+-------------------+
| total | current | FillPayDate2 - start
|---------|---------|

|---------|---------|

|---------|---------|

|---------|---------|
| 30| 30| FillPayDate2 - finish
+-------------------+

Пока не нашел как это зарубить.
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886773
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может это принты?
либо что-то типа SET STATISTICS TIME


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886779
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так же попробуйте сделать
Код: plaintext
Set rs = rs.Next
эта иснтрукция для получения следующего рекордсета из набора, который вернула ХП

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886857
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot
браво
про SET NOCOUNT ON не подумал
тоже когда то была такая проблема

для получения следущего набора рекордсета нужно использовать
set rs=rs0.nextRecordset
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886863
ВАХ! HandKot сработало! Креативное решение, СПАСИБО!
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886876
Set rsPubs = .Execute
Set rsPubs = rsPubs.NextRecordset
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34886885
Работает! Работает! УАААААААА, спасибо!!!!!!!
...
Рейтинг: 0 / 0
Запуск процедуры SQL из Excel
    #34890422
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рубцов Александр
.Parameters.Append .CreateParameter("@Mode", adInteger, adParamInput, 3, 106)
.Parameters.Append .CreateParameter("@DealID", adBigInt, adParamInput, 12, 940000010519#)
.Parameters.Append .CreateParameter("@InstitutionID", adBigInt, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@DateCurrent", adDate, adParamInput, , #10/18/2007#)
.Parameters.Append .CreateParameter("@DateEnd", adDate, adParamInput, , #7/10/2008#)
.Parameters.Append .CreateParameter("@RefreshMode", adInteger, adParamInput, 1, 1)
.Parameters.Append .CreateParameter("@FullMode", adInteger, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@RestMode", adInteger, adParamInput, 1, -1)
.Parameters.Append .CreateParameter("@MCMode", adInteger, adParamInput, 1, 0)
.Parameters.Append .CreateParameter("@SortMode", adInteger, adParamInput, 1, 1)

вместо этого можно написать .Parameters.refresh и потом только вписать значения.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск процедуры SQL из Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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