Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Update в драйвере Visual FoxPro поддерживает where ? (число прочтений - 2918 )
sacred
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 27. Апреля 2012
Пол: Мужской
Update в драйвере Visual FoxPro поддерживает where ?
27. Апреля 2012 :: 15:57
Печать  
Запускаю такой запрос (в консоли):
UPDATE
     1sjourn
SET
     ismark='*', closed=0

FROM 1sjourn as ЖД
WHERE
       ЖД.date <= CTOD('02/29/08') and ЖД.closed <> 3

Или с таким условием:
WHERE ЖД.iddoc in (SELECT Iddoc FROM 1sjourn WHERE date <= CTOD('02/29/08') and closed <> 3 )

Ошибок не выдаёт, но помечает на удаление ВСЕ документы.
Если update заменить на select отрабатывает верно, условие срабатывает. Вопрос: как решить задачу с пометкой на удаление прямым запросом в по заданным условиям? База, как вы догадались DBF. Драйвер VisualFoxPro OLEDB Provider 9.0
1c++ 3.2.3.16 2010 года выпуска.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #1 - 27. Апреля 2012 :: 16:44
Печать  
     
Код
Выбрать все
	Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Exclusive=Yes;Mode=ReadWrite;Collating Sequence=MACHINE";
	ДБ = СоздатьОбъект("OLEDBData");
	Рез = ДБ.Соединение(Соединение);
	Запрос = ДБ.СоздатьКоманду();
	Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
	Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");	Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
	Запрос = ДБ.СоздатьКоманду();

	стр ="
	|update
	|   1sjourn
	|set
	|  ismark ='*'
	|  ,closed = 0
	|  ,actcnt = '     0'";

	Для к=1 По Метаданные.Регистр() Цикл
		стр=стр+"
		| ,$ФлагРегистра."+Метаданные.Регистр(к).Идентификатор+" = 0";
	КонецЦикла;
	Для к=1 По Метаданные.Последовательность() Цикл
		стр=стр+"
		| ,$Последовательность."+Метаданные.Последовательность(к).Идентификатор+" = 0";
	КонецЦикла;
	стр=стр+" where
	|--iddocdef not in ($Виддокумента.ВводВЭксплуатациюОС,$Виддокумента.МодернизацияОС)
	|
	|--and
		     |dtos(date)+time+iddoc between (dtos(:НачДата~~)+'	'+'	   ')  and  (dtos(:КонДата~~)+'ZZZZZZ' + 'ZZZZZZZZZ')";

	Запрос.УстановитьТекстовыйПараметр("НачДата", '01.01.80');
	Запрос.УстановитьТекстовыйПараметр("КонДата", ВыбДата);

	Если Запрос.ВыполнитьИнструкцию(стр) = 0 Тогда
		Сообщить("update 1SJOURN","!!!");
	КонецЕсли; 

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


1C++ rocks!

Сообщений: 10
Зарегистрирован: 27. Апреля 2012
Пол: Мужской
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #2 - 27. Апреля 2012 :: 19:24
Печать  
Огромное спасибо!
Написал так:
UPDATE   1sjourn
SET   ismark='*', closed=0
WHERE
dtos(date)+time+iddoc
between (dtos({d'1753-01-01'})+'      '+'         ')  
and  (dtos(:ДатаСвёртки~~)+'ZZZZZZ' + 'ZZZZZZZZZ')

Отработало на ура.
Остался только один вопрос, а в чём же ошибка первого запроса? Чтобы в будущем её не повторить. Особенно смущает, что в конструкции SELECT то условие из первого запроса отрабатывает корректно...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #3 - 28. Апреля 2012 :: 10:20
Печать  
замени CTOD в первом запросе + выкини алиясы на табличку журнала - заработает.
+ в моем запросе отбор будет по индексу date_time_iddoc  что горазд быстрее.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #4 - 28. Апреля 2012 :: 10:22
Печать  
+ на счет "пустой" даты dtos({d'1753-01-01'}) тоже не уверен - це же не скуль, там нет 1753, достаточно просто 80 год
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #5 - 28. Апреля 2012 :: 12:07
Печать  
sacred писал(а) 27. Апреля 2012 :: 19:24:
Остался только один вопрос, а в чём же ошибка первого запроса? Чтобы в будущем её не повторить.
Ошибка проста - при обновлении не должно быть FROM.
А WHERE и при выборке и при обновлении работает одинаково.
  
Наверх
 
IP записан
 
sacred
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 27. Апреля 2012
Пол: Мужской
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #6 - 28. Апреля 2012 :: 12:12
Печать  
Dmitry The Wing писал(а) 28. Апреля 2012 :: 12:07:
Ошибка проста - при обновлении не должно быть FROM.
Спасибо огромное! Какой, блин, нехороший драйвер фокса! И ведь не ругается на FROM, а просто лепит какую-то отсебятину. Мне-то FROM был нужен для соединений, это уж упрощённый кусок запроса. Ладно, ясно буду лепить подзапрос в секции WHERE.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #7 - 28. Апреля 2012 :: 13:20
Печать  
Dmitry The Wing писал(а) 28. Апреля 2012 :: 12:07:
sacred писал(а) 27. Апреля 2012 :: 19:24:
Остался только один вопрос, а в чём же ошибка первого запроса? Чтобы в будущем её не повторить.
Ошибка проста - при обновлении не должно быть FROM.
А WHERE и при выборке и при обновлении работает одинаково.


Нифига подобного!
С from всё прекрасно работает, как собственно и описано в bol

У автора ошибка в алиясах - либо их не писать совсем, либо писать иак :

UPDATE
     Журнальчик
SET
     Журнальчик.ismark='*',Журнальчик. closed=0

FROM 1sjourn  Журнальчик
WHERE
      Журнальчик.date <= :ВыбДата~~ and Журнальчик.closed <> 3


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


1C++ rocks!

Сообщений: 10
Зарегистрирован: 27. Апреля 2012
Пол: Мужской
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #8 - 28. Апреля 2012 :: 21:13
Печать  
Eprst писал(а) 28. Апреля 2012 :: 13:20:
С from всё прекрасно работает, как собственно и описано в bol

Действительно, работает и так.
Просто изначально у меня ещё join были в  from и когда я использовал алиас в update - была ошибка типа "too complex".
В общем ясно, спасибо за науку.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #9 - 02. Мая 2012 :: 09:28
Печать  
и с join тоже будет всё работать.
  
Наверх
 
IP записан
 
sacred
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 27. Апреля 2012
Пол: Мужской
Re: Update в драйвере Visual FoxPro поддерживает where ?
Ответ #10 - 06. Мая 2012 :: 16:26
Печать  
С join пришлось написать подзапрос, а в основном запросе поставить условие where iddoc in (select .... и тут уже join)
Иначе ругалось на "too complex"
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать