Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 16-10-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 16-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 16-10-2003 a las 13:55:29.
Responder Con Cita
  #4  
Antiguo 16-10-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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 ) 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
Responder Con Cita
  #5  
Antiguo 16-10-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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.
__________________
Guía de Estilo
Responder Con Cita
  #6  
Antiguo 16-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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?
Responder Con Cita
  #7  
Antiguo 16-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡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
Responder Con Cita
  #8  
Antiguo 16-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #9  
Antiguo 17-10-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
__________________
Guía de Estilo

Última edición por andres1569 fecha: 17-10-2003 a las 16:45:27.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:40:07.


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
Copyright 1996-2007 Club Delphi