Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема запроса [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).


Наверх

Титульная страница Поиск, карта сайта Написать письмо