Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 10: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 в 10:18.
Greek9000 вне форума Ответить с цитированием
Старый 22.10.2010, 11:50   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

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

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


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