Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Duda en cuanto a valores de celda de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=82036)

darkamerico 18-01-2013 15:18:04

Duda en cuanto a valores de celda de un DBGrid
 
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:

Código Delphi [-]
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:

Código Delphi [-]
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

Solucion
 
Buscando en la red, encontre finalmente la solucion a esto, aqui les dejo el codigo para quien desee:

Código Delphi [-]
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:

Código Delphi [-]
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

Gracias a ti
 
Cita:

Empezado por Caminante (Mensaje 453634)
Prueba asi:

Código Delphi [-]
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.

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 17:33:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi