Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ADOCommand не возвращает Recordset ...
|
|||
|---|---|---|---|
|
#18+
Необходимо из Excel подключиться к SQL Server и получить recordset Код выглядит так : Dim ADOConnection, ADOCommand, ADOTable As Object Set ADOConnection = CreateObject("ADODB.Connection") Set ADOCommand = CreateObject("ADODB.Command") Set ADOTable = CreateObject("ADODB.Recordset") ADOConnection.ConnectionString = CONNECTION_STRING ADOConnection.CommandTimeout = 0 ADOConnection.ConnectionTimeout = 0 ADOConnection.Open ADOCommand.CommandType = adCmdStoredProc ADOCommand.ActiveConnection = ADOConnection ADOCommand.CommandText = "spL_Fin_GetPortfalioGraph" ADOCommand.Parameters.Append (ADOCommand.CreateParameter("@AgrNum", adChar, adParamInput, 35)) ADOCommand.Parameters.Item(0).Value = Trim(Cells(i, 1).Value) ADOCommand.Prepared = True Set ADOTable = ADOCommand.Execute With ADOTable .MoveFirst For a = 1 To .RecordCount .... внутри SP производиться два SELECT примерно так : SELECT @AgrNum=AgrNum FROM .... SELECT * FROM ... WHERE AgrNum=@AgrNum Но возвращаеться пустой набор, RecordCount=0 .... хотя на сервере (из QA) весе выполняеться нормльно ! подскажите что я делаю не правильно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 16:08 |
|
||
|
ADOCommand не возвращает Recordset ...
|
|||
|---|---|---|---|
|
#18+
Во-первых, необходимо убедиться, что в VB подлючена ссылка на библиотеку ADO. Во-вторых, в тексте используется синтаксис VB-Script для WEB-приложений, а не полноценного VB. В частности, я препочитаю использовать такую конструкцию: Set ADOConnection = NEW ADODB.Connection вместо такой: Set ADOConnection = CreateObject("ADODB.Connection") При использовании первого варианта ты сразу увидишь, все ли у тебя в порядке со ссылкой на библиотеку ADO. Если ссылка не установлена, после ввода пробела следом за директивой NEW в выпадающем списке объектов не будет библиотеки ADODB. В-третьих, вместо: ADOCommand.ActiveConnection = ADOConnection необходимо писать: Set ADOCommand.ActiveConnection = ADOConnection В четвертых, вместо фразы: ADOCommand.Parameters.Item(0).Value = Trim(Cells(i, 1).Value) попробуй написать ADOCommand.Parameters(1).Value = Trim(Cells(i, 1).Value) (если только не XP) В пятых, ADOCommand.Prepared = True здесь совершенно ни к селу, ни к городу. Эта опция используется в параметризированных запросах во избежание их повторной компиляции при многократных вызовах (план таких запросов помещается в кэш). А хранимая процедура и так откомпилирована. В-пятых, для корректного выставления значения RecordCount необходимо сначала переместить указатель в КОНЕЦ Recordset-а. Исходя из этого, лучше использовать не цикл FOR со счетчиком, а цикл WHILE not ADOTable.EOF EOF выставляется корректно и без специальных дерганий по рекордсету. В-шестых, из приведенного Вами кусочка скрипта хранимой процедуры ясно, что хранимая процедура возвращает не один, а два Recordset-а. Тот Recordset, к которому Вы пытаетесь получить доступ в приведенном скрипте является первым из них. Для получения следующего Recorset-а необходимо использовать метод NextRecordset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32016082&tid=1825185]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 369ms |

| 0 / 0 |
