Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   erro con campos vacios en el dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=71807)

DarkBlue 12-01-2011 04:05:11

erro con campos vacios en el dbgrid
 
hola amigos me encuentro en un problema que pienso que es muy sencillo sin embargo no se me ocurre como resolverlo apuesto que con su amplia experiencia sera resuelto en un segundo.


lo que pasa es que lleno un dbgrid con una consulta , hasta ahi todo bien lo que es un problema es que cuando el campo tiene un valor en blanco o como decirlo no tiene escrito nada,despues de darle el doble click me manda un mensaje de error como el que sigue:



proyect raised exception class EAccessViolation with message 'Access violation at address 00569023 in module 'lala.exe' . Read of address 00000000'. Process stopped. Use step or run to continue

este es el codigo del evento DBGrid2DblClick

Código:

claveservicio:=dbgrid2.Fields[1].asstring;
¿como puedo evitar este error? . La verdad solo quiero saber si contiene algun valor el campo o no , intente con la funcion varisnull y length para saber si tiene o no un valor ese campo

Chris 12-01-2011 04:55:05

Realmente desconocía que se podía acceder a los valores de esa forma que pones. Te recomiendo que para acceder a los valores de un registro es mejor que utilices el componente de acceso a datos y lo hagas referenciando el nombre del campo, no con el número del campo en el arreglo. Esto te ayudará a hacer un código más sólido.

Código Delphi [-]
claveservicio:= MiQuery.FieldByName('clave_servicio').asstring;

Saludos,
Chris

Aleca 12-01-2011 11:15:22

coincido con chris nunca lo habia usado de esa forma, a veces lo hice de esta forma
Código Delphi [-]
  Grilla.SelectedField.AsString
Saludos :)

Neftali [Germán.Estévez] 12-01-2011 13:08:32

Posiblemente puedas evitarlo también preguntando si el campo al que estás intentando acceder está o no asignado:

Código Delphi [-]
if Assigned(dbgrid2.Fields[1]) then begin
  claveservicio:=dbgrid2.Fields[1].asstring;
end
else begin
  claveservicio:='';
end;

DarkBlue 12-01-2011 21:31:00

Es que ese no es el caso tengo que mostrar todos los resultados en el grid(por que no solo es un resultado de la consulta son muchas filas) y que desde ahí seleccione el dato dándole doble clic.


He solucionado parcialmente el problema dándole un valor al resultado que no lo tiene. Pero aun así necesito resolver ese problema

DarkBlue 12-01-2011 21:33:49

Muchas gracias neftali sabia que no me podías fallar siempre con una respuesta acertada es justo lo que necesitaba. Posté antes de recargar muchas gracias.


La franja horaria es GMT +2. Ahora son las 00:46:46.

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