|
|
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте! Не получается запустить процедуру(в приложении) 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 не знаком, подскажите пожалуйста, где "копать" :) . Заранее благодарен за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 13:41 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Не открыто соединение с базой. Откуда берется cnPubs? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 14:59 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
соединение открыто, это не полный текст программы, а только описание процедуры. Вот что выяснил, если вместо нее подставить простейщую процедуру, в которой будет только инструкция select, то она отработает, если же в эту процедуру я добавлю ещё инструкцию insert, то она выдает вот такую ошибку, но при этом insert отработает, а select нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 15:35 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 15:36 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
попробуй используй параметры так 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 никогда это не использовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 16:13 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
в ХП опция SET NOCOUNT ON стоит? I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2007, 16:17 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Точно! После set nocount on, простейшая процедура с двумя инструкциями заработала! А вот изначальная процедура нет, думаю что это из-за того, что после исполнения в queryAnalyzer'е на вкладке messages она возвращает след. значение: +-------------------+ | total | current | FillPayDate2 - start |---------|---------| |---------|---------| |---------|---------| |---------|---------| | 30| 30| FillPayDate2 - finish +-------------------+ Пока не нашел как это зарубить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 08:39 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
может это принты? либо что-то типа SET STATISTICS TIME I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 09:39 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
так же попробуйте сделать Код: plaintext I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 09:41 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
HandKot браво про SET NOCOUNT ON не подумал тоже когда то была такая проблема для получения следущего набора рекордсета нужно использовать set rs=rs0.nextRecordset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 10:14 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
ВАХ! HandKot сработало! Креативное решение, СПАСИБО! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 10:17 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Set rsPubs = .Execute Set rsPubs = rsPubs.NextRecordset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 10:21 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Работает! Работает! УАААААААА, спасибо!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2007, 10:24 |
|
||
|
Запуск процедуры SQL из Excel
|
|||
|---|---|---|---|
|
#18+
Рубцов Александр .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 и потом только вписать значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 11:37 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34885279&tid=2163199]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
67ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 412ms |

| 0 / 0 |
