Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
А проблема заключается вот в чем: из проекта я создаю на SQL-сервере временную таблицу #<Table1>. Через хранимые процедуры на SQL-е я ее заполняю и в качестве источника данных запросом - "SELECT * FROM #<Table1>" кидаю данные на подформу. При обновлении данных на форме по событию AfterUpdate делаю <Имя подформы>.Form.Refresh.
И далее по запросу:
"Select Count(Поле1) FROM #<Table1>" Вываливается ошибка Invalid Object Name #<Table1>. Нажимаю Debug и через F8 все проходит зашибися. Так же все работает четко, если в таблице всего две записи. А если 1500 то вываливается ошибка. Я так понимаю, что строчка <Имя подформы>.Form.Refresh блокирует на время эту временную таблицу, а так как MS ACCESS устанавливает три сессии, то вероятно одной сессией он обновляет данные с подформы, а другой пытается выполнить запрос, - ввиду это скорее всего и выходит такая вот коллизия. Если кто нибудь сталкивался с подобным помогите плз.
23 авг 04, 12:18    [900681]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
guest1187
Guest
Я думаю, что просто напросто к моменту Refresh'a твоей таблицы уже в базе данных нет. Изменяется сессия и естественно твоя временная таблица убивается.
23 авг 04, 13:29    [901002]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
Нет ты не прав таблица как раз таки остается, но он ее почему-то не видит. Причем не видит он ее как раз на время обновления.

Я уже писал, что если в таблице всего 2-е записи, то все работает ОК. Если 1500 записей, то ни фига. И проблема встает вот в чем: если таблица с 2-мя записями то рефреш делается за доли секунды и как раз к запросу обновление уже завершается. Для больших таблиц, рефреш не успевает сделаться и таблицу приложение не видит. Если сделать задержку на 10 сек. то впринципе через раз прокатывает.
23 авг 04, 14:47    [901361]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
А на счет сессии. Временная таблица может убиться только если завершилось подключение. То есть таблица есть все время, а вот видно ее не всегда!!! Вот прикол!!!
23 авг 04, 14:49    [901372]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
А на счет сессии. Временная таблица может убиться только если завершилось подключение. То есть таблица есть все время, а вот видно ее не всегда!!! Вот прикол!!!
23 авг 04, 14:51    [901381]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
Access .ADP может выполнять асинхронный Requery.

Если основное подключение занято ожиданием операции, то Access .ADP создает новое подключение и выполняет Requery через него. Сам понимаешь для этого подключения #Table не существует....
23 авг 04, 15:53    [901688]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
А как средствами Accessa выполнить асинхронный Requery. Но вообще-то мне нужен не Requery, а refresh. Объясняю почему: на подформу выводится список полей, одно из которых битовое поле для выделения выбранных записей. Если рефреш не делать, то по событию afterupdate число выбранных записей считается неправильно. Если добавить рефреш, то все работает зашибись, кроме этого злосчастного момента с временной таблицей.
23 авг 04, 16:46    [901953]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
А если попробовать глобальную временную таблицу ##Table
24 авг 04, 04:02    [902585]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
Lexa_V
А как средствами Accessa выполнить асинхронный Requery.

А никак, он сам решает как это делать. Рулить этим невозможно.

Lexa_V
Но вообще-то мне нужен не Requery, а refresh.


Те же яйца, только вид сбоку.

Lexa_V
Если добавить рефреш, то все работает зашибись, кроме этого злосчастного момента с временной таблицей.


Самое простое - отказаться от временной таблицы и заменить на постоянную.
24 авг 04, 06:33    [902629]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
vma_mnt
А если попробовать глобальную временную таблицу ##Table


Тогда вопрос, если идет много пользовательская работа - коннекшинов много и все работают с данной таблицей? Как я понимаю временная таблица отличается от глобальной как раз тем что она привязана к коннекшену.
24 авг 04, 08:54    [902724]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
Вопрос встает ГЛОБАЛЬНЫЙ вот в чем: Я НЕ ПОНИМАЮ ТАКОЙ ПАРАЛЛЕЛИЗМ ЭТО ГЛЮК MS ACCESS или это надо ковырять в SQL-сервере для того чтобы определить какие блокировки он ставит на временные таблицы???
24 авг 04, 08:57    [902730]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
>>Я НЕ ПОНИМАЮ ТАКОЙ ПАРАЛЛЕЛИЗМ ЭТО ГЛЮК MS ACCESS

Нет это BY Design.

>>или это надо ковырять в SQL-сервере для того чтобы определить какие блокировки он ставит на временные таблицы???

Ты нихрена не понял.
Access открывает НОВОЕ ПОДКЛЮЧЕНИЕ, для него просто НЕ СУЩЕСТВУЕТ #Table, созданная в другом подключении.
24 авг 04, 10:00    [902879]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Pavel
Member

