Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подключение к MS SQL из VBA странности с временной таблицей / 10 сообщений из 10, страница 1 из 1
22.05.2017, 01:17
    #39457001
Maximusu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Добрый день!

Друзья, кто-нибудь поможет объяснить такую странность (возможно закономерность)
при работе с временной таблицей MS SQL из VBA?

Окрыл Connection, создал врем.таблицу #t,
В процессе работы я успешно к ней обращаюсь, изменяю в некоторые данные,
но стоит только открыть рекордсет, как сразу все!
Обратиться к ней уже не могу, пока его не закрою

Код: 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.
'Здесь подключился к базе ExcelAnalysis...
'Здесь создал врем.таблицу #t как копию таблицы "new" из этой базы
'

   Dim rsta As ADODB.Recordset, rstb As ADODB.Recordset, rstc As ADODB.Recordset

'Открываем рекордсет и набираем в него данные из временной таблицы
    Set rsta = New ADODB.Recordset
     rsta.Open "SELECT * FROM #t ", CN
     
'Успешно выполнено!

'Открываем второй рекордсет и набираем в него данные уже из постоянной таблицы
           Set rstb = New ADODB.Recordset
            rstb.Open "SELECT * FROM new", CN
'Успешно выполнено!

'Все! Дальше любое действие с времянкой недоступно, пока не закроешь оба рекордсета rsta и rstb
'Та же самая команда, что секунду назад успешно отработала, уже выдает ошибку

    Set rstc = New ADODB.Recordset
     rstc.Open "SELECT * FROM #t ", CN

'Ошибка Недопустимое имя объекта '#t'

'Но стоит закрыть рекордсеты rstb и rstb, и #t становится доступной для запросов как ни в чем не бывало
    Set rstb = Nothing
    Set rsta = Nothing
    
    Set rstc = New ADODB.Recordset
    rstc.Open "SELECT * FROM #t ", CN
'Успешно выполнено!



Что за засада? Может кто знает, как ее победить?

Заранее благодарен!
...
Рейтинг: 0 / 0
22.05.2017, 07:09
    #39457033
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Maximusu, не уверен, но попробуйте поиграться типами курсора
как вариант установите явно CursorType в adOpenKeyset
...
Рейтинг: 0 / 0
22.05.2017, 08:44
    #39457053
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Временная таблица существует только в пределах коннекшена. А ADO использует пуллинг. Когда ты открываешь рекордсет - неявно используется другой коннекшен. Можешь проверить - у них разные SPID.

Как альтернативу можно использовать CN.Execute - будет выполняться в одном коннекшене
...
Рейтинг: 0 / 0
22.05.2017, 09:09
    #39457075
Maximusu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Shocker.Pro,

Ммм..
Про существование времянок только в рамках одного connection я знал.

Но уж вот бы никогда не подумал, что передавая рекордсету конкретное подключение, тот все равно открывает новое.
Видимо использует переданное подключение просто для клонирования настроек.
Спасибо, попробую через комманду
...
Рейтинг: 0 / 0
22.05.2017, 12:00
    #39457212
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Немного не так. Клиент MSSQL не умеет выполнять что-либо еще, если есть открытый недофетченный набор данных в сессии. Таким образом, если открыт рекордсет и не весь набор выбран на клиента, в текущей сессии ничего сделать нельзя. Для обхода этой ситуации ADO неявно открывает дополнительное соединение (и временные таблицы основной сессии там уже недоступны). Чтобы такого не было, сразу после открытия рекордсета сразу фетчте весь набор данных до конца. Тогда текущая сессия будет доступна для других запросов, и ADO не откроет неявную дополнительную сессию.
...
Рейтинг: 0 / 0
22.05.2017, 15:09
    #39457417
Maximusu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
ziktuw,

А как такой вариант, чтобы создать глобальную времянку ##t ?
Какие минусы, если учесть, что с данной базой никто не работает кроме 1 человека.
...
Рейтинг: 0 / 0
22.05.2017, 15:20
    #39457435
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Да, в общем-то, никаких

Я вообще отказался от использования временных таблиц, использовал постоянную и записывал туда данные с неким идентификатором для выборки (это может быть и SPID и ИД пользователя и GUID) - все от обстоятельств зависит.
...
Рейтинг: 0 / 0
22.05.2017, 15:22
    #39457441
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Просто постоянная мало чем будет отличаться от глобальной временной, плюс не надо морочиться проверкой и созданием самой таблицы
...
Рейтинг: 0 / 0
22.05.2017, 15:35
    #39457468
Maximusu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Shocker.ProДа, в общем-то, никаких

Я вообще отказался от использования временных таблиц, использовал постоянную и записывал туда данные с неким идентификатором для выборки (это может быть и SPID и ИД пользователя и GUID) - все от обстоятельств зависит.

Ну я ведь правильно понимаю, что глобальная никуда уже не денется пока я ее не дропну? ... Или пока все пользователи не отключаться от сервера.
Пользователь один значит то что нужно?

И правильно я понимаю, что мою проблему это вылечит?
Процедура ее создания и уничтожения ничем не отличается от локальной?
...
Рейтинг: 0 / 0
22.05.2017, 17:57
    #39457629
Maximusu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к MS SQL из VBA странности с временной таблицей
Maximusu,

Да, друзья простая замена # на ## вылечила проблему. Всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подключение к MS SQL из VBA странности с временной таблицей / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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