|
|
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
В БД имеется некоторое комплексное представление (view), которое отображает много данных из разных таблиц. В приложении его содержимое отображается через DBGrid. Хотелось бы иметь возможность редактирования данных при помощи grid inplace editor'а. Но т.к. источник вьюха, то вставлять изменённые данные обратно в таблицу нужно через какой-нибудь обработчик событий, который, в зависимости от того какие данные изменены, будет изменять соотв. таблицы или вообще вызывать ХПшки. Вопрос: кто-нибудь уже делал такое? Это как-нибудь реализуемо без ковыряния DBGrid и создания наследников? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 09:41 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Такой механизм реализован в одних компонентах доступа и не реализован в других. В общем случае, самое простое решение - загрузить данные в MemoryDataset (TClientDataset, TrxMemoryData, TdxMemTable) и вручную отсылать нужные запросы, при изменении данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 09:46 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
DimaBr Такой механизм реализован в одних компонентах доступа и не реализован в других. В общем случае, самое простое решение - загрузить данные в MemoryDataset (TClientDataset, TrxMemoryData, TdxMemTable) и вручную отсылать нужные запросы, при изменении данных Компоненты доступа - FireDac. А в TClientDataset (и прочих) предусмотрена возможность перехвата данных при изменении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 09:52 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp FireDac Ну и в субд посмотри возможность создания триггеров / правил on view. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 10:07 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp А в TClientDataset (и прочих) предусмотрена возможность перехвата данных при изменении? TDataset.AfterPost / BeforePost TDataset.AfterInsert / BeforeInsert TDataset.AfterDelete / BeforeDelete и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 10:36 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
DimaBr, О, спасибо. Просто я почему-то думал что это в гриде надо перехватывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 11:25 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp DimaBr, О, спасибо. Просто я почему-то думал что это в гриде надо перехватывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 11:28 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Firebird позволяет делать редактируемую вьюху на триггерах. Но если компонент внутри себя проверяет тип источника данных и самовольно выставляет ReadOnly, то упс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 11:35 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий alekcvp DimaBr, О, спасибо. Просто я почему-то думал что это в гриде надо перехватывать. Зато редактор данных там есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 11:50 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal Firebird позволяет делать редактируемую вьюху на триггерах. Но если компонент внутри себя проверяет тип источника данных и самовольно выставляет ReadOnly, то упс. О! А это как? Делать триггер BeforeXXXX? А в нем проверять какие поля изменились? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 11:51 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvpА это как? Делать триггер BeforeXXXX? Да. alekcvpА в нем проверять какие поля изменились? Да. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 12:29 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp в TClientDataset (и прочих) предусмотрена возможность перехвата данных при изменении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 12:46 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp В БД имеется некоторое комплексное представление (view), которое отображает много данных из разных таблиц. В приложении его содержимое отображается через DBGrid. Хотелось бы иметь возможность редактирования данных при помощи grid inplace editor'а. Но т.к. источник вьюха, то вставлять изменённые данные обратно в таблицу нужно через какой-нибудь обработчик событий, который, в зависимости от того какие данные изменены, будет изменять соотв. таблицы или вообще вызывать ХПшки. Вопрос: кто-нибудь уже делал такое? Это как-нибудь реализуемо без ковыряния DBGrid и создания наследников? В Firedac нет кастомных запросов на обновление, как есть в IBX? P.S. извиняюсь, прочитал внимательней вопрос ТС, что нужно разную реакцию в разных случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 13:57 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp, Тебе для какого сервера БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 15:24 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Vlad F alekcvp, Тебе для какого сервера БД? Firebird же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 17:33 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp, Дык, сделай в нем (замещающие) триггеры на обновление/удаление/вставку на этот свой VIEW и все заживет, даже в гриде. Я такое вовсю практиковал, правда, на IBX. Но, как показывает опыт, FireDC местами ничем не хуже.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 17:46 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Vlad F, А там как-то потом надо выход обрабатывать из триггера или вьюхи просто игнорируют update'ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 20:48 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp, - в Firebird "выход из триггера" не обрабатывается никак. Триггер или срабатывает, или нет. - про редактируемые view в Firebird - страница 145 https://firebirdsql.org/file/documentation/reference_manuals/firebird-language-reference-30-rus.pdf - нет никаких "редактируемых гридов или датасетов" для SQL. Это фикция. В SQL есть чтение данных это select, и вставка,обновление удаление - это insert, update, delete. Никакими другими операциями или волшебством данные в SQL не модифицируются. Соответственно, для "редактирования" датасет (не грид) должен уметь не просто генерировать insert/update/delete, но и позволять редактировать все эти три типа запросов на изменение данных. Причем, позволять не просто один запрос, а несколько, если view "составное" (в FB это можно сделать через execute block). Например, если view выбирает данные из двух таблиц, то для "редактируемости" такого view в столбцах view должны быть идентификаторы записей обоих таблиц. Иначе нельзя будет сделать update. Соответственно, датасет в UpdateSQL должен позволять прописать там по 1 update для обоих таблиц (2 update). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2020, 21:39 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Если имена полей в разных таблицах одинаковые, то можно попробовать указать имена ключевых полей и в БефореПост менять свойство UpdateTable. ФайрДАК использует эти свойства для создания UPDATE-запросов. Не пробовал, но может прокатить. И минимум изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 10:54 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
kdv, Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 11:32 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
Ещё один вариант - научить cxTableView загружать данные из Dataset по именам колонок (имя колонки = имя View + '_' + Имя поля датасета) Аналогичные события есть у cxTableView.DataController (OnAterDelete, OnAfterInsert, OnAfterPost) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 13:12 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
DimaBr, Я не использую девок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 16:33 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
С триггерами делал на Zeos, все прозрачно, никаких Sql не генерил. В TableName имя вьюхи и вперёд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 19:26 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 20:20 |
|
||
|
Редактирование данных из View'хи
|
|||
|---|---|---|---|
|
#18+
alekcvp, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2020, 20:23 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39988249&tid=2038077]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
184ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 511ms |

| 0 / 0 |
