Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Update запрос / 14 сообщений из 14, страница 1 из 1
11.02.2003, 14:29
    #32104553
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Голова запарилась мысли не прут... поможите!!!!!

общее описание проблемы:
есть две таблички надо сложить поле для всех записей совпадающих по определённым признакам и проапдейтить одну из таблиц.

сделано:
Вот этот запрос
Код: plaintext
1.
2.
3.
SELECT (SumLen.Len+ChargeOfThread.Quanty) AS Len, ChargeOfThread.ID
FROM ChargeOfThread RIGHT JOIN SumLen ON ChargeOfThread.Thread_ID = SumLen.Thread_ID
WHERE (((ChargeOfThread.Variant)= 2 ) AND ((ChargeOfThread.Model)= "A004-1 ") AND ((ChargeOfThread.M_Calc)=True));

всё выбирает и складывает, НО на апдейте я выдохся...

неразрешённая проблема:
как заменить ChargeOfThread.Quanty для соответствующих ChargeOfThread.ID (однозначно определяет строку) на Len из данного запроса?
Было бы шикарно если б это можно было бы объеденить с предыдущим запросом, если не получиться эт тож ни чего, лишь бы проапдейтить.

P.S. удалять строки существующие строки незя.

С уважением
Sfagnum
...
Рейтинг: 0 / 0
11.02.2003, 14:42
    #32104568
MixaCh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
А так не катит?!?!?

Код: plaintext
1.
2.
3.
Update ChargeOfThread
Set ChargeOfThread.Quanty = (iif(IsNull(SumLen.Len),  0 , SumLen.Len) + ChargeOfThread.Quanty) 
FROM ChargeOfThread RIGHT JOIN SumLen ON ChargeOfThread.Thread_ID = SumLen.Thread_ID
WHERE (((ChargeOfThread.Variant)= 2 ) AND ((ChargeOfThread.Model)= "A004-1 ") AND ((ChargeOfThread.M_Calc)=True));


Можно еще IsNull'нуть второй параметр суммы....
...
Рейтинг: 0 / 0
11.02.2003, 14:53
    #32104582
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
To MixaCh:
Похоже Вы пропустили SELECT.
А также не производится сумирование :(
И ещё что мне... ну не ндравиться... это то что обрабатываються все записи - а хотелось бы тока конкретные.
...
Рейтинг: 0 / 0
11.02.2003, 15:07
    #32104606
MixaCh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Да вроде как не пропустил - какой-же Select в Update?!?!?!?

Хотя может в Access синтаксисе и есть - как правило строю Access запросы через грид - а синтаксис и него какой-то корявый, не привычный...

2. Если надо суммирование (не помню, можно ли в одном - по-моему нет), то можно как - оставить первый запрос без изменения (только добавить суммирование) - на его основе написать второй - в котором уже и Update, соединяя с отобранным запросом на суммирование...

3. А обновляет он только те записи, какие у Вас по Where проходят - я же ничего не добавлял и не удалял из написанных Вами условий - не понятно Ваше "фи"?!?
...
Рейтинг: 0 / 0
11.02.2003, 15:20
    #32104620
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Дело в том что AccEss матюгается на предложенный Вами запрос ему в нём чего то не хватает, я предположил что он не принимает FROM без SELECT, после его добавления получилась выше описанная ерунда.
так что ни каких таких 'фи':)

Если Вас не затруднит, не могли бы Вы привести 2 вариант, из Вами выше перечисленных, в коде.
Буду очень Вам благодарен, т.к. не хватает составить запрос при котором согласовались бы ID запроса и таблички.
...
Рейтинг: 0 / 0
11.02.2003, 15:54
    #32104651
MixaCh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Что-то типа...

Запрос 1:

Код: plaintext
1.
2.
SELECT Temp_Reports_Gurnal_End.Номер, Sum(Temp_Reports_Gurnal.Summa) AS [Sum-Summa]
FROM Temp_Reports_Gurnal RIGHT JOIN Temp_Reports_Gurnal_End ON Temp_Reports_Gurnal.Prov_Id = Temp_Reports_Gurnal_End.Номер
GROUP BY Temp_Reports_Gurnal_End.Номер;


Запрос 2, на основании 1:

Код: plaintext
1.
UPDATE Temp_Reports_Gurnal_End INNER JOIN Запрос1 ON [Temp_Reports_Gurnal_End].[Номер]=[Запрос1].[Номер] 
SET Temp_Reports_Gurnal_End.[ 1901  Вх сальдо Дт] = [Запрос1].[Sum-Summa];


Ну и в первый запрос - все нужные ограничения (чтобы не обновлял все записи....)

Прошу прошения, что на своих табличках, но думаю будет понятно...

И вообще - пользуйтесь построителем - он все нормально строит, а писать эти InerJoin'ы ..... ужас....
Лучше уж where....
...
Рейтинг: 0 / 0
11.02.2003, 16:12
    #32104674
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
В том то вся и проблема что запрос составленный в конструкторе не пашет кричит типа: Operation must use an updatable query

