Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема УложитьСписокОбъектов13 - не создает временную таблицу (число прочтений - 2598 )
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
УложитьСписокОбъектов13 - не создает временную таблицу
19. Октября 2009 :: 13:33
Печать  
упрощенно мой запрос выглядит так:

Запрос = СоздатьОбъект("ODBCRecordSet");
Запрос.УложитьСписокОбъектов13(спДок,"#спДок");
Запрос.ВыполнитьИнструкцию("select * from #спДок");

как результат имею ошибку выполнения: Invalid object name '#спДок'

почему некорректно отрабатывается метод УложитьСписокОбъектов?

  
Наверх
 
IP записан
 
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #1 - 19. Октября 2009 :: 13:44
Печать  
отлавливаю код профайлером, запускаю в том же соединении:

if exists(select * from tempdb..sysobjects where id = object_id('tempdb..#спДок'))
           drop table #спДок
           create table #спДок (val char(13), primary key clustered (val))
go
declare @P1 int
exec sp_prepexec @P1 output, N'@P1 char(13)', N'insert #спДок values (@P1)', ' EGR  CQBD   '
select @P1
go
exec sp_execute 21, ' EGR  CQBD   ' --@P1 = 21

уже другая ошибка:
Violation of PRIMARY KEY constraint 'PK__#спДок__60D7D6EA'. Cannot insert duplicate key in object '#спДок

т.е. временная таблица, созданная в том же подключении по какой-то причине не дропнулась
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #2 - 19. Октября 2009 :: 15:07
Печать  
проверку на существование таблицы надо делать без указания базы
потому что # и так признак что таблица в базе  tempdb
А вот какое реальное у таблицы имя большой вопрос.
т.е надо проверять одним из способов
1.
if exists(select * from tempdb.dbo.sysobjects where id = object_id('tempdb.dbo.#спДок'))
2.
if exists(select * from tempdb.dbo.sysobjects where id = object_id('#спДок'))


3 или  вообще удалять из 1с независимо от того есть или нет вр. таблицы

Попытка
   Запрос.ВыполнитьСкалярный("drop table #спДок");
Исключение
КонецПопытки;


Оставшиеся вопросы давайте обсудим когда у Вас будет удаляться временная таблица.

PS Также я пришел к выводу что желательно сразу как временная таблица больше не нужна сразу ее явно удалять (drop).
  
Наверх
 
IP записан
 
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #3 - 19. Октября 2009 :: 15:37
Печать  
Z1 писал(а) 19. Октября 2009 :: 15:07:
проверку на существование таблицы надо делать без указания базы
потому что # и так признак что таблица в базе  tempdb
А вот какое реальное у таблицы имя большой вопрос.
т.е надо проверять одним из способов
1.
if exists(select * from tempdb.dbo.sysobjects where id = object_id('tempdb.dbo.#спДок'))
2.
if exists(select * from tempdb.dbo.sysobjects where id = object_id('#спДок'))


3 или  вообще удалять из 1с независимо от того есть или нет вр. таблицы

Попытка
   Запрос.ВыполнитьСкалярный("drop table #спДок");
Исключение
КонецПопытки;


Оставшиеся вопросы давайте обсудим когда у Вас будет удаляться временная таблица.

PS Также я пришел к выводу что желательно сразу как временная таблица больше не нужна сразу ее явно удалять (drop).


1. приведенный код - генерит метод УложитьСписокОбъектов(), на него я повлиять не могу
2. УложитьСписокОбъктов() с приведенным кодом ругается не всегда, поэтому рискну предположить, что есть какие-то нюансы о которых я не знаю. Отсюда и тема.

п.с. удалять временную таблицу - безусловно буду руками

  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #4 - 19. Октября 2009 :: 16:58
Печать  
gls писал(а) 19. Октября 2009 :: 13:44:
т.е. временная таблица, созданная в том же подключении по какой-то причине не дропнулась

Странный вывод, никак не следующий из скрипта и текста ошибки. А для чего у тебя в спДок дубли?

