Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 09:03   #1
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию Не сохраняются изменения, внесённые через TZUpdateSQL

В программе есть компонент TZQuery, которому задан комплексный запрос (к главной таблице - назовём её таблица А- через INNER JOIN подключена ещё одна - для отображения одного очень нужного поля из таблицы Б).
И у этого же компонента есть одно LookUp-поле связанное по ключу (пусть его имя будет ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В) с таблицей В. Естественно, я не могу просто так выбрав нужное мне значение из LookUp-списка изменить ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В, потому что у меня комплексный запрос.
Поэтому к компоненту TZQuery через св-во UpdateObject я подключаю компонент TZUpdateSQL, которому прописываю ModifySQL.
В запросе для ModifySQL пишу примерно такой запрос:
Код:
UPDATE ТАБЛИЦА_А SET ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В = :ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В
WHERE ТАБЛИЦА_А_ID_ = :OLD_ТАБЛИЦА_А_ID
То есть - ничего сложного. Но тем не менее, хотя после выбора нужного мне значения из LookUp-списка не возникает никаких ошибок, и это значение нормально отображается в гриде, это значение не заносится в таблицу. В итоге, при обновлении набора данных имеем старое значение ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В.

Собственно, вопрос: что я делаю не так, или чего я не делаю для того, что бы изменения значения поля ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В попадали в таблицу А?

P.S.
СУБД - firebird-2.1., AutoCommit (у TZConnection) равен True, CachedUpdates у TZQuery равен False.
События OnBeforeModify и OnAfterModify возникают как положено.

Последний раз редактировалось Greek9000; 22.10.2010 в 09:18.
Greek9000 вне форума Ответить с цитированием
Старый 22.10.2010, 10:50   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Оказалось, что ошибка в запросе:
Было так:
Код:
UPDATE ТАБЛИЦА_А SET ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В = :ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В
WHERE ТАБЛИЦА_А_ID_ = :OLD_ТАБЛИЦА_А_ID
А должно было быть так:
Код:
UPDATE ТАБЛИЦА_А SET ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В = :ВНЕШНИЙ_КЛЮЧ_ДЛЯ_В
WHERE ТАБЛИЦА_А_ID_ = :OLD_ТАБЛИЦА_А_ID_
Косяк был в том, что система не выдавала ошибки, когда находила несуществующее поле :OLD_ТАБЛИЦА_А_ID. С чем это связано я не знаю, но можетбыть знание этого факта кому-нибудь пригодится.
Greek9000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Введенные данные в DBGridEh не сохраняются prorock БД в Delphi 11 21.04.2011 13:35
Удаление и изменения записей из БД через клинт atemic1 БД в Delphi 10 26.09.2010 22:49
Не сохраняются checkBox-ы в базе Alekcey БД в Delphi 2 18.08.2010 09:34
не сохраняются изменения в таблице pobedin БД в Delphi 16 14.07.2010 16:14
Данные не сохраняются Шляп Microsoft Office Access 2 23.05.2010 18:58


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS