Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo recorrer los Server Modules de una aplicación? (https://www.clubdelphi.com/foros/showthread.php?t=79535)

Jere_84 14-07-2012 01:15:49

¿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. :eek:
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 :rolleyes:

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;

Al González 14-07-2012 02:02:55

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.

Jere_84 14-07-2012 14:50:31

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 :mad:
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 :rolleyes: ¿Que otro método alternativo a este puede haber para localizar un componente visual dentro de una aplicación?

Saludos.

Al González 14-07-2012 17:02:53

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. :)


La franja horaria es GMT +2. Ahora son las 19:55:48.

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