Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск процедуры SQL из Excel / 14 сообщений из 14, страница 1 из 1
22.10.2007, 13:41
    #34884764
Запуск процедуры SQL из Excel
Всем здравствуйте! Не получается запустить процедуру(в приложении) 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
22.10.2007, 14:59
    #34885097
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры SQL из Excel
Не открыто соединение с базой. Откуда берется cnPubs?
...
Рейтинг: 0 / 0
22.10.2007, 15:35
    #34885279
Запуск процедуры SQL из Excel
соединение открыто, это не полный текст программы, а только описание процедуры. Вот что выяснил, если вместо нее подставить простейщую процедуру, в которой будет только инструкция select, то она отработает, если же в эту процедуру я добавлю ещё инструкцию insert, то она выдает вот такую ошибку, но при этом insert отработает, а select нет.
...
Рейтинг: 0 / 0
22.10.2007, 15:36
    #34885289
Запуск процедуры SQL из Excel
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
22.10.2007, 16:13
    #34885470
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры SQL из Excel
попробуй используй параметры так

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
22.10.2007, 16:17
    #34885490
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры SQL из Excel
в ХП опция SET NOCOUNT ON стоит?

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

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

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

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

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


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

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

для получения следущего набора рекордсета нужно использовать
set rs=rs0.nextRecordset
...
Рейтинг: 0 / 0
23.10.2007, 10:17
    #34886863
Запуск процедуры SQL из Excel
ВАХ! HandKot сработало! Креативное решение, СПАСИБО!
...
Рейтинг: 0 / 0
23.10.2007, 10:21
    #34886876
Запуск процедуры SQL из Excel
Set rsPubs = .Execute
Set rsPubs = rsPubs.NextRecordset
...
Рейтинг: 0 / 0
23.10.2007, 10:24
    #34886885
Запуск процедуры SQL из Excel
Работает! Работает! УАААААААА, спасибо!!!!!!!
...
Рейтинг: 0 / 0
24.10.2007, 11:37
    #34890422
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск процедуры SQL из Excel
Рубцов Александр
.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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запуск процедуры SQL из Excel / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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