Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Возможно ли оптимизировать запрос к dbf (число прочтений - 7047 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #15 - 04. Июля 2012 :: 12:18
Печать  
Marten писал(а) 04. Июля 2012 :: 12:16:
Только на SET

sp3163 строка 15
descr строка 100
sp3056 строка 15
Поля у меня уже такой длинны (проверял в отладке) зачем SET?


зачет.. как ты хочешь тогда, чтоб индексы работали у тебя ?
Строка подключения какая ?
Сам vfp откуда брал ?
скачай отсюда:
http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA...
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #16 - 04. Июля 2012 :: 12:32
Печать  
Код
Выбрать все
	База = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE";
	Рез = База.Соединение(Соединение);
    Если Рез=0 Тогда
	  Сообщить("Подключение к БД не выполнено!", "!");
    КонецЕсли;


	Запрос = База.СоздатьКоманду();
    Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
 



1.Установил Microsoft OLE DB Provider for Visual FoxPro 9.0
http://www.microsoft.com/downloads/details.aspx?familyid=E1A87D8F-2D58-491F-A0FA...
2.Заменил vfpoledb.dll из vfpoledb_new_sp2.rar
http://uzhast.fatal.ru/vfpoledb/
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #17 - 04. Июля 2012 :: 12:33
Печать  
>>>Заменил vfpoledb.dll из vfpoledb_new_sp2.rar

зафига ?
Улыбка)

для монопольной работы есть решение лучше.

ЗЫ: и вот на этой строке
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");

у тебя ошибка теперь, так ?

Вот и не работает у тебя "попадание в индекс"
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #18 - 04. Июля 2012 :: 12:37
Печать  
Заменил vfpoledb.dll из vfpoledb_new_sp2.rar
не для монопольного а для того чтобы таблицы не блокировались
(вроде гдето здесь объяснялось)

Вы же сами спрашивали насчет наличия EXECSCRIPT('SET ANSI OFF')
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #19 - 04. Июля 2012 :: 12:39
Печать  
Убрал
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");

Все то же
FAILED! ICommandText::Execute(): Function argument value, type, or count is invalid.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #20 - 04. Июля 2012 :: 12:40
Печать  
не надо ничего заменять.

Использовать провайдер от ужаста не надо (а делался он, для выполнения запросов в монопольном режиме, если что)


Ставить надо это
http://infostart.ru/public/16268/

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


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #21 - 04. Июля 2012 :: 12:46
Печать  
А в момент формирования прямого запроса если начнется проведение документа? как поведет себя 1С?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #22 - 04. Июля 2012 :: 12:53
Печать  
Улыбка
ты не поверишь - нормально.
Ты же не апдейтишь/инсертишь таблички.. ты всего лишь читатель.

+ если посмотришь выше - там есть "отключение" блокировок в моём примере.
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #23 - 04. Июля 2012 :: 12:54
Печать  
Спасибо за уделенное время

Скачал.
Буду разбираться.
пользоваться измененной vfpoledb.dll не нужно. я правильно понял?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #24 - 04. Июля 2012 :: 13:00
Печать  
правильно.
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #25 - 04. Июля 2012 :: 15:51
Печать  
Перечитывал свои ответы
нашел неточность

Это ошибка на эту команду ?
или на сам текст запроса ?

Только на SET

sp3163 строка 15
descr строка 100
sp3056 строка 15
Поля у меня уже такой длинны (проверял в отладке) зачем SET?

я имел ввиду STR зачем?
ошибки на SET нет никакой
ошибку выдает когда использую STR

Код
Выбрать все
	|LEFT JOIN $Справочник.Номенклатура AS СпрН
	|		ON (STR(СпрН.sp3163,15)+STR(СпрН.descr,100)
	|			LIKE __________________________________________'))

 



FAILED! ICommandText::Execute(): Function argument value, type, or count is invalid.



Если так то ошибки нет но в нужный индекс не попадаю
Выбиратся автоматом индекс
IDD = Expression id

а хотелось использовать индекс
VI3163 = Expression UPPER(sp3163)+UPPER(descr)

Код
Выбрать все
	|LEFT JOIN $Справочник.Номенклатура AS СпрН
	|		ON (UPPER(СпрН.sp3163)+UPPER(СпрН.descr)
	|			LIKE _________________________________________'))

 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #26 - 04. Июля 2012 :: 17:04
Печать  
Код
Выбрать все
|LEFT JOIN $Справочник.Номенклатура AS СпрН
|		ON (UPPER(СпрН.sp3163)+UPPER(СпрН.descr))
|			LIKE _________________________________________')
 



проверил подобный код - усё отрабатывает и в индекс попадает

ЗЫ: скобочки правильно раставь
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Возможно ли оптимизировать запрос к dbf
Ответ #27 - 04. Июля 2012 :: 17:10
Печать  
А у тебя, либо descr не 100, либо количество _ не верное, для проверки, заместо '___________ .... ' воткни

+'%'
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #28 - 05. Июля 2012 :: 11:08
Печать  
1. (Использовать провайдер от ужаста не надо)  - Убрал
2. (Ставить надо это http://infostart.ru/public/16268/)  - Поставил
3. (скобочки правильно раставь)  - проверил
4. (А у тебя, либо descr не 100, либо количество _ не верное) - descr 100, количество _ = 100
5. (для проверки, заместо '___________ .... ' воткни +'%') - делал

индекс автоматом выбирает по прежнему IDD = Expression id

еще сделано:
пробую использовать индекс VIP3163
parent+STR(isfolder,1)+UPPER(sp3163)+UPPER(descr)

Код
Выбрать все
	|LEFT JOIN 	$Справочник.Номенклатура AS СпрН
	|		ON СпрН.parentid+STR(СпрН.IsFolder,1)+UPPER(СпрН.sp3163)+UPPER(СпрН.descr)
	|			LIKE _________________________________________________________')
	|		   AND (СпрН.IsMark = '')
 



выбирает индекс IDD = Expression id
  
Наверх
 
IP записан
 
Marten
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 02. Июля 2012
Re: Возможно ли оптимизировать запрос к dbf
Ответ #29 - 05. Июля 2012 :: 11:11
Печать  
Пробовал с SET ANSI OFF и ON

Запрос = База.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");

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