Запрос на Update

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Ответить
Akella
Сообщения: 210
Зарегистрирован: Пн 02 апр 2012 14:41

Запрос на Update

Сообщение Akella » Пн 25 июн 2012 07:33

Может быть я не совсем понимаю чего-то. Поправьте меня.
Проблема с обновлением.
При обновлении ошибок нет, но и значения полей не меняются. Т.е. после переоткрытия таблицы вижу старые значения.

Запрос на Select (из двух разных баз данных - гетерогенный):
Основная база kvartal_ekr и kvartal_prem это вторая база, из которой берутся данные для расчетов.

Код: Выделить всё

SELECT u.id
     , u.fio
     , u.login
     , u.id_brigadir
     , u.plus_sum_premier
     , u.prepayment_premier
     , sum(if(dayofweek(d.date_out) = 2, if(a.paid = 0, v.price_d, 0), if(a.paid = 0, v.price, 0))) AS sum_free
     , sum(if(dayofweek(d.date_out) = 2, if(a.paid = 1, v.price_d, 0), if(a.paid = 1, v.price, 0))) AS sum_paid
     , count(o.id) AS ex_count
     , (
       CASE count(o.id)
       WHEN 0 THEN
         20.4
       WHEN 1 THEN
         25.5
       WHEN 2 THEN
         30.6
       ELSE
         35.7
       END) AS sum_default

FROM
  kvartal_ekr.users u

LEFT JOIN kvartal_prem.ads a
ON (u.id = a.id_user_ekr)

LEFT JOIN kvartal_prem.datas d
ON (d.id_ads = a.id)

LEFT JOIN kvartal_prem.vid v
ON (v.id = a.vid AND v.deleted = 0 /*&dt_start &dt_end*/)

LEFT JOIN kvartal_ekr.object_n o
ON (o.id_infosource_exclusive = u.id AND o.is_deleted = 0)


WHERE
  u.is_deleted = 0
  AND u.is_blocked = 0
GROUP BY
  1

запрос на Insert и Delete (чтобы компонента не генерировала сама запрос):
Затем с помощью SQL generator сгенерировал и отредактировал запрос на Update:

Код: Выделить всё

UPDATE users /* пробовал и так: kvartal_ekr.users*/
SET
  plus_sum_premier = :plus_sum_premier, prepayment_premier = :prepayment_premier
WHERE
  id = :Old_id

У TUniQuery установлены свойства:
KeyFields := 'id';
UpdateTable := 'users';

UniDAC 4.1.6 for Delphi XE2

bork
Devart Team
Сообщения: 16
Зарегистрирован: Вт 06 сен 2011 09:22

Re: Запрос на Update

Сообщение bork » Пн 25 июн 2012 13:41

Добрый день

Возможно, у вас свойство CachedUpdates установлено в True. Если это свойство включено, то данные будут записаны в базу данных только после вызова ApplyUpdates или CommitUpdates.

Если нет, то попробуйте подключить юнит UniDacVCL и установить свойство Debug у вашего TUniQuery в True. После этих действий вы должны увидеть какой запрос и с какими значениями параметров выполняется при попытке обновить запись (если выполняется вообще). Без этой информации сложно определить причину, по которой данные не записываются в БД.

Akella
Сообщения: 210
Зарегистрирован: Пн 02 апр 2012 14:41

Re: Запрос на Update

Сообщение Akella » Пн 25 июн 2012 14:58

Спасибо. Действительно, дело было в CachedUpdates. Никогда не использовал CachedUpdates, поэтому даже не обращал внимание значение этого свойство. А включил его, наверное, чисто случайно.

Ответить