|
|
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Есть ibDataSet с SQL Код: sql 1. 2. 3. В DBGrid все выглядит хорошо, поначалу... Проблема в том, что после ibDataSet.Post поле sumt2 в DBGrid становится пустым. Как мне этого избежать? Никак? :) Только использовать Lookup поле? (но для этого необходимо держать рядом открытый query со всеми записями Код: sql 1. 2. 3. Писать значение прямо в поле DBGrid из, например, TDictionary, который заранее сформировать? Не делать Post у ibDataSet а менять данные ч-з ibSQL, но тогда как рефрешить эту одну запись в ibDataSet, не переоткрывать же весь запрос каждый раз при изменении одной строки? Написать другой запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 06:50 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Не знаю как в вашем датасете, но обычно полю sumt2 назначают своиства AutoGenerateValue = arDefault FieldKind = fkInternalCalc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:03 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
istrebitel Не знаю как в вашем датасете, но обычно полю sumt2 назначают своиства AutoGenerateValue = arDefault FieldKind = fkInternalCalc Попробовал, ничего не изменилось... Или надо еще что-то сделать? Если указано fkInternalCalc, тогда что-то надо указывать DefaulExpression ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:12 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
fkInternalCalc просто указывает на то, что поле расчётное и не имеет отображения на реальное поле в таблице, в бд и соответственно не должно участвовать при построении INSERT'ов и UPDATE'ов. А arDefault обычно приводит к вычитке значения после INSERT. А где нибудь нет свойства RefreshAfterUpdate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:26 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox, Свойство что-то типа RefreshSQL надо правильно заполнить. Для обновления значений одной, текущей записи набора по соответствующему ключу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:31 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Ну, это поле нельзя включать в RefreshSQL, иначе ошибка ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:36 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
istrebitel fkInternalCalc просто указывает на то, что поле расчётное и не имеет отображения на реальное поле в таблице, в бд и соответственно не должно участвовать при построении INSERT'ов и UPDATE'ов. А arDefault обычно приводит к вычитке значения после INSERT. А где нибудь нет свойства RefreshAfterUpdate? Не, такого свойства нет ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:49 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Нужно как-то перезапросить это поле с сервера и вставить, попробую вставить вручную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 07:53 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Только сейчас обратил внимание у вас подзапрос не завязан на данные таблицы tab соответственно в колонке будет одно значение на весь столбец, вам такое поведение необходимо? Тогда можно выполнить (select sum(mycount) from tab2 where tab_id=:tid) до открытия датасета и передать значение параметром select t.*, :sumt as sumt2 from tab t order by t.nam Если и так будет глючить, то у поля sumt2 ставите тип fkCalculated и в обработчике датасета OnCalcFields заполняете это поле ранее вычисленным значением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:14 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Это я ошибся Код: sql 1. 2. 3. Завязано, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:27 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Сделал такое извращение (повесил обработчик на GetText поля), но не нравится мне такое: Код: pascal 1. 2. 3. 4. 5. getSumt2 создает TIBQuery, лезет в базу дергает данные, возвращает значение и уничтожает TIBQuery, не знаю насколько это замедлит работу. Может вообще поставить getSumt2 на кальк поле? Но тогда функция будет выполняться на все записи IBDataSet, а при GetText, только на те, по которым был Post без Код: pascal 1. Будем надеяться, что утечек памяти при выполнении getSumt2 с Код: sql 1. и последующем Код: pascal 1. не возникнет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:31 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Не поле делаешь InternalCalc а в OnCalculateFields проверяешь его на Null и если пустое то только тогда запрашиваешь из БД значение и присваиваешь этому полю. По идее должно отрабатывать один раз, но правда если Код: sql 1. вернёт NULL то, будет лишний повторный запрос. Ну чтоб избежать утечек Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:42 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
istrebitel, Получается, что тоже самое, что у меня на GetText , только на OnCalculateFields. Чем это лучше? Или аналогично? Я так понимаю, что GetText (если в одном поле) срабатывает один раз на строку и OnCalculateFields тоже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:47 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Ну чтоб избежать утечек Код: pascal 1. 2. 3. 4. 5. 6. ну, проверка понятно, а FreeAndNil прям на ноль чистит память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 08:48 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox Есть ibDataSet с SQL Код: sql 1. 2. 3. В DBGrid все выглядит хорошо, поначалу... Проблема в том, что после ibDataSet.Post поле sumt2 в DBGrid становится пустым. Как мне этого избежать? Никак? :) Только использовать Lookup поле? (но для этого необходимо держать рядом открытый query со всеми записями Код: sql 1. 2. 3. Писать значение прямо в поле DBGrid из, например, TDictionary, который заранее сформировать? Не делать Post у ibDataSet а менять данные ч-з ibSQL, но тогда как рефрешить эту одну запись в ibDataSet, не переоткрывать же весь запрос каждый раз при изменении одной строки? Написать другой запрос? Зайчик, у TIBDataSet должны быть определены SelectSQL, ModifySQL, InsertSQL и RefreshSQL. Ты, конечно же, их определил, и учел, что в RefreshSQL должна быть уточняющая where - кляуза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:00 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
GetText вызывается при каждом чтении поля, строка при скроллинге скрылась из Grid'а, скролим в обратном направлении, при появлении строки в гриде будет повторный вызов. OnCalcFields один вызов на строку, в момент фетчинга из базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:02 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox Ну, это поле нельзя включать в RefreshSQL, иначе ошибка ) Чего-чего?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:06 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
P.S. RefreshSQL как раз типа для подобных надобностей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:07 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Зайчик, у TIBDataSet должны быть определены SelectSQL, ModifySQL, InsertSQL и RefreshSQL. Ты, конечно же, их определил, и учел, что в RefreshSQL должна быть уточняющая where - кляуза. Ты не из этих? :) Я так понял, что в RefreshSQL я просто не указываю поле sumt2 и все, а что как-то можно указать в RefreshSQL, то sumt2 необходимо перезапросить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:09 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox Проблема в том, что после ibDataSet.Post Все же интересно, что в InsertSQL/UpdateSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:10 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
Vlad F P.S. RefreshSQL как раз типа для подобных надобностей. Напиши пример, please ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:10 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox ъъъъъ Зайчик, у TIBDataSet должны быть определены SelectSQL, ModifySQL, InsertSQL и RefreshSQL. Ты, конечно же, их определил, и учел, что в RefreshSQL должна быть уточняющая where - кляуза. Ты не из этих? :) Я так понял, что в RefreshSQL я просто не указываю поле sumt2 и все, а что как-то можно указать в RefreshSQL, то sumt2 необходимо перезапросить? Может, ты просто покажешь, что у тебя в RefreshSQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:10 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox, давай, вываливай все запросы. И изменяющие, и обновляющий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:11 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
ъъъъъ antox Проблема в том, что после ibDataSet.Post Все же интересно, что в InsertSQL/UpdateSQL. Сделал запрос: Код: sql 1. 2. 3. вызвал автогенерацию InsertSQL/UpdateSQL/RefreshSQL а потом в SelectSQL измени на Код: sql 1. 2. 3. соответственно InsertSQL/UpdateSQL/RefreshSQL ничего не знает о sumt2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:13 |
|
||
|
IBX + FireBird несколько таблиц в запросе
|
|||
|---|---|---|---|
|
#18+
antox Я так понял, что в RefreshSQL я просто не указываю поле sumt2 и все, а что как-то можно указать в RefreshSQL, то sumt2 необходимо перезапросить? А не задумывались, что проблема с тем, что после Post у вас в поле с суммой становится пустым, как раз из-за того, что вы в refreshsql его не указали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2020, 09:14 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39936519&tid=2038492]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 388ms |

| 0 / 0 |
