Автогенерация запросов на удаление
Автогенерация запросов на удаление
Скажите, а что, TUniQuery автоматически генерирует без участия программиста запросы на удаление?
Re: Автогенерация запросов на удаление
Все DAC продукты автоматически генерируют запросы на добавление, изменение, удаление, блокировку и обновления записей. Если Вы хотите использовать свои запросы, то Вам необходимо использовать соответствующие свойства SQLInsert, SQLUpdate, SQLDelete, SQLLock, и SQLRefresh. Если Вы задали свои запрос, UniDAC будет использовать его, в противном случае, UniDAC будет автоматически генерировать запросы.
Re: Автогенерация запросов на удаление
Это очень плохо и причин тому несколько.
1. Почему я должен быть уверен, что компонента на 100% правильно и корректно автоматически сгенерирует тот или иной запрос?
2. Получается, что компонента "в тайне" от программиста чего-то там генерит с ПОСЛЕДСТВИЯМИ!!
3. В конце концов, может получиться непредвиденное, как получилось у меня. Select-запрос был на составление некой статистики относительно списка пользователей. Пользователь, работающий с программой, думает, что это обычная статистика, хотя построена она относительно таблицы пользователей. При этом, пользователь захотел "почистить" статистику, грохнув благополучно навсегда часть пользователей, т.к. грид дал команду "удалить", а датасет и не сопротивлялся.
4. В свойствах датасета НЕТ чего-то, чем можно ограничить то или иное действие (удаление, добавление, изменение)в независимости от того, есть ли для этого действия SQL-запрос или нет. К датасету может быть подключено несколько гридов на разных формах, к примеру, и легде ограничить это централизованно в датасете, чем в каждом гриде.
Поэтому нужен какой-то механизм, функционал, который бы разрешал/запрещал датасету автоматически генерировать запросы.
1. Почему я должен быть уверен, что компонента на 100% правильно и корректно автоматически сгенерирует тот или иной запрос?
2. Получается, что компонента "в тайне" от программиста чего-то там генерит с ПОСЛЕДСТВИЯМИ!!
3. В конце концов, может получиться непредвиденное, как получилось у меня. Select-запрос был на составление некой статистики относительно списка пользователей. Пользователь, работающий с программой, думает, что это обычная статистика, хотя построена она относительно таблицы пользователей. При этом, пользователь захотел "почистить" статистику, грохнув благополучно навсегда часть пользователей, т.к. грид дал команду "удалить", а датасет и не сопротивлялся.
4. В свойствах датасета НЕТ чего-то, чем можно ограничить то или иное действие (удаление, добавление, изменение)в независимости от того, есть ли для этого действия SQL-запрос или нет. К датасету может быть подключено несколько гридов на разных формах, к примеру, и легде ограничить это централизованно в датасете, чем в каждом гриде.
Поэтому нужен какой-то механизм, функционал, который бы разрешал/запрещал датасету автоматически генерировать запросы.
Re: Автогенерация запросов на удаление
1,2. Автоматическая генерация запросов - это одна из наиболее полезных и удобных возможностей UniDAC. Информация об автоматической генерации запросов UniDAC'ом описана по следующей ссылке (в разделе "Data access and data management automation"): http://www.devart.com/unidac/features.html . Если Вы не уверены что UniDAC генерирует корректный запрос или Вы хотите управлять всеми отправляемыми запросами на сервер, Вам необходимо использовать свои запросы в свойствах SQLInsert, SQLUpdate, SQLDelete, SQLLock, и SQLRefresh. Таким образом Вы будете контролировать все отправляемые на сервер запросы.
3. Для предотвращения удаления данных из датасета Вам необходимо установить свойство датасета ReadOnly в True. Если ReadOnly установлен в True, Ваши пользователи не смогут изменить, удалить или добавить записи датасета.
4. Для того чтобы запретить конкретное действие в датасете, Вам необходимо использовать события датасета. Например:
3. Для предотвращения удаления данных из датасета Вам необходимо установить свойство датасета ReadOnly в True. Если ReadOnly установлен в True, Ваши пользователи не смогут изменить, удалить или добавить записи датасета.
4. Для того чтобы запретить конкретное действие в датасете, Вам необходимо использовать события датасета. Например:
Код: Выделить всё
procedure TForm1.UniQuery1BeforeEdit(DataSet: TDataSet);
begin
Abort; // запрещаем изменение записей
end;
procedure TForm1.UniQuery1BeforeDelete(DataSet: TDataSet);
begin
Abort; // запрещаем удаление записей
end;
procedure TForm1.UniQuery1BeforeInsert(DataSet: TDataSet);
begin
Abort; // запрещаем добавление записей
end;
Re: Автогенерация запросов на удаление
Не вижу, а где здесь написано, что датасет автоматически, без участия программиста генерирует или создает SQL запросы на уделение, добавление и т.д.?
Например, сгенерировать запрос только для refresh, а для остальных не генерировать.
Как запретить автоматически генерировать те или иные запросы?
Ещё вопрос. Как мне заставить TUniQuery программно сгенерировать запрос?Data access and data management automation
Automatic data updating with TUniQuery, TUniTable, and TUniStoredProc components
Automatic record refreshing and locking
Automatic query preparing
Support for ftWideMemo field type in Delphi 2006 and higher
Например, сгенерировать запрос только для refresh, а для остальных не генерировать.
Как запретить автоматически генерировать те или иные запросы?
Re: Автогенерация запросов на удаление
Для любых действий над данными на сервере используются SQL запросы, поэтому автоматическое изменение, добавление, удаление или обновление данных подразумевает автоматическую генерацию SQL запросов которые и выполняют соответствующие операции.
Для того чтобы заставить TUniQuery не генерировать запрос для конкретной операции над данными, Вам необходимо задать свой запрос для этой операции. Например, чтобы заставить TUniQuery генерировать запрос только для операции обновления данных (refresh), Вам необходимо установить свои запросы в свойства SQLInsert, SQLUpdate, SQLDelete, и SQLLock, а свойство SQLRefresh оставить пустым.
Для того чтобы заставить TUniQuery не генерировать запрос для конкретной операции над данными, Вам необходимо задать свой запрос для этой операции. Например, чтобы заставить TUniQuery генерировать запрос только для операции обновления данных (refresh), Вам необходимо установить свои запросы в свойства SQLInsert, SQLUpdate, SQLDelete, и SQLLock, а свойство SQLRefresh оставить пустым.
Re: Автогенерация запросов на удаление
Так в том-то и дело, что программисту не нужны вообще запросы кроме Select и Refresh. Зачем ещё думать и помнить, что нужно не забыть про остальные свойства: SQLInsert, SQLUpdate, SQLDelete и чем-нибудь из заполнить?
Re: Автогенерация запросов на удаление
Добрый день.
В общем случае для разработки приложений необходимы все запросы, так как работа с БД подрозумевает под собой не только получение данных, но и изменение, вставку и удаление. Поэтому мы предоставляем механизмы для автоматического выполнения всех этих операций. Если в конкретном сучае какая либо функциональность не требуеться, ее необходимо "отключать" на уровне приложения, заданием собственных запросов, обработкой событий, блокировкой действий пользователя на уровне DataAccess компонент и т.д.
В общем случае для разработки приложений необходимы все запросы, так как работа с БД подрозумевает под собой не только получение данных, но и изменение, вставку и удаление. Поэтому мы предоставляем механизмы для автоматического выполнения всех этих операций. Если в конкретном сучае какая либо функциональность не требуеться, ее необходимо "отключать" на уровне приложения, заданием собственных запросов, обработкой событий, блокировкой действий пользователя на уровне DataAccess компонент и т.д.