И да, удалять её руками - не нужно.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #5 - 20. Октября 2009 :: 06:45
Печать  
berezdetsky писал(а) 19. Октября 2009 :: 16:58:
gls писал(а) 19. Октября 2009 :: 13:44:
т.е. временная таблица, созданная в том же подключении по какой-то причине не дропнулась

Странный вывод, никак не следующий из скрипта и текста ошибки. А для чего у тебя в спДок дубли?

И да, удалять её руками - не нужно.


в спДок - дублей нет. в приведенном примере - в списке всего 1 документ.
последовательность действий, которая привела к ошибке:
1. программно провожу док, ошибка - Invalid object name '#спДок'
2. профайлером отлавливаю код (приведен ранее): дроп таблицы (если есть), создание, вставка 1 значения. запрос, использующий #спДок дает ошибку (нет #спДок)

далее - беру код из профайлера, выполняю в QA и сразу получаю ошибку о наличии дубликатов в первичном ключе
смотрю темповую базу. вижу в ней 2 таблички #спДок - отсюда вывод - временная таблица не дропается.
пытаюсь удалить руками - не удаляет - говорит таблица не содержится в системном каталоге.

п.с. гугл сказал, что проблема в методе УложитьСписокОбъектов не только у меня, но причину найти не удалось.

апд. в темповой базе вторая табличка от другого коннекта, временная таблица дропается.
ошибку о наличии дубликатов в пк выдается на инструкции: exec sp_execute @P1, ' EGR  CQBD   '
это код, который автоматически генерится при использовании метода УложитьСписокОбъектов().
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #6 - 20. Октября 2009 :: 07:58
Печать  
Создай и выложи здесь маленькую тестовую базу где ошибка воспроизводиться с описанием как воспроизвести,
а так очень сложно понять.
Ихмо у меня не было пробем с времеными таблицами в 1с++( в основном их использую ) для фильтрации  списковзначений в sql запросах.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #7 - 20. Октября 2009 :: 09:34
Печать  
gls писал(а) 20. Октября 2009 :: 06:45:
в спДок - дублей нет. в приведенном примере - в списке всего 1 документ.
последовательность действий, которая привела к ошибке:
1. программно провожу док, ошибка - Invalid object name '#спДок'
2. профайлером отлавливаю код (приведен ранее): дроп таблицы (если есть), создание, вставка 1 значения.

В приведённом скрипте - вставка одного и того же значения дважды. Отсюда - "Cannot insert duplicate key".
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #8 - 20. Октября 2009 :: 09:56
Печать  
berezdetsky писал(а) 20. Октября 2009 :: 09:34:
gls писал(а) 20. Октября 2009 :: 06:45:
в спДок - дублей нет. в приведенном примере - в списке всего 1 документ.
последовательность действий, которая привела к ошибке:
1. программно провожу док, ошибка - Invalid object name '#спДок'
2. профайлером отлавливаю код (приведен ранее): дроп таблицы (если есть), создание, вставка 1 значения.

В приведённом скрипте - вставка одного и того же значения дважды. Отсюда - "Cannot insert duplicate key".


да. все именно так.
в списке, действительно, было 2 документа с одинаковым iddoc.
"свернули" список - отрабатывается без ошибок

только интересно, почему в тестовом примере список из двух одинаковых документов прекрасно укладывается во временную таблицу, а в рабочей базе - приходится исключать дубли.

  
Наверх
 
IP записан
 
gls
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 51
Зарегистрирован: 14. Июля 2008
Re: УложитьСписокОбъектов13 - не создает временную таблицу
Ответ #9 - 20. Октября 2009 :: 10:04
Печать  
Z1 писал(а) 20. Октября 2009 :: 07:58:
Создай и выложи здесь маленькую тестовую базу где ошибка воспроизводиться с описанием как воспроизвести,
а так очень сложно понять.
Ихмо у меня не было пробем с времеными таблицами в 1с++( в основном их использую ) для фильтрации  списковзначений в sql запросах.


пока не удается воспроизвести ошибку на тестовой базе
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать