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

Друзья, кто-нибудь поможет объяснить такую странность (возможно закономерность)
при работе с временной таблицей 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
Подключение к MS SQL из VBA странности с временной таблицей
    #39457033
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maximusu, не уверен, но попробуйте поиграться типами курсора
как вариант установите явно CursorType в adOpenKeyset
...
Рейтинг: 0 / 0
Подключение к MS SQL из VBA странности с временной таблицей
    #39457053
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Временная таблица существует только в пределах коннекшена. А ADO использует пуллинг. Когда ты открываешь рекордсет - неявно используется другой коннекшен. Можешь проверить - у них разные SPID.

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

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

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

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

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

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

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

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

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


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