![]() |
|
Модераторы: Akella |
![]()
|
|
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Использую компоненты TFIBPlus. У компонента TFIBDataSet есть свойства SelectSQL, InsertSQL, UpdateSQL, DeleteSQL, RefreshSQL. Как делать выборку используя SelectSQL разобрался (деактивируем датасет, заполняем SelectSQL, активируем датасет). А вот удалить не получается. Ни в одном хелпе или руководстве не сказано как связаны эти свойства. Куча вопросов:
1) должно ли при активации датасета быть заполнено только одно из SQL-свойств? 2) если можно заполнять одновременно несколько, то в каком порядке они выполняются при открытии датасета? 3) Нужно ли явно запускать транзакцию? И когда это делать - до или после закрытия датасета, до или после заполнения DeleteSQL? У меня вообще такая задача: на форме DBGrid, в нём отображена таблица (вся кроме одного поля). Соответственно есть FIBDatabase, FIBDataSet, FIBTransaction и DataSource. Всё уже настроено как надо. Рядом с таблицей кнопка, по нажатию на которой из базы должна удалиться выбранная в таблице запись (DBGrid тоже должен обновиться). По-разному пробовал, получается или ошибка (действие над пустым набором), или ничего не удаляется и DBGrid без изменений, или ничего не удаляется и DBGrid в результате пустой. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Уж сказать, что об FIB+ ничего не написано, это поклеп чистой воды... Читайте http://www.devrace.com/files/files/fibplus_dg_6_4.zip (FIBPlus 6.4 Developers Guide.pdf 19 страница) -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
У меня FIBPlus 6.3 Developers Guide.pdf. Но насколько я понял вы имели в виду параграф Автоматическая генерация обновляющих запросов. Так вот во-первых там нет ответа ни на один мой вопрос, во-вторых там рассказано не как использовать свойства InsertSQL, UpdateSQL, DeleteSQL, RefreshSQL, а как наоборот их не использовать. А в стандартном хелпе к FIBPlus 6 написано следующее:
не густо -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Fazil6 |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
свойства, которые не заполнены естественно работать не будут
При открытии выполняется только свойство SelectSQL. Вообще-то не можно, а обычно нужно заполнять все и как правило это делается не в коде, а есть специальный редактор в FIB Другие выполняются при других соответствующих им операциях.
в общем случае да.
До открытия. При завершении транзакции датасеты этой транзакции закрываются.
а что еще нужно? Пиши запрос для удаления записи и При вызове Delete у датасета будет выполняться этот твой запрос Это сообщение отредактировал(а) Fazil6 - 11.7.2006, 09:33 |
||||||||||
|
|||||||||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
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: Сходите на сайт разработчиков там есть примеры использования, настоятельно советую прочитать всю документацию. Это сообщение отредактировал(а) Alex - 11.7.2006, 09:39 -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Большое спасибо всем. Теперь я начинаю догонять. Пойду доваривать кашу в голове
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Попробуй использовать
FibDataSet.GeterateSQLs; Добавлено @ 16:51
|
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |