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 02-09-2011
jlrdz jlrdz is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 50
Poder: 14
jlrdz Va por buen camino
Question Llamar componente dinamico

Saludos a todos primero que nada, tengo una duda y espero puedan ayudarme.

¿Cómo puedo llamar a un componente de forma dinámica?, es decir, yo tengo un módulo de datos donde tengo varias tablas, desde un formulario tengo una funcion a la cual yo le mando el nombre de una tabla

Código Delphi [-]

llamar_tabla('telefonos');

..

//mi procedimiento es 

procedure llamar_tabla(tabla:string)
begin

//tabla es el nombre que envío
mimodulo.tabla.open;  //active, etc..., cualquier otra propiedad.

end;

Pero no puedo hacer referencia a la tabla en el módulo de datos porque lo estoy pasando como una variable string que viene desde la funcion cuando la he llamado y me da el error:

identifier expected but string constant found.

podría hacerlo con Case o if else, por ejemplo:

Código Delphi [-]
if tabla='telefonos' then
begin
mimodulo.telefonos.open;
end
else ...

pero si son muchas las tablas seria más codigo y es por eso que quiero hacerlo dinámico, pasarle el nombre de la tabla al procedimiento y luego ya llamar a esa tabla con ese nombre y hacer uso de sus propiedades.

Espero me haya explicado y puedan ayudarme, gracias.
Responder Con Cita
  #2  
Antiguo 02-09-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmm no estoy muy seguro
pero si haces algo como esto
Código Delphi [-]
 
 
mimodulo.tabla.Tablename := tabla
mimodulo.tabla.open
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 02-09-2011
jlrdz jlrdz is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 50
Poder: 14
jlrdz Va por buen camino
...

No creo que sea posible porque tengo varios formularios y cada uno de ellos asignados a una tabla, en este caso eso lo quiero usar específicamente para la funcion Locate de una tabla pero quiero usar ese mismo locate para todas las tablas simplemente cambiando dinamicamente la tabla, el campo a buscar y el la palabra.

Código Delphi [-]
mimodulo.tabla.Locate('campo', 'palabra', [loPartialKey]);

donde tabla, campo y palabra los envío al llamar la funcion.

Saludos y gracias por tu respuesta, seguiré intentando.
Responder Con Cita
  #4  
Antiguo 02-09-2011
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
No me queda claro qué quieres lograr. Podrías, en lugar de pasar el nombre de la tabla como parámetro, pasarle el componente en sí:

Código Delphi [-]
procedure llamar_tabla(Tabla: TTable)
begin

  Tabla.Locate('campo', 'palabra', [loPartialKey]);

end;

y lo llamarías así (por ejemplo):

Código Delphi [-]
llamar_tabla(mimodulo.tablaTelefonos);

O bien, algo similar a lo que dice oscarac, creando un objeto Table al vuelo dentro del procedimiento, al cual le asignas el nombre de la tabla.

// Saludos
Responder Con Cita
  #5  
Antiguo 02-09-2011
jlrdz jlrdz is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 50
Poder: 14
jlrdz Va por buen camino
...

Gracias román, lo hice de esa manera enviando el componente y me funciono bien. Saludos y gracias por sus respuestas.
Responder Con Cita
  #6  
Antiguo 06-09-2011
jlrdz jlrdz is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 50
Poder: 14
jlrdz Va por buen camino
Cita:
Empezado por roman Ver Mensaje
No me queda claro qué quieres lograr. Podrías, en lugar de pasar el nombre de la tabla como parámetro, pasarle el componente en sí:

Código Delphi [-]
procedure llamar_tabla(Tabla: TTable)
begin

  Tabla.Locate('campo', 'palabra', [loPartialKey]);

end;

y lo llamarías así (por ejemplo):

Código Delphi [-]
llamar_tabla(mimodulo.tablaTelefonos);

O bien, algo similar a lo que dice oscarac, creando un objeto Table al vuelo dentro del procedimiento, al cual le asignas el nombre de la tabla.

// Saludos
Me surgió otra duda más con esto que me funciona de maravilla, ojalá pudieras ayudarme y es que como me dices, envio el componente a mi procedimiento que es una tabla, esto me limita a solo tablas pero me gustaría enviar componentes de consulta, para las tablas uso el componente TMyTable y para las consultas uso TMyQuery, ¿Cómo puedo modificar mi procedimiento para que los parametros sean opcionales?, o sea que yo pueda enviar ya sea un componente TMyTable o TMyQuery.

Actualmente mi procedimiento está así:

Código Delphi [-]
//así lo tengo declarado
procedure llenar_combo(lista: Matriz; tabla:TMyTable);

//así lo mando llamar
llenar_combo(Campos, Mi_Modulo.telefonos);

Eso me limita a sólo poder enviar una tabla y el parametro es requerido, lo que quiero es que tenga la opcion de enviar un componente TMyTable o TMyQuery de forma opcional, espero puedan ayudarme una vez más. Saludos.
Responder Con Cita
  #7  
Antiguo 06-09-2011
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
Suongo que puedes pasar como parámetro un TDataSet, ancestro común de todos los componentes de acceso a datos. Claro que, dentro de tu rutina, únicamente podrás usar métodos genéricos del TDataSet.

// Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamar Formulario Builder C++ 6 , no se como llamar un Formulario. Angelex C++ Builder 2 03-07-2010 02:02:42
Componente Dinamico mjjj Varios 1 16-01-2009 15:36:01
evento on keypress y componente dinamico Rabata OOP 4 26-07-2005 21:54:38
red con direccionamiento dinamico santiago14 Conexión con bases de datos 1 24-01-2005 13:07:50
IP Dinámico buitrago Varios 3 10-09-2003 18:35:43


La franja horaria es GMT +2. Ahora son las 19:23:24.


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