Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) DBF: FAILED! ICommandText::Execute(): Индекс не найден (число прочтений - 7241 )
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
DBF: FAILED! ICommandText::Execute(): Индекс не найден
17. Января 2013 :: 07:06
Печать  
Добрый день.
Выполняю на DBF

Код
Выбрать все
update [1SENTRY]
   SET [SP32573] = '     E   '
where [1SENTRY].[SP7736] = '     2   ' and [1SENTRY].[SP32573] = '     0   ' 


Вываливается с ошибкой
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);      
FAILED! ICommandText::Execute(): Индекс не найден.

Как побороть?

Простите если это уже обсуждалось, но поиском не нашел Печаль

-----

upd:
Вот так подключаюсь к БД
Код
Выбрать все
		База = СоздатьОбъект("OLEDBData");
		Соединение = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + КаталогИБ() + "; Extended Properties=""DBASE IV;Collating Sequence=MACHINE;DSN="";";
		Рез = База.Соединение(Соединение);
		Запрос = База.СоздатьКоманду(); 



Далее запрос:
Код
Выбрать все
	ТекстЗапроса = "
	|update ["+ТаблицаПроводокВБД+"]
	|   SET ["+ПолеРУ+"] = :ФирмаОбщ
	|where ["+ТаблицаПроводокВБД+"].["+ПолеРУЮрЛицо+"] = :РХ and ["+ТаблицаПроводокВБД+"].["+ПолеРУ+"] = $ПустойИд
	|";


	нстанты/ФирмаОбщ"));
	Запрос.ВыполнитьИнструкцию(ТекстЗапроса);	 

« Последняя редакция: 17. Января 2013 :: 08:44 - MaxPiter »  
Наверх
www  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #1 - 17. Января 2013 :: 09:20
Печать  
А без update работает?
простой select.
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #2 - 17. Января 2013 :: 09:27
Печать  
Да, работает.

Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|	Спр.Code as Код,
	|	Спр.Descr as Наименование
	|FROM
	|	$Справочник.Фирмы as Спр";


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



отрабатывает без проблем, но

Код
Выбрать все
SELECT * FROM [1SENTRY]
where [1SENTRY].[SP7736] = '     2   ' and [1SENTRY].[SP32573] = '     0   '
 


тоже приводит к ошибке
FAILED! ICommandText::Execute(): Индекс не найден.
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #3 - 17. Января 2013 :: 10:06
Печать  
ODBC хочет индекс по SP7736, SP32573 что ли?

upd:

ок, хочешь индекс? получи

Код
Выбрать все
	ТекстЗапроса = "
	|CREATE INDEX MyIndex ON "+ТаблицаПроводокВБД+"("+ПолеРУЮрЛицо+","+ПолеРУ+")
	|";

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


Ругается:
FAILED! ICommandText::Execute(): Блокировка таблицы '1SENTRY' невозможна; она используется пользователем '(нет данных)' на машине '(нет данных)'.

я же ее и использую же.
« Последняя редакция: 17. Января 2013 :: 11:39 - MaxPiter »  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #4 - 17. Января 2013 :: 11:43
Печать  
Ну ладно, не хочешь ты, добавлю через 1c.dd (я уже с ней разговаривать начал)

пишу в 1c.dd
I=VIA77362 |VIA77362      |0     |SP7736,SP32573                                                        |VIA77362    

запускаю 1С, она ругается, но переиндексирует 1SENTRY и индекс новый появляется

но дальше опять на запрос update

FAILED! ICommandText::Execute(): Блокировка таблицы '1SENTRY' невозможна; она используется пользователем '(нет данных)' на машине '(нет данных)'.

ПОДСКАЖИТЕ ЖЕ УЖЕ мне ламеру последнему, как выполнить эти запросы в DBF???
щас пойду рыдать
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #5 - 17. Января 2013 :: 11:57
Печать  
(0) для начала, так на соединение:

Код
Выбрать все
глОлеДБ = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Попытка
		глОлеДБ.Соединение(Соединение);
	Исключение
		Предупреждение("Не установлен VFPOLEDB");
		СтатусВозврата(0);
		Возврат;
	КонецПопытки;
	гЗапрос = глОлеДБ.СоздатьКоманду();
	гЗапрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
	// Устанавливаем время ожидания захвата таблиц , если во время выполнения запроса кто то проводит документы
	// Очень полезная функция - аналогична времени ожидания в 1С
	гЗапрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
	// Убираем буфепизацию, чтобы данные возвращаемые запросам всегда были актуальны
	гЗапрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
	гЗапрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// Отключили блокировки  

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


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #6 - 17. Января 2013 :: 12:06
Печать  
Eprst писал(а) 17. Января 2013 :: 11:57:
(0) для начала, так на соединение:

