Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перешл с SQL на DBF как быть с запросом (число прочтений - 9263 )
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Перешл с SQL на DBF как быть с запросом
07. Апреля 2010 :: 02:49
Печать  
Код
Выбрать все
ТекстЗапроса = "
|create FUNCTION  sp_tohex(@val int, @len1 int) RETURNS varchar(9)
|AS
|begin
|declare @v int;
|declare @tval varchar(9);
|set @v = @val;
|set @tval = '';
|
|while (@v > 0)
|begin
|   set @tval = SUBSTRING('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',1+@v%36,1)+@tval;
|   set @v = @v/36;
|end;
|
|if @tval='' set @tval='0';
|
|while (len(@tval) < @len1)
|begin
|set @tval = ' '+@tval;
|end;
|RETURN(@tval);
|end
|";
Запрос.Открыть(ТекстЗапроса);
ТекстЗапроса = "
|SELECT
|     dbo.sp_tohex(Жур.IDDocDef, 4) +
|Рег.IDDoc [Док $Документ],
|	Жур.SP798 [Проект $Справочник.Проекты]
|FROM
|    $Регистр.Покупатели Рег
|LEFT JOIN 1SJourn Жур ON Жур.IDDoc = Рег.IDDoc
|WHERE Жур.SP798 IN (SELECT val FROM #ВыбПроект) AND
|Жур.Date BETWEEN :НачДата AND :КонДата~ AND
|Жур.Closed  = 1
|";

Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаНач);
Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода);
Запрос.УложитьСписокОбъектов(ВыбПроект,"#ВыбПроект","Проекты");
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
 



Данный код вываливается так как в DBF нельзя создать функцию, может кто подскажет как это обойти или как сделать выборку?


Начал копать дальше, сделал такого типа запрос
Код
Выбрать все
ТекстЗапроса = "

|SELECT

|  Жур.IDDoc [Док $Документ],

|  Жур.IDDocDef Док_вид

|FROM

|  1Sjourn Жур

|INNER JOIN

|  1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND

|			  Отбор.MDID = $ГрафаОтбора.Проект AND

|			  Отбор.ParentVal = #ВыбПроект AND

|			  Отбор.ChildDate BETWEEN :НачДата AND :КонДата~";
 



Валится что незнает общего реквизита Проект, хотя он есть и на нем стоит Отбор.
« Последняя редакция: 07. Апреля 2010 :: 04:00 - n0_0ne »  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Перешл с SQL на DBF как быть с запросом
Ответ #1 - 07. Апреля 2010 :: 04:29
Печать  
Перейди на ПрямойЗапрос. Там проще будет.
  
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #2 - 07. Апреля 2010 :: 05:06
Печать  
|SELECT
|     Жур.IDDocDef+Жур.IDDoc as [Док $Документ]
|    ,Жур.$ОбщийРеквизит.Проект as [Проект $Справочник.Проекты]
|    ,$Рег.Покупатель as [Клиентос $Справочник.Контрагенты]
|FROM
|    $Регистр.Покупатели Рег
|LEFT JOIN 1SJourn Жур ON Жур.IDDoc = Рег.IDDoc
|WHERE Жур.$ОбщийРеквизит.Проект IN (SELECT val FROM :ВыбПроект)
|AND Жур.Date BETWEEN :НачДата~~ AND :КонДата~~


И это.. цель то какая в целом ?
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #3 - 07. Апреля 2010 :: 05:20
Печать  
Цель - отбор документов за выбранный период с условием проекта, контрагента, потом скорее всего товара и т.д. )

Тыкните в прямой запрос )


Код
Выбрать все
ТекстЗапроса = "

|SELECT
|     Жур.IDDocDef+Жур.IDDoc as [Док $Документ]
|    ,Жур.$ОбщийРеквизит.Проект as [Проект $Справочник.Проекты]
|FROM
|    $Регистр.Покупатели Рег
|LEFT JOIN 1SJourn Жур ON Жур.IDDoc = Рег.IDDoc
|WHERE Жур.$ОбщийРеквизит.Проект IN (SELECT val FROM :#ВыбПроект)
|AND Жур.Date BETWEEN :НачДата AND :КонДата~ AND
|Жур.Closed  = 1
|";

Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаНач);
Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода);
Запрос.УложитьСписокОбъектов(ВыбПроект,"#ВыбПроект","Проекты");
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
 



