| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > как удалить запись при помощи DeleteSQL? |
| Автор: ksili 11.7.2006, 05:24 |
| Использую компоненты TFIBPlus. У компонента TFIBDataSet есть свойства SelectSQL, InsertSQL, UpdateSQL, DeleteSQL, RefreshSQL. Как делать выборку используя SelectSQL разобрался (деактивируем датасет, заполняем SelectSQL, активируем датасет). А вот удалить не получается. Ни в одном хелпе или руководстве не сказано как связаны эти свойства. Куча вопросов: 1) должно ли при активации датасета быть заполнено только одно из SQL-свойств? 2) если можно заполнять одновременно несколько, то в каком порядке они выполняются при открытии датасета? 3) Нужно ли явно запускать транзакцию? И когда это делать - до или после закрытия датасета, до или после заполнения DeleteSQL? У меня вообще такая задача: на форме DBGrid, в нём отображена таблица (вся кроме одного поля). Соответственно есть FIBDatabase, FIBDataSet, FIBTransaction и DataSource. Всё уже настроено как надо. Рядом с таблицей кнопка, по нажатию на которой из базы должна удалиться выбранная в таблице запись (DBGrid тоже должен обновиться). По-разному пробовал, получается или ошибка (действие над пустым набором), или ничего не удаляется и DBGrid без изменений, или ничего не удаляется и DBGrid в результате пустой. |
| Автор: ksili 11.7.2006, 08:52 | ||||
У меня FIBPlus 6.3 Developers Guide.pdf. Но насколько я понял вы имели в виду параграф Автоматическая генерация обновляющих запросов. Так вот во-первых там нет ответа ни на один мой вопрос, во-вторых там рассказано не как использовать свойства InsertSQL, UpdateSQL, DeleteSQL, RefreshSQL, а как наоборот их не использовать. А в стандартном хелпе к FIBPlus 6 написано следующее:
не густо |
| Автор: Fazil6 11.7.2006, 09:30 | ||||||||||
свойства, которые не заполнены естественно работать не будут
При открытии выполняется только свойство SelectSQL. Вообще-то не можно, а обычно нужно заполнять все и как правило это делается не в коде, а есть специальный редактор в FIB Другие выполняются при других соответствующих им операциях.
в общем случае да.
До открытия. При завершении транзакции датасеты этой транзакции закрываются.
а что еще нужно? Пиши запрос для удаления записи и При вызове Delete у датасета будет выполняться этот твой запрос |
| Автор: Alex 11.7.2006, 09:36 |
| ksili, Если сказать вам честно, то у вас в голове полная каша. Вы выдаете совершенно беспорядочный набор слов не понимая, что и как... Придется рассказывать идеологию FIB+, DataSet'ов и за одно транзакций. 1. Если брать идеологию транзакций, то вы не можете сделать НИ ОДНОГО действа с базой не в рамках какой либо транзакции, это означает что выборка, вставка, изменение или удаление в любом случаи выполняются в рамках транзакции, которую после выполняемых действий можно либо подтвердить (все изменения будут приняты БД), либо отменить (все, что было сделано в рамках текущей транзакции) Современные компоненты доступа обычно сами стартуют транзакцию, которая задана в их свойствах, если этого еще не сделано (но это всегда регулируется настройками компонентов) 2. DataSet можно назвать совокупностью 4-х более элементарных и проще для понимания Query. У Query есть только одно свойство SQL и оно выполняется либо при вызове метода Open (Select), либо ExecSql (Insert, Update, Delete). DataSet объединяет 4 Query в один компонент, который может выполнять Select, Insert, Update и Delete. Задание этих свойств в классической реализации DataSet'а возможно только когда Active:= False. Эти свойства должны содержать Sql опператоры выборки, вставки, изменения и удаления. Если к DataSet'у подключить DbGrid, то в самом примитивном случаи этого достаточно, что бы через грид можно было просматривать данные выборки, добавлять, изменять или удалять их. 3. Теперь самое главное идеология FIB+. Авторы этих компонентов после многих лет разработки программ на собственном опыте убедились, что: Хорошо бы иметь не одну транзакцию в рамках которых будут выполняться команды (читай документацию очень все прозрачно написано), в 80% случаях запросы добавления, изменения, удаления можно построить по запросу выборки (об этом тебе и рассказывали с упоением на 19 странице документации). Признаюсь честно за два года использования FIB+ я не помню случая когда бы мне пришлось изменять сгенерированный им запрос на удаление (хотя DataSet'oв за это время было создано под 1000). Но не устраивает вас по каким-то причинам автоматическая генерация ради бога заполняйте сами свойства Sql запросами и все вам сделают. Но и даже этот процесс заполнения можно упростить: открываете редактор свойств SQL DataSet'а, задаете запрос на выборку, переходите на закладку "Generate Modify Sqls", на которой есть кнопка "Generate SQLs", после нажатия, на которую вам сгенерируют запросы, которые в случаи необходимости вам будет достаточно только подправить. PS: Сходите на сайт разработчиков там есть примеры использования, настоятельно советую прочитать всю документацию. |
| Автор: ksili 11.7.2006, 11:01 |
| Большое спасибо всем. Теперь я начинаю догонять. Пойду доваривать кашу в голове |
| Автор: Alex 11.7.2006, 11:40 |
| |
| Автор: Akella 18.7.2006, 16:49 | ||
| Попробуй использовать FibDataSet.GeterateSQLs; Добавлено @ 16:51
|