FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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.
__________________
No hay vientos favorables para quién no conoce su rumbo. |
#2
|
|||
|
|||
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.
__________________
Guía de Estilo Última edición por andres1569 fecha: 04-08-2003 a las 20:18:14. |
#3
|
|||
|
|||
Muchas gracias, me imagina algo así pero quería que alguién lo confirmara, saludos.
__________________
No hay vientos favorables para quién no conoce su rumbo. |
#4
|
||||
|
||||
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.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí. |
#5
|
||||
|
||||
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;
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|