Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   utilidad del application.tag (https://www.clubdelphi.com/foros/showthread.php?t=4454)

Giniromero 16-10-2003 12:00:37

utilidad del application.tag
 
Hola,

Estoy trabajando con Delphi 6 e interbase7.

He visto, en una aplicación que me han pasado de ejemplo, que utilizan application.tag, pero aunque más o menos veo para que lo usa, me gustaría que, si es posible, alguien me explicase bien cual es la utilidad de este procedimiento.

Como usarlo, y si puedo usarlo con IB7. (la aplicación ejemplo esta hecha con Paradox y delphi 3)

Muchas gracias por todo, a todos.

Virginia

andres1569 16-10-2003 13:26:02

Hola:

La propiedad Tag la tienen todos los decsndientes de TComponent, es una propiedad comodín de tipo Longint para que cada cual la use como quiera.

No tiene nada que ver con ninguna base de datos, otra cosa es que el ejemplo que has visto use esa Base de Datos y emplee esa propiedad con algún fin relacionado, algo que se me escapa en este momento. No estaría mal que pusieras ese código donde se emplea dicha propiedad, al menos a mí me crea cierta curiosidad verlo.

Saludos

Giniromero 16-10-2003 13:52:11

Hola,


Al pulsar un botón del form1, te muestra un Form, form2, con un DBGrid en el que se muestran distintos registros de una tabla, Tabla2. Si seleccionas alguno de ellos, haciendo dobleclick sobre el dbgrid, entonces salimos del form, form1, con modal OK.

Si es así, es cuando entra en acción el Application.Tag.


Application.Tag := Form2.Tabla2CAMPOInteger.Value;
ApliRangos(sender);


donde el procedure ApliRangos(sender), tiene el siguiente código.


Tabla1.FindKey([Application.Tag]);


Siendo tabla1 una tabla que está en el form1 y que quiero que muetre el valor seleccionado.

El problema es, que no quiero usar locate, que es lo más parecido que encuentro al findKey, pues la tabla1 es grande, y se puede eternizar la busqueda.

estoy intentando hacerlo usando sql en un IBDataSet.

Pero el registro que selecciono no es el actual de la tabla2, por lo que no sé como obtener ese valor para asignarselo a la tabla1.

Espero que si no podeis ayudarme, al menos haya servido para "matar" la curiosidad de andres1569 ;)
Saludos

Virignia

__cadetill 16-10-2003 14:38:12

Bueno, básicamente está utilizando la propiedad Tag como una variable declarada en la sección Public del Form2 de tipo Integer.

Para lo que tu quieres, o bien utilizas el método que te propone el exemplo (no se me hubiese ocurrido nunca :p) o bien declaras una variable como te he mencionado, en la sección public del Form2. Loego sólo tendrás que recuperar el valor de dicha variable (o de Application.Tag) para montar la sentencia SQL que quieras.

Eso sí, el utilizar la propiedad Tag, te limita a que el valor de retorno sea un entero, por lo que si quieres devolver otro tipo de dato, no te servirá y deberás recurrir a lo de declarar la variable en la sección public.

Espero te sirva

andres1569 16-10-2003 16:37:40

Hola:

Curiosidad "matada". La verdad es que no me gusta la idea de usar esa propiedad para ese fin, no digo que no funcione porque en este caso sí sirve para almacenar temporalmente un valor, pero se podría usar alguna variable global al programa con un nombre más descriptivo. O también se podría pasar ese valor como parámetro a la función ApliRangos, aunque esto supone aplicar ese rango antes de cerrar el Form2, en cuyo caso no hace falta guardar esa variable temporalmente.

Como dice Cadetill, Tag sólo sirve si se busca por un campo de tipo Integer.

En cuanto a la pregunta de cómo realizar esa búsqueda más eficientemente, supongo que es mejor lanzar una consulta SQL, pero esta pregunta debes hacerla en el foro correspondiente, que en este caso creo que es el de Conexión con bases de Datos.

roman 16-10-2003 18:05:39

Cita:

