Ver Mensaje Individual
  #12  
Antiguo 02-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Reputación: 3
navbuoy Va por buen camino
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.
Responder Con Cita