Валится с ошибкой даже не видел таких )))
FAILED! ICommandText::Execute(): Invalid path or file name.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #4 - 07. Апреля 2010 :: 05:21
Печать  
Нафига тогда регистр там сдался ?...
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #5 - 07. Апреля 2010 :: 05:30
Печать  
Хороший вопрос )

Регистр выкинул.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #6 - 07. Апреля 2010 :: 05:37
Печать  
n0_0ne писал(а) 07. Апреля 2010 :: 05:20:
Валится с ошибкой даже не видел таких )))
FAILED! ICommandText::Execute(): Invalid path or file name.


Ты это , внимательнее смотри, что тебе пишут то хоть..
на модификаторы у даты, на имя временной таблички и т.д..
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #7 - 07. Апреля 2010 :: 06:03
Печать  
Eprst
Большое спасибо, действительно запутал SQL и DBF все работает все хорошо! А про прямые запросы действительно весч, надо попробывать )

Ток не подскажешь почему после укладки во временную таблицу, не хочет делать выборку если проект выбран не сам объект, а папка?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #8 - 07. Апреля 2010 :: 06:24
Печать  
вот так можешь делать:

WHERE Жур.$ОбщийРеквизит.Проект IN (SELECT val FROM :ВыбПроект)



врГруппа="";
Запрос.УложитьСписокОбъектов(ВыбПроект, врГруппа,"Проекты");
Запрос.УстановитьТекстовыйПараметр("ВыбПроект", врГруппа);
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #9 - 07. Апреля 2010 :: 06:46
Печать  
хм вроде тоже самое писал, ток не дописал третье условие.
Такие запросы транзакцию в ДБФ уберают?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #10 - 07. Апреля 2010 :: 06:52
Печать  
вот так можно писать перед выполнением запроса
Код
Выбрать все
гЗапрос = глОлеДБ.СоздатьКоманду();
гЗапрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
// Устанавливаем время ожидания захвата таблиц , если во время выполнения запроса кто то проводит документы
// Очень полезная функция - аналогична времени ожидания в 1С
гЗапрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
// Убираем буфепизацию, чтобы данные возвращаемые запросам всегда были актуальны

гЗапрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
гЗапрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");// отключили блокировки  



Для выполнения фокс -запросов в монопольном режиме, нужен либо провайдер от Uzhast http://uzhast.fatal.ru/vfpoledb/
Либо патч от hogik
http://www.infostart.ru/public/16268/
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #11 - 07. Апреля 2010 :: 07:14
Печать  
Патчиная дллка провайдера стоит. Просто сейчас делал тест, человек запустил отчет обычный еще один человек запустил отчет обычный и я запустил отчет через ODBC, он делался в место 22 секунд полторы минуты, и дважды выскакивало сообщение ожидание захвата таблицы.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #12 - 07. Апреля 2010 :: 07:20
Печать  
Через ODBC ?
используй фоксовый провайдер, + то что выше.. там "грязное" чтение..
+ используй индексы, ежели фокс используешь
http://www.1cpp.ru/forum/YaBB.pl?num=1184317705

Или пиши на 1sqlite - там не надо заботится о попадании в индекс..
  
Наверх
 
IP записан
 
n0_0ne
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 02. Марта 2009
Re: Перешл с SQL на DBF как быть с запросом
Ответ #13 - 07. Апреля 2010 :: 07:53
Печать  
Прости, OLEDB.

С индексами чет не вкурю пока, не хочет заводится, из примера с той темы пишет ошибку  ICommandText::Execute(): Command contains unrecognized phrase/keyword. Курю дальше )

Выкурил ) Ускорения обещенного не увидел, как делался 22 сек так и делается. С индексами т.д.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перешл с SQL на DBF как быть с запросом
Ответ #14 - 07. Апреля 2010 :: 08:03
Печать  
это ошибка в синтаксисе.. скобочка там не там, например, зпт не хватает или лишняя и т.д..
Пользуйся Отладка(1)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать