Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) и снова Update (число прочтений - 3853 )
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
и снова Update
02. Марта 2009 :: 09:38
Печать  
Продолжаю биться. Начальные данные:
база ДБФ, (VFP OLE DB provider v9)
Версия 1cpp 3.0.1.22

в таком варианте условие не работало, и Выбзначение писалось во все записи таблицы:

Код
Выбрать все
Update sc133
Set sp124=:ВыбЗначение
from sc133 as Спр
where
Спр.ID=:ВыбЭлемент
 



проблему удалось решить, переписав текст:

Код
Выбрать все
Update sc133
Set sp124=:ВыбЗначение
where
ID=:ВыбЭлемент
 



Теперь усложняю картину:

Код
Выбрать все
Update $Справочник.Контрагенты
Set $Справочник.Контрагенты.НаименованиеБанка=СпрБанки.Descr
from $Справочник.Контрагенты as Спр
inner join $Справочник.Банки СпрБанки on Спр.id=$Спр.Банк
where
 



и далее - если пишу ID=:ВыбЭлемент

при ВыполнитьИнструкцию ругается примерно так - поле не уникально

а если Спр.ID=:ВыбЭлемент
- ошибок нет, но фильтр не действует.

Вопрос возникает следующий - можно ли записывать в поле таблицы различные значения, в зависимости от связанных таблиц, и как это написать ?
Помогите, кто работал с OleDb
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: и снова Update
Ответ #1 - 02. Марта 2009 :: 10:08
Печать  
Код
Выбрать все
Update sc133
Set sc133.sp124=СпрБанки.Descr
from  $Справочник.Банки СпрБанки on СпрБанки .id=sc133.Sp123
where
(sc133.ID=:ВыбЭлемент)

 


Sp123 - рекв банк sc133

Если таблица в Update, то ее не надо в From (она уже в Update задана)
Из документации :
Цитата:
UPDATE MyProductsList
SET MyProductsList.in_stock = MyUpdateTable.prod_unit
FROM MyUpdateTable
WHERE MyProductsList.prod_name = "Chai"


P.S> как метапарсер работает
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: и снова Update
Ответ #2 - 02. Марта 2009 :: 10:14
Печать  
Кстати
Код
Выбрать все
inner join $Справочник.Банки СпрБанки on Спр.id=$Спр.Банк
 



видимо ошибка
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #3 - 02. Марта 2009 :: 10:17
Печать  
попробую так, м.получтся

а в этом примере не понял, где соединение таблиц,
т.е. значение prod_unit какой записи из MyUpdateTable?

Цитата:
UPDATE MyProductsList
SET MyProductsList.in_stock = MyUpdateTable.prod_unit
FROM MyUpdateTable
WHERE MyProductsList.prod_name = "Chai"


  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #4 - 02. Марта 2009 :: 10:18
Печать  
да, естественно

Код
Выбрать все
inner join $Справочник.Банки СпрБанки on СпрБанки.id=$Спр.Банк
 



писал код по памяти, извиняюсь
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: и снова Update
Ответ #5 - 02. Марта 2009 :: 10:23
Печать  
Попробуй
Код
Выбрать все
Update sc133
Set sc133.sp124=СпрБанки.Descr
from  $Справочник.Банки СпрБанки on СпрБанки .id=sc133.Sp123
where
(sc133.ID=:ВыбЭлемент)
 


Только вместо Sp123 подставь реквизит (какое там Sp.. в DD) банк спр SC33
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #6 - 02. Марта 2009 :: 11:14
Печать  
на
Код
Выбрать все
Update sc133
Set sc133.sp124=СпрБанки.Descr
from  $Справочник.Банки СпрБанки on СпрБанки .id=sc133.Sp123
where
(sc133.ID=:ВыбЭлемент)
 



ругается на синтаксис

в итоге заработало так:

Код
Выбрать все
	update
	sc133
	set sp27894=СпрРС.sp159
	from sc133 СпрК
	inner join sc174 СпрРС on СпрРС.ParentExt=СпрК.id
	where
	sc133.id=:ВыбЭлемент
 



))
причем, если написать

Код
Выбрать все
	where
	СпрК.id=:ВыбЭлемент
 



то пишется во все поля sc133, невзирая на фильтр

в общем, алиас специфично объявляется и воспринимается потом
  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #7 - 02. Марта 2009 :: 11:19
Печать  
kiruha спасибо за участие )
  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #8 - 02. Марта 2009 :: 11:32
Печать  
если резюмировать, то получается следующее

Код
Выбрать все
	update
	sc133
	set sp27894=$СпрРС.Номер
	from sc133 СпрК
	inner join $Справочник.РасчетныеСчета СпрРС on СпрРС.ParentExt=sc133.id
	where
	sc133.id=:ВыбЭлемент
 



алиас СпрК не воспринимается ни в соединении "ON" (в поле пишется произвольное значение),
ни в условии "WHERE" (пишется во все поля таблицы)

но если не писать
     from sc133 СпрК
то при применении "INNER JOIN" выдает ошибку синтаксиса

алиас СпрРС воспринимается нормально
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: и снова Update
Ответ #9 - 02. Марта 2009 :: 11:43
Печать  
Не пойму, зачем СпрК
Так работает : ?
Код
Выбрать все
update
	sc133
	set sp27894=$СпрРС.Номер
	from  $Справочник.РасчетныеСчета СпрРС on СпрРС.ParentExt=sc133.id
	where
	sc133.id=:ВыбЭлемент
 


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


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #10 - 02. Марта 2009 :: 11:54
Печать  
нет, так не работает. Ошибка синтаксиса
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: и снова Update
Ответ #11 - 02. Марта 2009 :: 12:27
Печать  
Так у меня работает
Код
Выбрать все
update
	СпрК
	set СпрК.sp27894=$СпрРС.Номер
	from sc133 СпрК
	inner join $Справочник.РасчетныеСчета СпрРС on СпрРС.ParentExt=СпрК.id
	where
	СпрК.id=:ВыбЭлемент

 



Соответственно можно полноценно использовать метапарсер
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #12 - 02. Марта 2009 :: 12:29
Печать  
какая версия 1cpp ?

на VFP OLE DB provider v9 ??
  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: и снова Update
Ответ #13 - 02. Марта 2009 :: 12:38
Печать  
да, действительно, твоя правда!
если именно писать
update СпрК ...

то все с этим алиасом отрабатывает нормально.
Мда, много написал по этому поводу, а все оказалось забавно просто

  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: и снова Update
Ответ #14 - 02. Марта 2009 :: 22:30
Печать  
Можно просто было нажать F1 в QA и набрать Update Улыбка
  

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