Подключился.
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #7 - 17. Января 2013 :: 12:14
Печать  
Ну и собственно дальше пошло нормально, нужно только квадратные скобки убрать в лишних местах Улыбка
Запрос сейчас выполняется, а Епрст как всегда спас мир Улыбка
Спасибо Улыбка
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #8 - 17. Января 2013 :: 12:18
Печать  
ну и дальше

Код
Выбрать все
Update
  Табличка
SET
  $Табличка.Реквизит = :НужноеЗначение
FROM
 1ssentry as Табличка
WHERE $Табличка.ДругойРеквизит = :Вася 

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


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #9 - 17. Января 2013 :: 12:21
Печать  
Тогда, добрый ты человек, скажи где тут ошибка?

Код
Выбрать все
UPDATE [1SENTRY]
   SET SP32573 = (SELECT Журнал.sp4056
	From [1SJOURN] as Журнал
	LEFT JOIN sc4014 as Фирмы on Журнал.sp4056 = Фирмы.ID
	WHERE Журнал.IDDOC=1SENTRY.DOCID)
WHERE 1SENTRY.SP32573='     0   ' 



FAILED! ICommandText::Execute(): Function name is missing.

В SQL эти запросы отработали уже давно и все с ними понятно, а вот с DBF, последний раз сталкивался в 1999 году, но в таких простых вещах DBF с SQL вроде похожи.

Версия vfpoledb.dll = 9.0.0.5815
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #10 - 17. Января 2013 :: 12:48
Печать  
Это, подзапрос должен вернуть ОДНО значение, тут либо максимум и гроупбай, либо топ 1 и ордер (и то не уверен , что фокс это будет поддерживать в селект листе)

Либо всё тоже самое в подзапросе и лефт джоин с ним.. и в сет = данные подзапроса.поле
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #11 - 17. Января 2013 :: 12:59
Печать  
Eprst писал(а) 17. Января 2013 :: 12:48:
Это, подзапрос должен вернуть ОДНО значение, тут либо максимум и гроупбай, либо топ 1 и ордер (и то не уверен , что фокс это будет поддерживать в селект листе)

Либо всё тоже самое в подзапросе и лефт джоин с ним.. и в сет = данные подзапроса.поле


Код
Выбрать все
UPDATE [1SENTRY]
   SET SP32573 = (SELECT top 1 Журнал.sp4056
	From 1SJOURN as Журнал
	LEFT JOIN sc4014 as Фирмы on Журнал.sp4056 = Фирмы.ID
	WHERE Журнал.IDDOC=1SENTRY.DOCID
	ORDER BY Журнал.sp4056
 )
WHERE 1SENTRY.SP32573='     0   ' 


то же самое.
Гугл говорит что такая конструкция поддерживается и даже примеры есть, но в данном случае почему то вылетает.
Что означает в данном случае Function name is missing ?
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #12 - 17. Января 2013 :: 13:08
Печать  
Код
Выбрать все
|UPDATE tabl
|   SET tabl.SP32573 = t.a
|from 1sentry as tabl
|inner join
|(SELECT max(Журнал.sp4056) as a,
|   Журнал.IDDOC as iddoc
|	From 1SJOURN as Журнал
|   group by Журнал.IDDOC) as t t.iddoc = tabl.docid
|
|WHERE tabl.SP32573=$ПустойИД 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #13 - 17. Января 2013 :: 13:09
Печать  
И это, пиши нормальные имена полей..
а то sp и т.д не читаемо...
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: DBF: FAILED! ICommandText::Execute(): Индекс не найден
Ответ #14 - 17. Января 2013 :: 13:13
Печать  
Eprst писал(а) 17. Января 2013 :: 13:09:
И это, пиши нормальные имена полей..
а то sp и т.д не читаемо...

дык запрос то у меня вообще вот такой

Код
Выбрать все
	ТекстЗапроса = "
	|UPDATE ["+ТаблицаПроводокВБД+"]
	|   SET "+ПолеРУ+" = (SELECT Журнал.$ОбщийРеквизит.Фирма
	|						From "+ТаблицаЖурналВБД+" as Журнал
	|						LEFT JOIN $Справочник.Фирмы as Фирмы on Журнал.$ОбщийРеквизит.Фирма = Фирмы.ID
	|						WHERE Журнал.IDDOC="+ТаблицаПроводокВБД+".DOCID
	|					 )
	|	WHERE "+ТаблицаПроводокВБД+"."+ПолеРУ+"=$ПустойИд
	|"; 



это уже я вывожу, что отладчик показывает.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать