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)
-   -   Consejos al acceder al estado de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=2723)

CORBATIN 04-08-2003 20:01:02

Consejos al acceder al estado de una tabla
 
Saludos a todos, me gustaría pedir consejo sobre cuál es la mejor forma de hacer lo siguiente:

if (table1.state in [dsinsert,dsedit] then begin
btaceptar.enabled:= true;
btcancelar.enabled := true;
bteliminar.enabled := true;
......
.....
......
end
else begin
btaceptar.enabled:= false;
btcancelar.enabled := false;
bteliminar.enabled := false;
......
.....
......
end;

o bien de esta forma:
btaceptar.enabled := table1.state in [dsinsert,dsedit];
btcancelar.enabled := table1.state in [dsinsert,dsedit];
bteliminar.enabled := table1.state in [dsinsert,dsedit];
......
......
.......

De la primera forma solo accedo una vez al estado de la tabla y escribo más código.

De la segunda forma escribo menos código pero accedo una vez por cada componente que quiero ajustar, pero la duda es ¿el acceder al estado de la tabla es costoso o más bien rápido?

Gracias a todos por vuestra ayuda.

andres1569 04-08-2003 20:15:33

Hola:

El acceder al estado de una tabla es algo rapidísimo, en realidad no se ejecuta ningún código interno al acceder a esa propiedad sino que se mira directamente la variable FState, así que puedes quedarte con la segunda opción, la primera crea código innecesario. Una tercera vía sería:

btaceptar.enabled := table1.state in [dsinsert,dsedit];
btcancelar.enabled := btaceptar.enabled;
bteliminar.enabled := btaceptar.enabled;

que evita la comprobación del in 2 veces.

La diferencia que cuenta aquí es de legibilidad y economía del código.

CORBATIN 04-08-2003 20:36:30

Muchas gracias, me imagina algo así pero quería que alguién lo confirmara, saludos.

Cabanyaler 06-08-2003 11:04:19

El coste, en ambos casos es lineal, por lo que cualquiera de ambas soluciones es igualmente buena.
Deberias preocuparte en el caso en que el coste fuese exponencial.
Cuando el coste es lineal, ya que el tiempo de acceso para cualquier componente es muy rápido, se considera el tmp minimo necesario, por lo que es igualmente bueno cualquiera de ambas como te digo.
Suerte.

delphi.com.ar 06-08-2003 16:29:58

Código:

procedure TForm1.Button1Click(Sender: TObject);
  procedure SetEnabled(AEnabled: boolean);
  begin
    btAceptar.Enabled  := AEnabled;
    btCancelar.Enabled := AEnabled;
    btEliminar.Enabled := AEnabled;
  end;
begin
  ...
  SetEnabled(Table1.State in [dsInsert,dsEdit]);
  ...
end;



La franja horaria es GMT +2. Ahora son las 18:16:58.

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