Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Модификация набора данных

CuBook05

Модификация (изменение) набора данных представляет собой редактирование, добавление и удаление его записей. Модифицируемость набора данных зависит от различных условий. Разработчик может разрешить или запретить изменение набора данных с помощью соответствующих свойств.
 
Управлять возможностью изменения набора данных Table можно посредством свойства Readonly типа bool, при установке которому значения true изменение записей запрещается. По умолчанию свойство Readonly имеет значение false, и набор данных можно модифицировать.
Значение свойства Readonly можно изменять только у закрытого набора данных.
В отличие от многих элементов управления, например, редакторов Edit и Memo, данный запрет на редактирование относится как к визуальному (пользователем), так и к программному изменению записей набора данных.
 
Возможность модификации набора данных Query определяет свойство RequestLive типа bool. По умолчанию это свойство имеет значение false, и набор данных Query доступен только для чтения. Чтобы получить разрешение визуально и программно редактировать записи, свойству RequestLive нужно установить значение true. Возможность изменения набора Query зависит также от содержания SQL-запроса. Например, если при запросе отбираются записи из нескольких таблиц, то набор данных не может быть модифицируемым, И значение true свойства RequestLive не учитывается.
 
Для проверки, можно ли изменять набор данных, предназначено свойство canModify типа bool, действующее при выполнении приложения и доступное только для чтения. Если это свойство имеет значение true, то набор данных изменять можно, а если false, то изменения в наборе данных запрещены, и любая попытка сделать это визуально или программно вызовет исключение.
Можно запретить редактирование отдельных полей набора данных даже в том случае, если сам набор данных является модифицируемым.
Для программного изменения набора данных вызываются соответствующие методы, например, метод Edit редактирования текущей записи или метод Append вставки новой записи.
 
Пользователь редактирует набор данных с помощью визуальных компонентов, например, редактора DBEdit или сетки DBGrid, управляя ими с помощью мыши и клавиатуры. Набор данных может автоматически переводиться в режимы редактирования или вставки, для этого свойству AutoEdit источника данных DateSource для визуальных компонентов должно быть установлено значение true (по умолчанию). В противном случае (при значении false) пользователь не сможет изменять набор данных с помощью визуальных компонентов.
Свойство AutoEdit влияет на визуальные компоненты, подключенные к источнику данных DateSource, и не оказывает никакого влияния на другие элементы управления, такие как, например, флажок CheckBox.
При модификации набора данных для связанного с ним источника данных DateSource генерируется событие OnUpdateData.
 
После модификации набора данных возможна ситуация, когда изменения сделаны, но не отображены визуальными компонентами, связанными с этим набором. В таких случаях нужно вызывать метод Refresh, который повторно считывает набор данных и тем самым гарантирует, что визуальные компоненты будут отображать текущие, а не устаревшие данные. При работе в многопользовательской системе рекомендуется периодически вызывать метод Refresh, чтобы своевременно учитывать изменения, сделанные другими пользователями.
 
В однопользовательском приложении обновление набора данных применяется в случае, если с одной таблицей связано несколько наборов данных. Например, с таблицей клиентов может быть связан набор данных, с помощью которого выполняется редактирование списка сотрудников, а также набор данных, предназначенный для выбора сотрудника при составлении графика отпусков. Компоненты Table обоих наборов могут находиться в разных формах. После редактирования списка сотрудников следует обновить оба набора данных. Приведем фрагмент кода, в котором проводится обновление набора данных:
void __fastcall TForm1::ButtonlClick(TObject *Sender)
{
Table1->Edit();
Table1->FieldByName("Capital")->AsString=Edit1->Text;
Table1->Post();
Table1->Refresh();
Form2->Table1->Refresh();
}
Здесь при программном изменении набора данных Table1, находящегося в форме Form1, обновляется он сам, а также набор данных Table1, расположенный в форме Form2. Оба набора связаны с одной и той же физической таблицей. В модуле формы Form1 должна быть ссылка на модуль формы Form2 (предложение #include "Unit2.h").
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий