RAD Studio VCL Reference
|
Searches for a specified field in the dataset.
function FindField(const FieldName: string): TField;
__fastcall TField FindField(const AnsiString FieldName);
Call FindField to determine if a specified field component exists in a dataset. FieldName is the name of the field for which to search. This name can be the the name of a simple field, the name of a subfield of an object field that has been qualified by the parent field's name, or the name of an aggregated field.
If FindField finds a field with a matching name, it returns the TField component for the specified field. Otherwise it returns nil (Delphi) or NULL (C++).
FindField is the same as the FieldByName method, except that it returns nil (Delphi) or NULL (C++) rather than raising an exception when the field is not found.
C++ Examples:
/* This example uses a button to copy the value of a field in the previous record into the corresponding field in the current record. The field to copy is specified by using FindField and the name of the field. */ void __fastcall TForm1::Button2Click(TObject *Sender) { TBookmark SavePlace; Variant PrevValue; // get a bookmark so that we can return to the same record SavePlace = Customers->GetBookmark(); try { // move to prior record} Customers->FindPrior(); // get the value // This is the safe way to get 'CustNo' field PrevValue = Customers->FindField("Field2")->Value; // This is *not* the safe way to change 'CustNo' field // PrevValue = Customers->Fields->Fields[1]->Value; /* Move back to the bookmark this may not be the next record anymore if something else is changing the dataset asynchronously */ Customers->GotoBookmark(SavePlace); // Set the value Customers->Edit(); // This is the safe way to change 'CustNo' field Customers->FindField("Field2")->AsString = PrevValue; // This is *not* the safe way to change 'CustNo' field // Customers->Fields->Fields[1]->AsString = PrevValue; // Free the bookmark } __finally { Customers->FreeBookmark(SavePlace); }; } /* To ensure that the button is disabled when there is no previous record, the OnDataChange event of the DataSource detects when the user moves to the beginning of file (BOF property becomes true), and disables the button. Detection occurs on scrolling and editing, not selection with the mouse. */ void __fastcall TForm1::DS2DataChange(TObject *Sender, TField *Field) { if (Customers->Bof) Button2->Enabled = False; else Button2->Enabled = True; }
Delphi Examples:
{ This example uses a button to copy the value of a field in the previous record into the corresponding field in the current record. The field to copy is specified by using FindField and the name of the field. } procedure TForm1.Button1Click(Sender: TObject); var SavePlace: TBookmark; PrevValue: Variant; begin Close; with Customers do begin { get a bookmark so that we can return to the same record } SavePlace := GetBookmark; try { move to prior record} FindPrior; { get the value } { This is the safe way to get 'CustNo' field } PrevValue := FindField('Field2').Value; { This is *not* the safe way to change 'CustNo' field } // PrevValue := Fields[1].Value; { Move back to the bookmark this may not be the next record anymore if something else is changing the dataset asynchronously } GotoBookmark(SavePlace); { Set the value } Edit; { This is the safe way to change 'CustNo' field } FindField('Field2').AsString := PrevValue; { This is *not* the safe way to change 'CustNo' field } // Fields[1].AsString := PrevValue; { Free the bookmark } finally FreeBookmark(SavePlace); end; end; end; { To ensure that the button is disabled when there is no previous record, the OnDataChange event of the DataSource detects when the user moves to the beginning of file (BOF property becomes true), and disables the button. Detection occurs on scrolling and editing, not selection with the mouse. } procedure TForm1.DS2DataChange(Sender: TObject; Field: TField); begin if Customers.Bof then Button1.Enabled := False else Button1.Enabled := True; end;
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|