Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как удалить запись при помощи DeleteSQL? 
:(
    Опции темы
ksili
Дата 11.7.2006, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 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 в результате пустой. 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alex
Дата 11.7.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Цитата(ksili @  11.7.2006,  06:24 Найти цитируемый пост)
Ни в одном хелпе или руководстве не сказано как связаны эти свойства.

Уж сказать, что об FIB+ ничего не написано, это поклеп чистой воды...
Читайте http://www.devrace.com/files/files/fibplus_dg_6_4.zip (FIBPlus 6.4 Developers Guide.pdf 19 страница) 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ksili
Дата 11.7.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Alex @  11.7.2006,  07:45 Найти цитируемый пост)
Читайте http://www.devrace.com/files/files/fibplus_dg_6_4.zip (FIBPlus 6.4 Developers Guide.pdf 19 страница) 

У меня FIBPlus 6.3 Developers Guide.pdf. Но насколько я понял вы имели в виду параграф Автоматическая генерация обновляющих запросов. Так вот во-первых там нет ответа ни на один мой вопрос, во-вторых там рассказано не как использовать свойства InsertSQL, UpdateSQL, DeleteSQL, RefreshSQL, а как наоборот их не использовать.

А в стандартном хелпе к FIBPlus 6 написано следующее:
Код

Sets or gets an SQL operator for deleting current record.

__property Classes::TStrings *DeleteSQL={ read=GetDeleteSQL, write=SetDeleteSQL } 

Description

Use DeleteSQL to set or get a query that will allow deleting current record.


не густо 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Fazil6
Дата 11.7.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Цитата

1) должно ли при активации датасета быть заполнено только одно из SQL-свойств?

свойства, которые не заполнены естественно работать не будут
Цитата

2) если можно  заполнять одновременно несколько, то в каком порядке они выполняются при открытии датасета?

При открытии выполняется только свойство SelectSQL.

Вообще-то не можно, а обычно нужно заполнять все и как правило это делается не в коде, а есть специальный редактор в FIB
Другие выполняются при других соответствующих им операциях. 
Цитата

3) Нужно ли явно запускать транзакцию? 

в общем случае да.
Цитата

И когда это делать - до или после закрытия датасета, до или после заполнения DeleteSQL?

До открытия. При завершении транзакции датасеты этой транзакции закрываются.


Цитата

Use DeleteSQL to set or get a query that will allow deleting current record.

а что еще нужно? Пиши запрос для удаления записи и При вызове Delete у датасета будет выполняться этот твой запрос  

Это сообщение отредактировал(а) Fazil6 - 11.7.2006, 09:33
PM MAIL   Вверх
Alex
Дата 11.7.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
ksili
Дата 11.7.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Большое спасибо всем. Теперь я начинаю догонять. Пойду доваривать кашу в голове 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alex
Дата 11.7.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



 smile  


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 18.7.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Попробуй использовать
FibDataSet.GeterateSQLs;

Добавлено @ 16:51 
Код

Var
  dstDS:TpFIBDataSet;
  TableName := String;
...

    dstDS:=TpFIBDataSet.Create(fmUpdateInfo);
    dstDS.Name := TableName;
    dstDS.Database := DM.fibDB;
    dstDS.AutoCommit := True;
    dstDS.SelectSQL.Add('SELECT * FROM '+ AnsiUpperCase(TableName));
    dstDS.AutoUpdateOptions.UpdateTableName := AnsiUpperCase(TableName);
    dstDS.AllowedUpdateKinds := dstDS.AllowedUpdateKinds + [ukModify,ukInsert];
    dstDS.GenerateSQLs;
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.