Russian Belarusian English German Japanese Ukrainian

Добавление записей

CuBook05

Добавлять записи можно только к модифицируемому набору данных, в противном случае будет сгенерировано исключение. Для добавления записи нужно выполнить следующие действия.
  1. Перевести набор данных в режим вставки.
  2. Задать значения полей новой записи.
  3. Подтвердить сделанные изменения или отказаться от них, после чего набор данных снова переходит в режим просмотра.
Для добавления записей используются методы Insert, InsertRecord, Append и AppendRecord.
 
Метод Insert переводит набор данных в режим вставки и добавляет к нему новую пустую запись. Новая запись вставляется перед записью, на которой находится указатель текущей записи. При необходимости перед вызовом метода Insert нужно выполнить перемещение текущего указателя в требуемую позицию набора данных.
 
После перевода набора данных в режим вставки дальнейшие действия по заданию (изменению) значений полей, подтверждению или отмене сделанных изменений не отличаются от аналогичных действий при редактировании записи. При этом для задания или изменения значений полей используются инструкции присваивания и метод SetFields, а для подтверждения или отмены изменений методы Post и Cancel. Некоторые поля новой записи могут остаться пустыми, если до подтверждения им не были присвоены значения.
При переходе в режим вставки к набору данных добавляется пустая запись, значения полей которой не заданы. Если запись добавляется к подчиненному набору данных, связанному с главным набором связью «главный-подчиненный», то индексные поля автоматически получают корректные значения, и программист может не заботиться об их заполнении.
Рассмотрим следующий пример:
Table1->Insert() ;
Table1->FieldByName("Name")->AsString = Edit1->Text;
Table1->Post();
Здесь в новой записи задаются значение поля наименования (Name), остальные поля остаются пустыми. В этом и последующих примерах предполагается, что набор данных не связан с главным набором данных, и полям не были автоматически присвоены значения как индексным полям.
 
Метод InsertRecord объединяет функциональность методов Insert и SetFields, выполняя те же действия, что и их последовательный вызов. Метод имеет объявление:
void __fastcall InsertRecord(const System::TvarRec * values, const int vaiues_size);
вставляет в позицию указателя текущей записи новую, задавая значения всех или части ее полей. Например:
Table1->InsertRecord (ARRAYOFCONST(("Country", "Capital", NULL, NULL,22222)));
Здесь вставляется запись и затем, как и в примере с методом SetFields, в первое, второе и пятое поля вставленной записи набора данных Table1 заносятся страна, столица и численность населения соответственно. Третье и четвертое поля этой записи принимают значение 0.
 
Методы Append и AppendRecord отличаются от методов Insert и InsertRecord тем, что вставляют запись в конец набора данных, а не в позицию указателя текущей записи. Пользователь управляет набором данных, в том числе вставкой записи, с помощью элементов управления формы. Для компонента DBGrid новая запись добавляется к набору данных при нажатии клавиши <Insert> или при переходе на последнюю запись. Если в форме находится компонент DBNavigator, то новая запись добавляется при нажатии кнопки InsertRecord.
 
При добавлении новой записи любым методом возникают события BeforeInsert и AfterInsert типа TDataSetNotifyEvent, а также событие OnNewRecord типа TDataSetNotifyEvent. В обработчиках событий BeforeInsert и OnNewRecord можно выполнить действия, связанные с проверкой набранных пользователем данных или с заполнением (инициализацией) части полей новой записи. Вот пример соответствующей процедуры:
void __fastcall TForm1::Table1NewRecord(TDataSet *DataSet)
{
Table1->FieldByName("Name")->AsString = Edit1->Text;
Table1->FieldByName("Capital")->AsString = Edit2->Text;
Table1->FieldByName("Area")->AsInteger = StrToInt(Edit3->Text);
}
При утверждении или отмене изменений, связанных с добавлением новой записи, также генерируются события BeforePost и AfterPost или BeforeCancel и AfterCancel.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

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


Защитный код Обновить