powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADODB.Recordset открывается два раза?
9 сообщений из 9, страница 1 из 1
ADODB.Recordset открывается два раза?
    #38266348
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть экселиа с формой и кнопкой. По кнопке создается соединение к серверу БД, выполняется хранимка, выполняется селект и результаты селекта заливаются на страничку в экселе.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 SrcTableNameRecordSet.Source = "EXEC  CalculateDataAndReturnTableName" 
... 
  If SrcTableNameRecordSet.EOF Then
     MsgBox "error"
  Else
    SrcTableNameRecordSet.MoveFirst
    SrcTableName = SrcTableNameRecordSet.GetString  
  End If
  SrcTableNameRecordSet.Close
 



Проблема в том, что при таком подходе CalculateDataAndReturnTableName выполняется два раза!
А вот так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 SrcTableNameRecordSet.Source = "EXEC  CalculateDataAndReturnTableName" 
... 
  If SrcTableNameRecordSet.EOF Then
     MsgBox "error"
  Else
 '   SrcTableNameRecordSet.MoveFirst
    SrcTableName = SrcTableNameRecordSet.GetString  
  End If
  SrcTableNameRecordSet.Close
 

выполняется 1 раз

Неужели ADODB выполняет команду , указанную в ADODB.RecordSet.Source, каждый раз когда я двигаю курсор по рекордсету?
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266356
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так и не надо делать MoveFirst

Что делает ADO, во многом определяется тем, что вы скрыли за многоточием (типом курсора, к примеру)
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266450
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А курсора у меня нет, например. За многоточием скрыта страка конекшена
Код: vbnet
1.
  CalcDataCnn.Open "Driver={SQL Server};Server=srv;APP=T-12;Uid=user;Pwd=userpass;Database=dbname"


да всякие объявления переменных
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266453
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*строка, конечно же =(*
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266461
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не верю - не вижу открытие рекодсета... ))

Рекомендую устанавливать ForwardOnly/ReadOnly и не двигать курсором без необходимости - это самый быстрый способ и делается минимум запросов к БД (процедура, как я понимаю, возвращает только одну запись)
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266502
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, процка возвращает имя таблицы в кот. все схоронено.

Про курсоры в АДОДБ я даже и не в курсе, только начал лить данные из сервака в эксель такими педальными способами.

Открытие рекордсета
Код: 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.
Public Sub RunButton_Click()
  Dim SrcTableName As String
  Set CalcDataCnn = CreateObject("ADODB.Connection")
  CalcDataCnn.CommandTimeout = 0
  CalcDataCnn.Open "..."
   
    
  Set SrcTableNameRecordSet = CreateObject("ADODB.Recordset")
  SrcTableNameRecordSet.ActiveConnection = CalcDataCnn
  
  SrcTableNameRecordSet.Source = "EXEC CalcData"
  SrcTableNameRecordSet.Open
  

  If SrcTableNameRecordSet.EOF Then
     MsgBox "bida-bida"
  Else
    SrcTableName = SrcTableNameRecordSet.GetString 
  End If
  SrcTableNameRecordSet.Close
 
  CalcDataCnn.Close
   Set SrcTableNameRecordSet = Nothing 

 
  
 
End Sub

 
 


 
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266624
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
SrcTableNameRecordSet.Open , , 0, 1

но вообще, я почитал, эти параметры как раз по умолчанию

в общем-то из кода очевидно, что движения курсора тут не требуется, а стало быть проблема исчерпана?
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38266628
Cammomile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стало быть да =) Вопрос офтопиком

Не подскажите мануал по ВБА в экселе

А то я не могу понять есть ли тут события, как между формами передавать параметры и все такое прочее
...
Рейтинг: 0 / 0
ADODB.Recordset открывается два раза?
    #38267073
Cammomile, я для VBA в Экселе советую книжку Уокенбаха "Профессиональное программирование в Экселе". Такая неплохая книжка.
Кое-какие штуки там не освещались (в том числе и передача параметров в ХРП с листа Экселя и возврат рекордсета, ну и вообще про АДО там вроде 1 пример был), но есть куча хау ту, от которых можно гуглить.
До сих пор пользуюсь.
_____
Не люблю Progress OpenEdge.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / ADODB.Recordset открывается два раза?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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