![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема запроса [D7, Access]
VadimSpb © (2005-11-24 10:42:00)Суть вопроса:
Запрос идет из Д7 в базу Аccess. Есть Табл.1 с полем ID, которое соответствует напр. стоимости услуги в Табл2. В Табл.2 Есть такой же ID с названием услуги и ее стоимостью. Также в Табл.1 есть поле Сумма. Нажимаем на кнопку в Д7 и увеличиваем значение в поле Сумма для:
1. Всех клиентов
2. Выбранных по какому-то критерию (пол и т.д.)
Проблема вроде не сложна, но Access не поддерживает скалярные запросы!
VadimSpb (2005-11-24 13:52:00) [1]Спасибо, все замечательно работает [8]
msguns (2005-11-24 12:20:00) [2]Прошу прощения, в [5] вместо
позволительно указывать после Update не только целевую (где будут изменения) таблицу, но и через запятую другую таблицу (ы), данные из которой(ых) будут участвовать в обновлении.
следует читать:
позволительно указывать после Update не только целевую (где будут изменения) таблицу, но и через JOINдругую таблицу (ы), данные из которой(ых) будут участвовать в обновлении.
Sergey13 (2005-11-24 12:15:00) [3]2 [6] ANB © (24.11.05 12:09)
> Так и в оракле не всегда проходит.
При связи 1:1 всегда проходит. Да и не давал я кода. Я спрашивал про принцып.
msguns (2005-11-24 12:15:00) [4]Пример "связанного" апдэйта
UPDATE FONDSR AS R
INNER JOIN Fonds IN 'e:\DMsArch\FondsCmp\AlexDB\Data.mdb' AS TA
ON (R.Letter=TA.Letter) AND (R.FondNumber=TA.FondNumber) AND
(R.FondType=TA.FondType) AND (R.Category=TA.Category)
SET R.FLT = 0, R.FLA = 1, R.AFID = TA.FID, R.AArcID = TA.ArcID,
R.ACountry = TA.Country, R.ASDate = TA.StartDate, R.AEDate = TA.EndDate,
R.AFSize = TA.FondSize, R.AQDI = TA.DontInvent,
R.AQMF = TA.Microfished, R.AQS = Secret, R.AAvl = TA.Availability,
R.APassT = TA.PassTo, R.APassL = TA.PassLette, R.APassN = TA.PassNumber,
R.AJoinL = TA.JoinLetter, R.AJoinN = TA.JoinNumber, R.AUtil = TA.UtilDate,
R.ALossId = TA.LossCauseId, R.ALossDt = TA.LossDate, R.ALossDc = TA.LossDoc;
ANB (2005-11-24 12:09:00) [5]
> Т.е.
> Update Table1 set F1=(select F2 from Table2 where Table1.
> Id=Table2.id)
> не проходит?
Так и в оракле не всегда проходит.
msguns (2005-11-24 12:07:00) [6]>VadimSpb (24.11.05 11:40) [3]
>Попробую иначе.
>Как запросом изменить числовое значение в одной таблице путем суммирования его со значением из другой таблицы. Access не поддерживает подзапросы в предложении SET в команде Update.
Вот, уже лучше.
Для подобных "штучек" используются связки. Кроме того, в акцесе позволительно указывать после Update не только целевую (где будут изменения) таблицу, но и через запятую другую таблицу (ы), данные из которой(ых) будут участвовать в обновлении.
Sergey13 (2005-11-24 11:43:00) [7]Т.е.
Update Table1 set F1=(select F2 from Table2 where Table1.Id=Table2.id)
не проходит?
VadimSpb (2005-11-24 11:40:00) [8]Попробую иначе.
Как запросом изменить числовое значение в одной таблице путем суммирования его со значением из другой таблицы. Access не поддерживает подзапросы в предложении SET в команде Update.
msguns (2005-11-24 11:07:00) [9]А можно все тоже самое, только не на клоунском языке ?
Sergey13 (2005-11-24 10:59:00) [10]Эх и путанно ты объясняешь, ИМХО. Попробуй попроще.
Вообще записи изменяются командой Update у которой могут быть а могут и не быть условия применения (кляуза Where).