Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не удаляются временные таблицы  [new]
host.13
Member

Откуда:
Сообщений: 263
Всем привет!
MS SQL 2008R2 EXPRESS, клиенты на MS Access 2010 adp.
В процессе работы клиента создаются несколько временных таблиц. Все они видны в tempdb. Начиная с какого-то момента их имена изменяются на имена вида #0519C6AF и не удаляются ни после отключения всех клиентов, ни при удалении вручную. Любые операции над такими таблицами (открыть свойства, переименовать, получить набор записей) из SMS приводят к сообщениям типа "в экземпляре объекта не задана ссылка на объект" или "необрабатываемое исключение в компоненте приложения" .
Причем после этого пробуем на клиенте выполнить следующий код:
CurrentProject.Connection.Execute "CREATE TABLE #table1 (...);"

Никаких ошибок при этом не возникает.
Следующая строка:
Dim MD as New ADODB.Recordset
MD.Open "SELECT * FROM #table1;", Currentproject.Connection

вот здесь вылетает ошибка, что, мол, недопустимое имя объекта #table1. Соответственно все клиенты разом теряют возможность работать со всеми временными таблицами, которые сами же и создали.
Самое смешное, что после презапуска службы ms sql все временные тоблицы пропадают, но приведенный выше код продолжает вести себя также. Нормально он начинает выполняться только после перезагрузки сервера.
Кто-нибудь с таким сталкивался? Кто что подскажет?
16 дек 11, 13:27    [11777152]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Либо в одном батче выполняйте, либо отключайте всевозможные пулинги, потому что, скорее всего, ваши сторки с созданием таблицы и выборкой из нее тупо выполняются в разных коннектах.
16 дек 11, 13:36    [11777245]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
host.13
Member

Откуда:
Сообщений: 263
Гавриленко Сергей Алексеевич,

А если запущен проект .adp, то может быть такое, что коннект изменяется без перезапуска access?
16 дек 11, 14:30    [11777752]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
host.13
Начиная с какого-то момента их имена изменяются на имена вида #0519C6AF и не удаляются ни после отключения всех клиентов,

Что такое "отключение клиента" ?
Это значит, что список коннектов _на сервере_ пустой ?


host.13
CurrentProject.Connection.Execute "CREATE TABLE #table1 (...);"


Никаких ошибок при этом не возникает.
Следующая строка:
Dim MD as New ADODB.Recordset
MD.Open "SELECT * FROM #table1;", Currentproject.Connection


вот здесь вылетает ошибка, что, мол, недопустимое имя объекта #table1.

Потому что 1ая команда выполняется в одном коннекте, а 2ая - в другом
Или после 1ой комманды коннект закрывается и все временные таблицы автоматически удаляются
16 дек 11, 14:44    [11777910]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
host.13
Member

Откуда:
Сообщений: 263
Glory
host.13
Начиная с какого-то момента их имена изменяются на имена вида #0519C6AF и не удаляются ни после отключения всех клиентов,

Что такое "отключение клиента" ?
Это значит, что список коннектов _на сервере_ пустой ?

Список коннектов проверю. Отключение клиента - я имел в виду закрытие программы access. Насколько я понимаю, что если adp подключается к sql-серверу, для него создается отдельная сессия и все временные таблицы видны только в рамках этой сессии, т.е. временные таблицы с одинаковми именами из разных сессий не будут конфликтовать друг с другом. В момент штатного закрытия окна access сессия закрывается и все временные таблицы должны удалиться. Все верно? Вот у меня они не удаляются.

Потому что 1ая команда выполняется в одном коннекте, а 2ая - в другом
Или после 1ой комманды коннект закрывается и все временные таблицы автоматически удаляются

Если бы коннекты были разные, то для открытия нового коннекта меня access бы повтороно запросил имя входа\пароль на sql-server, а этого не происходит. Все верно?
К тому же временные таблицы у меня не удаляются, а переименовываются в какие-то внутренние имена. Я вообще даже не знаю, мои это таблицы или нет - в списке таблиц БД tempdb я сначала вижу свои веременные таблицы, а затем таблицы с непонятными именами, с котороыми ничего нельзя сделать.
К тому же версия с разными коннектами имела бы право на существование, если бы это проиходило постоянно. Так не же ж - сначала все работает нормально, потом вдруг начинается ад и Израиль.
17 дек 11, 08:54    [11781609]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
host.13
Список коннектов проверю. Отключение клиента - я имел в виду закрытие программы access. Насколько я понимаю, что если adp подключается к sql-серверу, для него создается отдельная сессия и все временные таблицы видны только в рамках этой сессии, т.е. временные таблицы с одинаковми именами из разных сессий не будут конфликтовать друг с другом. В момент штатного закрытия окна access сессия закрывается и все временные таблицы должны удалиться. Все верно? Вот у меня они не удаляются

Между закрытием программы и закрытием коннекта на сервере нет тождества

host.13
Если бы коннекты были разные, то для открытия нового коннекта меня access бы повтороно запросил имя входа\пароль на sql-server, а этого не происходит. Все верно?

Не верно. Зачем ему запрашивать, если он уже открыл один коннект и открывает еще один с такими же параметрами

host.13
К тому же временные таблицы у меня не удаляются, а переименовываются в какие-то внутренние имена. Я вообще даже не знаю, мои это таблицы или нет - в списке таблиц БД tempdb я сначала вижу свои веременные таблицы, а затем таблицы с непонятными именами, с котороыми ничего нельзя сделать.

Ничего не переименовывается. Действительное имя временной таблицы состоит из того, что вы указали в команде создания и идентификатора. Для того, чтобы в разных коннектах могли существовать таблицы с одинаковыми именами. И если вы видите эти эти таблицы в tempdb, то это означает только одно - коннект, в котором они созданы, не закрыт

host.13
К тому же версия с разными коннектами имела бы право на существование, если бы это проиходило постоянно. Так не же ж - сначала все работает нормально, потом вдруг начинается ад и Израиль.

Проблема - в вашем клиентском коде. А не в сервере
17 дек 11, 11:01    [11781713]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
aleks2
Guest
host.13
Если бы коннекты были разные, то для открытия нового коннекта меня access бы повтороно запросил имя входа\пароль на sql-server, а этого не происходит. Все верно?


1. Нет. Не верно.
Access уже знает имя входа\пароль - вы ж ему сами сказали.

2. Access .ADP активно использует множественные подключения.

3. Причем наличие-отсутствие дополнительного подключения недетерминированно, а определяется занятостью основного.

4. Запустили длинный запрос на основном подключении - получим выполнение другого запроса на новом.
17 дек 11, 11:26    [11781733]     Ответить | Цитировать Сообщить модератору
 Re: не удаляются временные таблицы  [new]
host.13
Member

Откуда:
Сообщений: 263
Всем спасибо, решил проблему тем, что создаю, изменяю и уничтожаю временные таблицы в одной процедуре.
20 дек 11, 10:02    [11793904]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить