PDA

Ver la Versión Completa : Duda en cuanto a valores de celda de un DBGrid


darkamerico
18-01-2013, 15:18:04
Saludos nuevamente estimados amigos, el asunto es el siguiente:

Tengo 2 DBGrids, uno dependiente del otro, tipo maestro-detalle:

- EL DBGrid maestro se llama gridTrabajos
- El DBGrid dependiente del anterior se llama gridMovTrabajos.

La idea es que cuando se haga click en una fila de gridTrabajos se extraiga el valor de la celda de la columna 0, que se llama id_trabajo, para que pase a ser parametro de la consulta de gridMovTrabajos.

Mi problema nace cuando deseo extraer el valor de la columna 0 en el evento OnCellClick de gridTrabajos.

Aqui les muestro el codigo de ese evento:

procedure TForm1.gridTrabajosCellClick(Column: TColumn);
begin
idTrabajoSelecc:=StrToInt((gridMovTrabajos.Columns[0].Field.text));
q_GridMovTrabajo.Close;
q_GridMovTrabajo.Params[0].AsInteger:=idTrabajoSelecc;
q_GridMovTrabajo.Open;
end;


El problema se suscita en la primera linea del evento:

idTrabajoSelecc:=StrToInt((gridMovTrabajos.Columns[0].Field.text));

El error de esa linea dice: "Access violation at address 005A871B in module..."

Alguien puede darme una luz sobre como extraer ese valor pero en entero?

Saludos

darkamerico
18-01-2013, 16:14:49
Buscando en la red, encontre finalmente la solucion a esto, aqui les dejo el codigo para quien desee:

procedure TForm1.gridDetalleTrabajosCellClick(Column: TColumn);
begin
idTrabajoSelecc:=gridDetalleTrabajos.DataSource.DataSet.Fields[0].AsInteger;
q_GridMovTrabajo.Close;
q_GridMovTrabajo.Params[0].AsInteger:=idTrabajoSelecc;
q_GridMovTrabajo.Open;
end;

Caminante
18-01-2013, 16:19:54
Prueba asi:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
q_GridMovTrabajo.Close;
q_GridMovTrabajo.Params[0].AsInteger:=dbgrid1.Fields[0].AsInteger;
q_GridMovTrabajo.open
end;


Que bueno q encontraste la solucion.

Saludos

darkamerico
18-01-2013, 16:36:51
Prueba asi:

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
q_GridMovTrabajo.Close;
q_GridMovTrabajo.Params[0].AsInteger:=dbgrid1.Fields[0].AsInteger;
q_GridMovTrabajo.open
end;


Que bueno q encontraste la solucion.

Saludos

Gracias Caminante, igual tu aporte es valioso, un abrazo

cloayza
19-01-2013, 17:53:45
Una pregunta...

Que pasaría si:

1) Elimino la columna 0 del grid maestro.
2) Muevo la columna 0 a otra posición.

El código seguiría funcionando?.

Yo en estos casos prefiero utilizar los nombre del campo en forma literal.


procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
q_GridMovTrabajo.Close;
q_GridMovTrabajo.Params[0].AsInteger:=dbgrid1.Dataset.FieldByName('ID_TRABAJO').AsInteger;
q_GridMovTrabajo.open
end;


Es un cambio sutil pero creo que me protege de algunas situaciones.

Saludos cordiales.