Posteado originalmente por cadetill
[...]Eso sí, el utilizar la propiedad Tag, te limita a que el valor de retorno sea un entero, por lo que si quieres devolver otro tipo de dato, no te servirá y deberás recurrir a lo de declarar la variable en la sección public.
Esto no es del todo cierto. Tag es de tipo LongInt que ocupa el mismo espacio en memoria que un puntero y con un puntero podemos devolver un sinfín de cosas.

De cualquier forma, estoy de acuerdo con andres1569 en el sentido de que es conveniente usar otros métodos para el fin del ejemplo indicado ya que Tag es una propiedad confusa y poco descriptiva. Más aún, en este caso en particular lo que yo hubiera hecho es lo que hacen todos los cuadros de diálogo: permitir que el usuario escoja un valor y devolver dicho valor en una propiedad pública. Por ejemplo, TOpenDialog permite seleccionar un archivo y éste lo devuelve en la propiedad FileName.

En este caso podría ser algo así:

Código:

type
  TForm2 = class(TForm)
  private
    FValorABuscar: Integer;
  public
    property ValorABuscar: Integer read FValorABuscar write FValorABuscar;
  end;

Cuando deseemos obtener dicho valor haríamos:

Código:

with TForm2.Create(nil) do
begin
  try
    if ShowModal = ID_OK then
      Table1.Findkey([ValorABuscar]);
  finally
    Free;
  end;
end;

Y por si les interesa, en este hilo:

http://www.clubdelphi.com/foros/show...ghlight=TField

pueden encontrar una aplicación de la propiedad Tag que me parece adecuada y, debido al "casting", el código no pierde legibilidad.

// Saludos

pd: Por cierto, ¿se han fijado que no puede busarse el término "Tag" en la ventana de búsquedas?

roman 16-10-2003 18:11:15

¡Ah! Lo olvidaba. ¿De quién creen que fue la idea (muy buena en mi opinión) del uso de Tag que se da en el hilo mencionado?

Pista: Es alguien que ha participado en el presente hilo y cuyo nombre comienza con a! :)

// Saludos

Giniromero 16-10-2003 18:24:48

Gracias a todos por la aclaración.

Ya había observado, que a fin de cuentas, estaba usando el application.tag con si de una variable de tipo integer estuvieramos tratando. Por eso no entendía por que no usaba directamente una variable, y eso es lo que me hizo pensar que no tenía ni idea de que funcionamiento y posibles usos tenía el application.tag, y pensé que tal vez tenía alguna propiedad, que una variable no tiene, y por eso habían decidido usar el application.tag en vez de una variable.



roman
Cita:


pd: Por cierto, ¿se han fijado que no puede busarse el término "Tag" en la ventana de búsquedas?
Si, de hecho eso también me hizo pensar que tal vez esta application tenía un por que desconocido para mi, en el que el tag tenía algo que ver....

Bueno, lo dicho, muchas gracias a todos.

Virginia

andres1569 17-10-2003 12:21:53

Román escribió:
Cita:

¡Ah! Lo olvidaba. ¿De quién creen que fue la idea (muy buena en mi opinión) del uso de Tag que se da en el hilo mencionado?

Pista: Es alguien que ha participado en el presente hilo y cuyo nombre comienza con a!
Pues la idea no lo sé, porque forma parte de los recursos de programación que andan por ahí desde hace décadas, la misma ayuda de Delphi indica que Tag se puede usar como un puntero; ocurre que a veces no pensamos en esas particularidades.

El post creo que fue de alguien cuyo nombre que empieza por an, y el post siguiente fue de alguien cuyo nombre acaba por an. El hilo lo empezó alguien cuyo nick empieza por a y lo terminó alguien cuyo nick empieza también por a, ¿curioso?. Bueno, dejémonos de bobadas.

En cuanto a lo de no poder buscar en los foros por palabras de menos de 4 letras, la verdad es que me ha fastidiado unas cuantas veces, buscando palabras como ADO, pero qué le vamos a hacer.

Un saludo


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

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