PDA

Ver la Versión Completa : cambiar datasource.dataset en tiempo de ejecución


jzginez
30-11-2007, 18:54:54
Hola amigos estoy usando delphi 7 y las fibplus les explico tengo un datamodule con todos los componentes necesarios para conectarme a mi base de datos y tablas en mi forma principal tengo un stringgrid el cual relleno con el nombre de los componentes tpFIBDataSet
StringGrid1.Cells[0,0]:= 'Tablas';
StringGrid1.Cells[1,0]:= 'Numero';
For a:= 0 to (DtmOrigen.ComponentCount -1) do
If DtmOrigen.Components[a].ClassName = 'TpFIBDataSet'
Then Begin
StringGrid1.Cells[0,b]:= DtmOrigen.Components[a].Name;
StringGrid1.Cells[1,b]:= IntToStr(DtmOrigen.Components[a].ComponentIndex);
b:= b+1;
StringGrid1.RowCount:= StringGrid1.RowCount+1;
End;

además tengo un datasource y un dbgrid lo que quiero hacer y no encuentro la manera ( :D ) es que al hacer click en alguna celda del stringgrid la propiedad del dataset del datasource cambie y así poder ver los datos almacenados en esa tabla
DataSource1.dataset:= ????????? (los datos estan en un modulo de datos)
Gracias

maeyanes
30-11-2007, 19:28:41
Hola...

Teniendo el nombre del componente, puedes usar la función FindComponent o crearte una que te devuelva un TDataSet:


function TDataModule1.DataSetByName(const AName: string): TDataSet;
var
I: Integer;

begin
for I := 0 to Pred(ComponentCount) do
if (Components[I] is TDataSet) and (Components[I].Name = AName) then
begin
Result := TDataSet(Components[I])
Exit
end;
Result := nil
end;


Luego desde la forma en cuestion haces:


DataSource1.DataSet := DataModule1.DataSetByName('DatosCliente')


Usando FindComponent sería algo así:


DataSource1.DataSet := DataModule1.FindComponent('DatosCliente') as TDataSet




Saludos...

jzginez
30-11-2007, 19:42:48
DataSource1.DataSet := DataModule1.FindComponent('DatosCliente') as TDataSet



Muchas gracias maeyanes aunque aun no lo pruebo, pero estoy seguro que esta es la solución ya que yo lo estaba intentando solo con
DataSource1.DataSet := DataModule1.FindComponent('DatosCliente')
y me marcaba error de tipos


gracias