я использовал в качестве 1го запроса - запрос приведённый в первом посте и обозвал его UpdateVal по аналогии построил 2ой получилось:
Код: plaintext
UPDATE ChargeOfThread INNER JOIN UpdateVal ON ChargeOfThread.ID = UpdateVal.ID SET ChargeOfThread.Quanty = [UpdateVal].[Len];

В принципе AccEss генерит такой же запрос в конструкторе.

Насчёт Where полностью согласен, но в данном случае это не приемлемо, т.к. для каждого ID значения разные, по крайней мере я так это понимаю.
...
Рейтинг: 0 / 0
11.02.2003, 16:17
    #32104678
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Вообще всё это безобразие легко реализовать через recordset, но очень уж не хочеться делать это... не люблю я их.
...
Рейтинг: 0 / 0
11.02.2003, 16:33
    #32104688
MixaCh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Извиняюсь, что увел по неверному пути - давно не сталкивался с этими г.. запросами на обновление в Access'е - стараюсь через сервер...

Почему так работает - одному богу известно - настольная БД, видимо...

Здесь откопал в хелпе..... надеюсь что поможет....

Возвращается сообщение о необходимости использовать запрос, допускающий обновление
Такая ошибка возникает, если ячейка строки Обновление включает поле из перекрестного запроса или из запроса на выборку, в котором для этого поля выполняется расчет статистических (итоговых) значений (такие расчеты задаются либо в строке Групповая операция, либо с помощью статистической функции по подмножеству, введенной в строку Поле). Для того чтобы выполнить обновление для поля, участвующего в групповой операции, следует выполнить статистические расчеты в запросе на обновление, а не в другом запросе.

В текущем запросе в режиме конструктора удалите поле, добавленное из перекрестного запроса или из запроса на выборку (в котором для этого поля определен расчет статистической функции).


Введите в ячейку строки Обновление нужного поля статистическую функцию по подмножеству, выполняющую ту же операцию, которая выполнялась для этого поля в запросе на выборку или в перекрестном запросе.
Например, если в таблице «Товары» имеется вычисляемое поле «Сумма продаж», можно обновить его до произведения полей «Количество» и «Цена» из таблицы «Заказано», для чего следует ввести в бланке запроса на обновление следующее выражение в ячейку строки Обновление в столбце этого поля:

DSum("[Количество]*[Цена]","Заказано","[КодТовара]=" & [КодТовара])
...
Рейтинг: 0 / 0
11.02.2003, 16:51
    #32104704
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Насколько я понял данную цитату - то я должон обьедянить эти два запроса в один - фантазии не хватает => хелп!!!!
второй вариант записывать результа в таблицу и оттуда апдейтить - реализовал.

Но хочеться шоб красиво былО в один запросик хелп!!!

как объеденить привдённые ниже два запроса

UpdateVal :
Код: plaintext
1.
2.
SELECT (SumLen.Len+ChargeOfThread.Quanty) AS Len, ChargeOfThread.ID
FROM ChargeOfThread RIGHT JOIN SumLen ON ChargeOfThread.Thread_ID = SumLen.Thread_ID
WHERE (((ChargeOfThread.Variant)= 2 ) AND ((ChargeOfThread.Model)= "A004-1 ") AND ((ChargeOfThread.M_Calc)=True));

и
Код: plaintext
1.
UPDATE ChargeOfThread INNER JOIN UpdateVal ON ChargeOfThread.ID = UpdateVal.ID
SET ChargeOfThread.Quanty = [UpdateVal].[Len];
...
Рейтинг: 0 / 0
11.02.2003, 19:39
    #32104790
MixaCh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Не знаю как помочь.... вобщем пас....

Если получилось через RecordSet - пусть лучше будет так...

Access как упрямый осел - если уж что не захочет делать, то уж не захочет....

Че ему не обновляется - логикой вешей я объяснить не могу - ну просто не хочет он, в лом......
...
Рейтинг: 0 / 0
12.02.2003, 19:09
    #32105391
Sfag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
Всё равно спасибо.
Я сделаю через скидывание в таблицу.
Не люблю я recordset'ы....
...
Рейтинг: 0 / 0
21.02.2003, 14:23
    #32109896
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
проверено:

UPDATE ChargeOfThread LEFT JOIN SumLen
ON ChargeOfThread.Thread_ID = SumLen.Thread_ID
SET ChargeOfThread.Quanty = ([SumLen].[Len]+[ChargeOfThread].[Quanty])
WHERE ((ChargeOfThread.Variant=2) AND (ChargeOfThread.Model="A004-1")
AND (ChargeOfThread.M_Calc=True));
...
Рейтинг: 0 / 0
21.02.2003, 14:26
    #32109901
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update запрос
так же как и (простите, перепутал RIGHT JOIN с LEFT JOIN)

UPDATE ChargeOfThread RIGHT JOIN SumLen ON ChargeOfThread.Thread_ID = SumLen.Thread_ID SET ChargeOfThread.Quanty = ([SumLen].[Len]+[ChargeOfThread].[Quanty])
WHERE ((ChargeOfThread.Variant=2) AND (ChargeOfThread.Model="A004-1") AND (ChargeOfThread.M_Calc=True));
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Update запрос / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]