|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.03.2013, 12:06 | #1 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Как в Dataset сделать внутренний Delete без запуска SQL ?
Здравствуйте,
есть некий Dataset FIBplus, в нём указан код DeleteSQL который нормально работает. Но в ряде случаев нужно удалить строки только внутри Dataset НЕ запуская DeleteSQL код (не обращаясь к БД)! Можно ли как-то это сделать? |
20.03.2013, 16:28 | #2 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Попробую уточнить (прояснить) задачу.
Цитата:
Записи из таблицы и набора можно удалять (кодом deleteSQL) здесь проблем нет. Цитата:
Так?
программа — запись алгоритма на языке понятном транслятору
|
||
20.03.2013, 20:38 | #3 | |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Цитата:
Возможно, подошло бы и "скрывать", но я использую cxGrid где свой DataController, в итоге "скрытие записей в Dataset" может повлечь какие-то "скрытые" баги... |
|
21.03.2013, 09:35 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
вариант выбирать с БД только нужные (select ... where ...)?
любой контроллер работает с тем что ему предоставили,если запись скрыли (т.е. не проинформировали о ее наличии) то как он ее увидит. Тем более если он ничего не знает о FIB, и пользуется исключительно интерфейсом TDataSet. Надеюсь теперь мы узнаем каким именно компонентом FIB вы пользуетесь для получения данных. Узнали же мы о cxGrid.
программа — запись алгоритма на языке понятном транслятору
|
21.03.2013, 13:12 | #5 | |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Кстати... Здравствуйте, давно не виделись, как поживаете?
Цитата:
Раз уж Вы обратили внимание на мой вопрос, опишу задачу подробнее... Интерфейс: окно с огромной таблицей, внизу кнопка "Удалить". Код: Таблица cxGrid получает данные из FIBplus Dataset который получает данные из сложной ХП из БД связывающей порядка 10таблиц в результате чего KeyField=xID. Когда юзер нажимает кнопку "Удалить" ему задаётся вопрос: вы хотите удалить по методу "а" или методу "б"? Удаление возможно двух типов: а) удаление строки по xID из основной для отображаемой таблицы xTable - это удаление делает Dataset.DeleteSQL; б) возможно удаление по другому yID (есть в полученных данных) которое требует сложного кросс-удаления из множества всех 10таблиц для чего используется отдельная ХП в БД. То есть в случае удаления типа "б" удаление происходит скрыто от Dataset из-за чего строка(и) которые уже удалены из БД всё ещё присутствуют в Dataset и отображаются в связанной таблице cxGrid. Так вот вопрос в том - как удалить из Dataset уже неактуальные-несуществующие строки данных? Можно сделать тупо FullRefresh, но хотелось бы обойтись без дополнительных запросов к БД (без повторных сложных выборок)! Последний раз редактировалось DeveloPerchik; 21.03.2013 в 13:38. |
|
21.03.2013, 13:43 | #6 | |
Участник клуба
Регистрация: 19.12.2007
Сообщений: 1,100
|
Цитата:
в итоге ДатаСет изменится, но до БД это так и не дойдет
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ... |
|
21.03.2013, 14:05 | #7 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Не катит, тк юзер может захотеть удалить часть данных по методу удаления "б", а часть по методу "а" - когда нужно сделать Commit.
Можно по варианту Yurk@ сделать два отдельных удаления для методов А и Б, а удаление Dataset.DeleteSQL использовать всегда без Commit... но как-то это не очень красиво. Вообще я крайне удивлён, что в Dataset нет простой очевидной функции "удаления внутри Dataset" типа DeleteInternal или DeleteRecord... странно даже как-то... может всё же есть? |
21.03.2013, 14:29 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
НО! Если Вы хотите что-то удалять из базы, что-то из датасета, коммитить изменения датасета НЕЛЬЗЯ. да и не нужно! Хотя, как я могу говорить о том, что нужно, а что не нужно, если я вообще не понимаю суть Вашей гениальной задумки... я знаю только два варианта подхода. 1-й. Удаляем запись средствами DataSet. изменения в базу подтверждаем (синхронизируем). 2-й. Удаление производится ручками (навесным кодом, через запрос Delete .. where . Чтобы в датасете это отразилось, нужно или после удаления записи переоткрыть датасет (обычно это долго), либо, удалить запись в датасете.) я всегда пользовался вторым способом (ну, так исторически сложилось)... |
|
21.03.2013, 14:47 | #9 | |
Участник клуба
Регистрация: 19.12.2007
Сообщений: 1,100
|
Цитата:
Код:
Код:
Код:
Код:
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ... |
|
21.03.2013, 14:57 | #10 | |||
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
Цитата:
Цитата:
Цитата:
|
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос: как сделать, чтобы приложение разработанное в Delphi, которое использует бд sql, без проблем работало на другом компьютере | Gleg | Общие вопросы Delphi | 2 | 15.12.2012 16:57 |
Как сделать чтобы Dataset без SQL считал себя не read-only ? | delphicoding | БД в Delphi | 12 | 23.03.2012 22:22 |
Как скомпилить exe для запуска без прописи alias | mrrcat | Помощь студентам | 3 | 28.06.2010 05:25 |
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) | Schutze | Помощь студентам | 6 | 29.11.2009 22:15 |