En C++ Builder 6, para acceder a los campos de una fila específica en un DBGrid, puedes hacerlo a través del conjunto de datos (dataset) que está vinculado al DBGrid. El DBGrid está conectado a un TDataSource, el cual a su vez está vinculado a un TQuery, TTable, o cualquier otro componente de acceso a bases de datos. Los campos de los registros se gestionan mediante objetos TField.
Para acceder al valor de un campo desde el DBGrid, puedes seguir estos pasos:
1. Acceso directo a través de TQuery o TTable
Si sabes qué campo específico deseas acceder, puedes utilizar el método FieldByName() o Fields[] del componente TQuery o TTable.
Código:
AnsiString valorCampo = Query1->FieldByName("nombre_campo")->AsString;
2. Acceso desde el componente DBGrid
El componente DBGrid no tiene acceso directo a los datos; sin embargo, puedes obtener los campos a través del conjunto de datos (DataSet) que está vinculado al TDataSource del DBGrid.
Ejemplo Accediendo al Campo de la Fila Actual:
Código:
void __fastcall TForm1::AccederCampoDesdeDBGrid()
{
// Obtener el conjunto de datos asociado al DBGrid
TDataSet *dataset = DBGrid1->DataSource->DataSet;
if (dataset->Active && !dataset->Eof)
{
// Obtener el valor del campo desde el dataset de la fila actual
AnsiString valorCampo = dataset->FieldByName("nombre_campo")->AsString;
ShowMessage("Valor del campo: " + valorCampo);
}
}
3. Acceso mediante SelectedField y SelectedRows
Si deseas acceder al campo seleccionado en el DBGrid, puedes utilizar la propiedad SelectedField. Esto devuelve el campo de la columna actualmente seleccionada.
Ejemplo usando SelectedField:
Código:
void __fastcall TForm1::AccederCampoSeleccionado()
{
TField *campoSeleccionado = DBGrid1->SelectedField;
if (campoSeleccionado != NULL)
{
ShowMessage("Campo seleccionado: " + campoSeleccionado->FieldName +
"\nValor: " + campoSeleccionado->AsString);
}
else
{
ShowMessage("No hay ningún campo seleccionado.");
}
}
4. Acceso a un campo en una fila seleccionada usando SelectedRows
Si el DBGrid está en modo multiselección y deseas obtener datos de las filas seleccionadas, puedes iterar sobre las filas seleccionadas usando la propiedad SelectedRows.
Ejemplo accediendo a campos de varias filas seleccionadas:
Código:
void __fastcall TForm1::AccederCamposFilasSeleccionadas()
{
TDataSet *dataset = DBGrid1->DataSource->DataSet;
for (int i = 0; i < DBGrid1->SelectedRows->Count; i++)
{
// Ir a la fila seleccionada
dataset->GotoBookmark(DBGrid1->SelectedRows->Items[i]);
// Obtener el valor del campo en esa fila seleccionada
AnsiString valorCampo = dataset->FieldByName("nombre_campo")->AsString;
ShowMessage("Valor del campo en fila seleccionada: " + valorCampo);
}
}
Resumen:
FieldByName(): Es la forma más común y directa de acceder a un campo por su nombre.
DBGrid1->SelectedField: Para acceder al campo seleccionado en la columna actual.
SelectedRows: Para acceder a campos de varias filas seleccionadas cuando el DBGrid está en modo multiselección.
Con estos métodos, puedes acceder a los campos de un registro en un DBGrid y manejar los datos según sea necesario.