Откуда: Кемерово
Сообщений: 2435
Без проблем пользуюсь:
Private Sub Form_Open(Cancel As Integer)
   Dim cmd As adodb.Command
   Set cmd = New adodb.Command
   cmd.ActiveConnection = CurrentProject.Connection
   cmd.CommandText = "If object_ID('tempdb..#PropertiesLinesTmp') Is Null " & _
            "Create Table tempdb..#PropertiesLinesTmp (Property_id Int Primary Key Not Null, Property_value_id Int Not Null, ok Bit) " & _
            "Else Truncate Table tempdb..#PropertiesLinesTmp"
   cmd.CommandType = adCmdText
   cmd.Execute
   Me.RecordSource = "#PropertiesLinesTmp"
End Sub
Правда есть нюанс - редактирование в форме возможно если есть права dbo на tempdb. Вот это точно глюк.
24 авг 04, 10:13    [902932]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
>> cmd.ActiveConnection = CurrentProject.Connection

А ты НОВУЮ коннекцию открой...
----------------------
Я ведь не от хорошей жизни говорю, сам на эти грабли наступал.
24 авг 04, 10:22    [902957]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
aleks2
>>
Access открывает НОВОЕ ПОДКЛЮЧЕНИЕ, для него просто НЕ СУЩЕСТВУЕТ #Table, созданная в другом подключении.

Как access открывает новое подключение если через F8 работает замечательно. Так же все работает если в таблице всего несколько записей, а не несколько тысяч записей.
24 авг 04, 10:22    [902958]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
To Aleksis
Видиш ли проблема создания и удаления временных таблиц у меня не стоит. Все создается и удаляется когда надо и где надо. Проблема в том, что в промежуток времени между созданием и удалением, а именно во время рефреша, access не видит эту самую созданную временную таблицу. Если в таблице мало записей то все прокатывает четко, так как рефреш делается доли секунды, а если много записей то несколько секунд и именно в эти несколько секунд временная таблица недоступна (а именно INVALID OBJECT NAME #<TableName>)
24 авг 04, 10:27    [902976]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
>>Как access открывает новое подключение если через F8 работает замечательно. Так же все работает если в таблице всего несколько записей, а не несколько тысяч записей.

Пока ты жмешь F8 (а это дольше, чем просто исполнение кода), основное подключение успевает освободиться и Access (не дурак) пользует его. Аналогично и в случае с малым числом записей во временной таблице.
24 авг 04, 10:35    [903006]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
aleks2
>> cmd.ActiveConnection = CurrentProject.Connection


Понимаешь, ошибка вываливается во время вы полнения хранимой процедуры, которая вызывается следующим кодом:

  Set ADOCMD.ActiveConnection = CurrentProject.Connection
    ADOCMD.CommandText = "EXEC StoredProcedure1"
    ADOCMD.CommandType = adCmdText
    ADOCMD.CommandTimeout = 0
    Set rs = ADOCMD.Execute
24 авг 04, 10:40    [903019]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
не сюда ли смотреть?

https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=106337&hl=


2 Саныч
Ау! вопросик в ФАК не пора?


(с выражением лица)
24 авг 04, 10:40    [903020]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
пардон. поторопился



(с выражением лица)
24 авг 04, 10:43    [903031]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
To aleks2
Слушай, а программно это дело обойти никак нельзя?
24 авг 04, 10:53    [903066]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
А еще ребята вопрос вот какой: весь этот геморой идет из-за того, что на подформе пользователь делает выбор (раставляет галочки). По событию AfterUpdate запрос:
SELECT COUNT(<Поле 1>) FROM #<TableName1> WHERE <Поле выбора1> = 1
делает не правильный подсчет каунта. Если сделать рефреш подформы и далее запрос все работает хорошо, но вываливается ошибка для временной таблицы.
24 авг 04, 11:01    [903101]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
ВСЕМ кто принимал учатие в беседе огромное спасибо. Сделал все тоже самое через глобальную таблицу, как кто-то из вас мне посоветовал, все работает превосходно. Но есть еще один вопрос в много пользовательском режиме как работать с этой таблицей? может кто подскажет или ссылку кинет!!!
24 авг 04, 12:20    [903527]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
aleks2
Guest
NewID() тебе поможет....
ну или
SUSER_SID()
есть еще варианты...
24 авг 04, 12:49    [903664]     Ответить | Цитировать Сообщить модератору
 Re: Проблема связи проекта *.adp с временными таблицами на SQL!!!  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
'##<TableName>' + convert(varchar(10), @@SPID)
Я конечно не знаю такая вот чтука будет работать без переконфигурации SQL сервера:

EXEC sp_configure 'allow updates', '1'
RECONFIGURE WITH OVERRIDE
go
...
go
EXEC sp_configure 'allow updates', '0'
RECONFIGURE WITH OVERRIDE*/
или нет?
24 авг 04, 14:22    [904149]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить