-
> Sergey13
Поле CUST_ID заполняется через DBLookupComboBox в модальной форме
-
А ты это значение получаешь на клиенте?
-
> [0] Степан (05.02.10 07:09) > Поля таблицы orders обновляются, а cust.name - нет.
А после переоткрытия датасета или перезапуска программы все поля видны нормально?
> [19] Степан (05.02.10 11:40) > Поле CUST_ID заполнено Пока это только твое мнение. Код жалко выложить?
-
> Степан (05.02.10 11:40) [19]
Хорошо, сомнения правда развеяли не полностью Где он его задает? Каким образом - подробней , как это задали, как это сделали? И еще CashedUpdate чему равно?
-
> Виталий Панасенко(дом)
пробовал любой способ получения значения, результат тотже
> Sergey13
пере открытие модальной формы IBDataset1.Append; при закрыти with IBDataSet1 do if Modified then Post;
когда в модальной форме в DBLoopkupComboBox выбираешь значение, то на главной форме в DBGrid оно сразу отображается
Пре переоткрытии IBDataset все обновляется, оно и понятно работает SQLSelect, но это плохое решение проблемы
-
> Степан (05.02.10 11:51) [24]
Любой - это уже не правильно для данного случая. Надо получать на клиенте. ID должен быть известен до того как произойдет реальная вставка для твоего случая.
В каком виде сейчас RefreshSQL? И что ответишь на вопрос > Sergey13 © (05.02.10 11:44) [22]
> А после переоткрытия датасета или перезапуска программы > все поля видны нормально?
-
И еще интересует поле CachedUpdates.
А так кроме того - приведи значения всех полей записи после INSERT - тоже интересно глянуть
-
> пере открытие модальной формы > IBDataset1.Append; > при закрыти > with IBDataSet1 do if Modified then Post;
А если юзер открыл форму ошибочно ? Или, не дай бог, открыл, ушел в сортир и не вернулся оттуда ?)
-
> Сергей М.
1) я опускаю подробности, которые к делу не относятся
Если нужно подробно:
на модальной форме две кнопки ОК(mrOK) и Отмена(mrCancel), при закрытии формы обработка ModalResult: = mrOK -> Post, = не mrOK -> Cancel
2) Обновления не кэшируются, CachedUpdates = False
3) RefreshSQL = select ord.id, ord.date_reg, ord.summa, ord.cust_id, cust.name from orders ord, customers cust where cust.id = ord.cust_id and ord.id = :id
-
> Степан (05.02.10 12:21) [28]
Хорошо, осталось вытащит пару ответов на ранее заданные вопросы
И что ответишь на вопрос > Sergey13 © (05.02.10 11:44) [22] > А после переоткрытия датасета или перезапуска программы > все поля видны нормально?
Приведи значения всех полей записи после INSERT - тоже интересно глянуть, может там и увидим что ord.id есть NULL например или что еще -а то задавать наводящие вопросы издалека трудно. Отладчиком по коду пройти не можем, свойства глянуть не можем -вот и выдвигаем разные догадки. Дай исходные данные в виде - "а что у нас получилось сразу после INSERT, когда не видно поле cust.name" - интересны все поля
-
> [24] Степан (05.02.10 11:51) > Пре переоткрытии IBDataset все обновляется, оно и понятно > работает SQLSelect, но это плохое решение проблемы
Это пока и не решение вовсе, а вытягивание из ТЕБЯ, как из партизана, подробностей ТВОЕЙ проблемы.
Ты кроме Post никак модифицируемые запросы руками не запускаешь (где то видел таке)?
> [28] Степан (05.02.10 12:21) > Если нужно подробно:
Код такой секретный?
-
> Sergey13
Зачем ручной код если есть средства визуального программирования, Append, и Post или Cancel - это единственный код, который я написал, остальное же настойка компонент.
> Вариант
> [24] При переоткрытии IBDataset все обновляется, оно и понятно работает > SQLSelect, но это плохое решение проблемы
-
> в модальной форме добавляю новый заказ, при ее закрытии > делаю Post. Поля таблицы orders обновляются, а cust.name > - нет.
Ну не может IBDataSet автоматически связать твой INSERT и твой RefreshSQL! Тогда вообще зачем париться? После закрытия модальной формы делай IBDataSet1.Close, а затем IBDataSet1.Open. Вариант кстати ОЧЕНЬ даже стандартный.
-
Видимо все-таки ты CUST_ID так и не научился получать..Ни на клиенте, ни с использованием GeneratorField. Я так думаю, там же генератор используется? только в триггере вызывается GEN_ID
-
CUST_ID я не генерю ни на сервере ни локально > [24] про DBLookupComboBox
-
ой!а ord.ID?
-
Я так понял, что никто из участующих в обсуждении с данной проблемой никогда не сталкивался.
Проблема решена.
Если кому интересно:
SelectSQL относится к данным в целом, а все остальные запросы: InsertSQL, RefreshSQL, DeleteSQL имееют оношение только к текущей записи.
Поэтому они должно иметь не только ссылку на :ID или :OLD_ID (в зависимости от ситуации) в условии WHERE, но все все остальные прибамбамы свойственные SQL-запросам (это про выкрутасы от Сергей М. ©).
Проблема заключалась в генераторе поля ORD.ID. Значение должно получаться только локально (On New Record), тогда IBdataset может полноценно им оперировать, инче он не зает его значения, ну и все вытекующие последствия отсюда.
Проработал все возможные пути решения проблемы, спасибо Варианту, хотя его предположение и не было столь уверенным.
Спасибо всем за участие.
-
> Степан (06.02.10 19:05) [36]
просто проблема "надуманная"... нужно было "тупо"(в смысле, без всякой фантазии) получить ord.id (или :id в твоем варианте).. вот и все... нормально используй GeneratorField... но, допустим, FIBPlus могут использовать RETURNING для FireBird.. т.е., ВСЕ, что сделал триггер/ХП(новое значение, удаление, изменение) возможно получить на клиенте.. IBX(закладка InterBase) этого не умеет.. или умеет криво.. вот и все... а ты, я так понял, получал ord.id на сервере, соответственно, о его значении клиент ничего не знает(я о программе) и твой запрос на рефреш > RefreshSQL > select > ord.id, ord.date_reg, ord.summa, ord.cust_id, cust.name > from > orders ord, customers cust > where > cust.id = ord.cust_id and ord.id = :id >
"гонит"
|