Jere_84
14-07-2012, 01:15:49
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.
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;
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.
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;