Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Question ¿Cómo recorrer los Server Modules de una aplicación?

Hola!, necesito recorrer los server modules de una aplicación. Básicamente lo que tengo es el nombre del ServerModule en una variable de tipo string, a partir de esto, la mision es recorrer todos los server modules una vez que consiga el que se llame igual a mi variable, comenzaría a recorrer sus componentes uno a uno. Esta función va a estar en una unit y se podría llamar desde toda la aplicación. El problema que me surgió es: como obtener el objeto a partir de un string.
Este código que hice anda pero en el mismo SM, el FindComponent me ayuda ya que encuentra los componentes que están ubicados en ese ServerModule, pero desde otra unit esto no funciona porque no estan, por lo tanto necesitaria localizar ese SM y poder trabajar con el mismo. se me ocurrio que quizas pueda existir alguna func. de mas bajo nivel que sirvan en esta labor o algunas del desconocido (para mi) API de windows.
Espero haberme explicado bien

Gracias de antemano.

Código Delphi [-]
unction TPLDBVarios.ObtenerSQL(vServerModule, vProvider: string): string;
var
  i, j: integer;
  vServerMod, vDataSetPro, vDataSet: TComponentName;
  DS: TComponent;
begin
  try
    vServerMod := TDSServerModule(FindComponent(vServerModule)).Name;
    vDataSetPro := TDataSetProvider(FindComponent(vProvider)).Name;
    DS := TDatasetProvider(FindComponent(vProvider)).Owner;

    if DS is TDSServerModule then
    begin
      for i := 0 to DS.ComponentCount - 1 do
      begin
        if DS.Components[i].name = vDataSetPro then
        begin
          vDataSet:=  TDataSetProvider(DS.Components[i]).DataSet.Name;
          for j := 0 to DS.ComponentCount - 1 do
          begin
            if DS.Components[j].Name = vDataSet then
            begin
              Result:= TSQLdataSet(DS.Components[j]).CommandText;
              Exit;
            end;
          end;
        end;
      end;
    end;
  finally
    //...
  end;
end;
Responder Con Cita
  #2  
Antiguo 14-07-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Si esos objetos mayores fueron creados dándole el objeto Application como dueño, puedes usar este último y su método FindComponent para localizarlos.

Supón que has hecho esto:
Código Delphi [-]
Application.CreateForm (TdmServidor, dmServidor);
Entonces luego puedes emplear esta expresión:
Código Delphi [-]
Application.FindComponent ('dmServidor')

Agrego: Esto es válido ya que Application también es un "componente" (la clase TApplication desciende de TComponent).

Espero te sirva, saludos.

Última edición por Al González fecha: 14-07-2012 a las 02:06:36.
Responder Con Cita
  #3  
Antiguo 14-07-2012
Avatar de Jere_84
Jere_84 Jere_84 is offline
Miembro
NULL
 
Registrado: sep 2011
Ubicación: Córdoba, Argentina
Posts: 214
Poder: 0
Jere_84 cantidad desconocida en este momento
Hola Al González!, para este caso no funciona ya que no fueron creados con el objeto Application, como es un servidor datasnap las clases son instanciadas de forma automática internamente por el delphi (no se de que manera). Hice la prubea en el servidor y FindComponent me devuelve NIL
Pero me sirvio conocerlo, es util para muchas ocasiones. Lo que me serviria para este caso es poder localizar un componente visual dentro de mi App que no necesariamente halla sido creado aun ¿Que otro método alternativo a este puede haber para localizar un componente visual dentro de una aplicación?

Saludos.
Responder Con Cita
  #4  
Antiguo 14-07-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Me parece que usas alguna versión desde la 2009 en adelante. Hace varios años tuve la fortuna de estudiar algo de eso y ayudar a un grupo de desarrollo, pero ha pasado el tiempo y como ya no tengo acceso a lo más reciente de DataSnap, se me dificulta.

Agradecería si alguien tuviera la gentileza de dejarme entrar a su Delphi 2009 o superior mediante un acceso remoto. Me serviría para intentar ayudar a Jere_84, como para refrescar en mi memoria aquellos interesantes temas.

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
Alguien a incluido Merge modules de Firebird ?? pmtzg Firebird e Interbase 0 27-08-2011 20:27:44
Como configurar aplicacion delphi con SQL Server para poder instalar en cualquier PC RedVenom Conexión con bases de datos 9 19-06-2011 23:40:58
Recorrer todos los formularios de mi Aplicacion rgstuamigo OOP 8 31-01-2009 18:35:39
Recorrer los TForm de una aplicación afxe OOP 3 13-11-2008 11:43:02
Merge Modules son necesarios? m@r Varios 2 14-01-2005 16:08:20


La franja horaria es GMT +2. Ahora son las 20:12:11.


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