![]() |
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 |
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 |
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 |
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 |
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. |
Cita:
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 Código:
with TForm2.Create(nil) do 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? |
¡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 |
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:
Bueno, lo dicho, muchas gracias a todos. Virginia |
Román escribió:
Cita:
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 00:33:38. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi