PDA

Ver la Versión Completa : problema con DBGRID.selectedfield.isnull


gloritavn
20-09-2003, 05:07:04
Hola foristas:
tengo una forma en la que manejo un dbgrid y cuando este se encuentra vacio si tu das doble click en el o si das un enter o un backspace al estar vacio no debe ocurrir algo.... esto lo estoy controlando en los siguientes eventos:

procedure TFasignadi.DBGdiagregadoDblClick(Sender: TObject);
begin
if (Iadis=6)and not(DBGdiagregado.selectedField.IsNull)then
begin
Svadiemp:=DBGdiagregado.Fields[0].AsString;
BBeliminaadi.setfocus;
end;
end;

procedure TFasignadi.DBGdiagregadoKeyPress(Sender: TObject; var Key: Char);
begin
if((key=#13)or(key=#9))and(Iadis=6)and not DBGdiagregado.SelectedField.IsNull)then
begin
if(Iadis=6)then
begin
Svadiemp:=DBGdiagregado.Fields[0].AsString;
BBeliminaadi.setfocus;
end;
end
else
key:=#0;
end;

pero al momento de ejecutar el proyecto marca el error siguiente: acces violation at address 004EB1D1 in module 'proyecto.exe'. Read of address 00000000 esto solo ocurre en esta forma ya que en otras utilizo el mismo procedimiento y no hay error utilice un watch para ver el valor de DBGdiagregado.SelectedField.IsNull y no muestra si el valor es true o false muestra lo siguiente expression illegal in evaluator.... desde ya mil gracias por su atencion

roman
20-09-2003, 07:19:58
Lo de "expression illegal in evaluator" te lo marca precisamente porque hay algún objeto nilque está tratando de referenciar. Ya que difícilmente sería el dbgrid lo más seguro es que se trate de la propiedad SelectedField. Prueba hacer un debug examinando sólo

DBGdiagregado.selectedField

en lugar de

DBGdiagregado.selectedField.IsNull

En la redacción de tu mensaje no entiendo bien si por "estar vacio" te refieres al dbgrid o a la celda. Recuerda que, según la ayuda de Delphi, la propiedad SelectedField es nil si el dbgrid tiene la opción dgRowSelect activa (de forma que se selecciona una fila completa) o bien si no hay ninguna celda seleccionada (lo cual puede ocurrir si no hay registros o si aún no seleccionas ninguna celda).

// Saludos

LF_LS
20-09-2003, 07:31:21
Solo le dire a usted que es un codigo algo sencillo el que tiene ahi y que el error que esta teniendo es algo de las cosas del area que no se pueden explicar, creo que lo que debe de hacer es crear un evento para el caso en el que no haya algo en el DBGRID, talvez un mensaje que diga que debe de escribir algo en el mismo....eso se me ocurre, espero y le ayude en algo...:D

__cadetill
20-09-2003, 11:20:43
si te refieres a que el Grid no contenga valores (es decir que el Dataset asociado a éste esté vacio), puedes preguntar al Dataset, es decir

DBGrid1.DataSource.DataSet.IsEmpty

en lugar de mirar el SelecdField.IsNull

Espero te sirva