Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Ошибка при использовании "УложитьСписокОбъектов" (число прочтений - 3790 )
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Ошибка при использовании "УложитьСписокОбъектов"
15. Ноября 2007 :: 13:29
Печать  
Здравствуйте!
Использую "OLEDBData" для доступа к DBF-ой БД.

Выдается ошибка.

Запрос.УложитьСписокОбъектов(АК_СписокПометок, ИмяТаблицы);
{Справочник.СтрокиКаталога.ФормаСписка.ФормаСписка.Модуль(532)}: FAILED! ICommandText::Execute(): Произошла одна или несколько ошибок во время обработки команды.

Если глАК_ЭтоSQL_Версия = 0 Тогда

База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Mode=Read;Data Source=" + КаталогИБ();
Рез = База.Соединение(Соединение);
Запрос = База.СоздатьКоманду();
                       
ТекстЗапроса = "|SELECT СтрокиКаталога.ID [Элемент $Справочник.СтрокиКаталога]
                 |FROM $Справочник.СтрокиКаталога AS СтрокиКаталога
                 |WHERE  СтрокиКаталога.PARENTEXT = :Владелец AND СтрокиКаталога.ID NOT IN (SELECT Val FROM "+?(глАК_ЭтоSQL_Версия=0,":","#")+"АК_СписокПометок)";
                       
                       
ИмяТаблицы="#АК_СписокПометок";
Запрос.УложитьСписокОбъектов(АК_СписокПометок,            ИмяТаблицы);
Запрос.УстановитьТекстовыйПараметр ("АК_СписокПометок",      ИмяТаблицы);
Запрос.УстановитьТекстовыйПараметр ("Владелец",            Владелец);
                       
ТЗ= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

КонецЕсли;

На SQL все отрабатывает.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #1 - 15. Ноября 2007 :: 13:33
Печать  

В ДБФ версии драйвер сам создает такие таблицы и сам же генерирует им имя.

Можно сделать универсальный способ получения имени таблицы, работающий как в ДБФ, так и в СКЛ:

     ИмяТаблицы="#Группа ";

     Запрос.УложитьСписокОбъектов(СписокРодителей,ИмяТаблицы);

     ТекстЗапроса=" (SELECT Val FROM "+ИмяТаблицы+")";


Из руководства
  
Наверх
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #2 - 15. Ноября 2007 :: 14:36
Печать  
Поправил.
Плюется все тем же сообщением.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #3 - 15. Ноября 2007 :: 14:39
Печать  
СтрокиКаталога.ID as [Элемент $Справочник.СтрокиКаталога]
  
Наверх
 
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #4 - 15. Ноября 2007 :: 14:49
Печать  
JohnyDeath писал(а) 15. Ноября 2007 :: 14:39:
СтрокиКаталога.ID as [Элемент $Справочник.СтрокиКаталога]


Вот это проглядел.

В хелпе написано

В случае СКЛ запрос выполнится из таблицы "#Группа", а в случае ДБФ система сгенерит имя и вернет ее в переменную ИмяТаблицы. В случае ДБФ имя временной таблицы выглядит так ‘f6d3b234a56c765f52da’ что, конечно не очень красиво для текста запроса(особенно если его еще и разбирать на ошибки нужно или на дополнения). Можно сделать запрос более красивым и универсальным: для этого воспользуемся методом УстановитьТекстовыйПараметр()

  ИмяТаблицы="#Группа";

  Запрос.УложитьСписокОбъектов(СписокРодителей,ИмяТаблицы);

  Запрос. УстановитьТекстовыйПараметр ("Группа", ИмяТаблицы);

  ТекстЗапроса=" (SELECT Val FROM "+?(ЭтоСКЛ=0,":","#")+"Группа)";

В этом случае если работа происходит в СКЛе то запрос проигнорирует текстовый параметр, а если в ДБФ, то вместо :Группа подставит имя временной таблицы.

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #5 - 15. Ноября 2007 :: 14:54
Печать  
Тебе ж Лёшик написал как лучше написать.
Вместо твоего:
Код
Выбрать все
ТекстЗапроса=" (SELECT Val FROM "+?(ЭтоСКЛ=0,":","#")+"Группа)"; 


напиши
Код
Выбрать все
ТекстЗапроса=" (SELECT Val FROM "+ИмяТаблицы+")"; 

  
Наверх
 
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #6 - 15. Ноября 2007 :: 14:55
Печать  
Я так и пишу.
Все те же письма пишет. Я бы давно уже бросил , т.к. БД SQL, но не люблю когда косяки остаются.

"
|SELECT СтрокиКаталога.ID AS [Элемент $Справочник.СтрокиКаталога]
|FROM $Справочник.СтрокиКаталога AS СтрокиКаталога
|WHERE  СтрокиКаталога.PARENTEXT = :Владелец AND СтрокиКаталога.ID NOT IN (SELECT Val FROM "+ИмяТаблицы+")";
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #7 - 15. Ноября 2007 :: 15:00
Печать  
Код
Выбрать все
Если глАК_ЭтоSQL_Версия = 0 Тогда

База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Mode=Read;Data Source=" + КаталогИБ();
Рез = База.Соединение(Соединение);
Запрос = База.СоздатьКоманду();

ИмяТаблицы="#Группа ";  
Запрос.УложитьСписокОбъектов(АК_СписокПометок,ИмяТаблицы);

ТекстЗапроса = "|SELECT СтрокиКаталога.ID as [Элемент $Справочник.СтрокиКаталога]
		     |FROM $Справочник.СтрокиКаталога AS СтрокиКаталога
		     |WHERE  СтрокиКаталога.PARENTEXT = :Владелец AND СтрокиКаталога.ID NOT IN (SELECT Val FROM "+ИмяТаблицы+")";

Запрос.УстановитьТекстовыйПараметр ("Владелец",		Владелец);

ТЗ= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

КонецЕсли; 


не пашет?
  
Наверх
 
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #8 - 15. Ноября 2007 :: 15:13
Печать  
JohnyDeath писал(а) 15. Ноября 2007 :: 15:00:
Код
Выбрать все
Если глАК_ЭтоSQL_Версия = 0 Тогда

База = СоздатьОбъект("OLEDBData");
Соединение = "Provider=VFPOLEDB.1;Mode=Read;Data Source=" + КаталогИБ();
Рез = База.Соединение(Соединение);
Запрос = База.СоздатьКоманду();

ИмяТаблицы="#Группа ";  
Запрос.УложитьСписокОбъектов(АК_СписокПометок,ИмяТаблицы);

ТекстЗапроса = "|SELECT СтрокиКаталога.ID as [Элемент $Справочник.СтрокиКаталога]
		     |FROM $Справочник.СтрокиКаталога AS СтрокиКаталога
		     |WHERE  СтрокиКаталога.PARENTEXT = :Владелец AND СтрокиКаталога.ID NOT IN (SELECT Val FROM "+ИмяТаблицы+")";

Запрос.УстановитьТекстовыйПараметр ("Владелец",		Владелец);

ТЗ= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

КонецЕсли; 


не пашет?


Вот именно не пашет. И понять не могу почему. С++ 2.5.0.5!
  
Наверх
 
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #9 - 15. Ноября 2007 :: 15:16
Печать  
vfpoledb.dll 9.0.0.5815 патченная Uzhast
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #10 - 15. Ноября 2007 :: 15:17
Печать  
Ааа, всё, понял. В строке подключения засада. Делай так:
Mode=ReadWrite
П.С. и вертикальную черту убери перед SELECT
  
Наверх
 
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #11 - 15. Ноября 2007 :: 15:25
Печать  
Когда "ReadWrite" ругается так, поэтому и использую "Read".
Дело в том, что запрос выполняется в момент когда пользователь находится в форме списка справочника "СтрокиКаталога", по которому и выбираются данные.

Шлюз= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
{Справочник.СтрокиКаталога.ФормаСписка.ФормаСписка.Модуль(560)}: FAILED! ICommandText::Execute(): Cannot open file sc23943.dbf.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #12 - 15. Ноября 2007 :: 15:34
Печать  
Bingo писал(а) 15. Ноября 2007 :: 15:25:
Cannot open file sc23943.dbf.

монопольно?
  
Наверх
ICQ  
IP записан
 
Bingo
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 03. Октября 2007
Re: Ошибка при использовании "УложитьСписокОбъекто
Ответ #13 - 15. Ноября 2007 :: 15:43
Печать  
Мляяяяяя.  Смех Ну кочено же. Все, всем спасибо за помощь.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать