Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   cambiar datasource.dataset en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=50892)

jzginez 30-11-2007 18:54:54

cambiar datasource.dataset en tiempo de ejecución
 
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
Código Delphi [-]
  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
Código Delphi [-]
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:

Código Delphi [-]
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:

Código Delphi [-]
DataSource1.DataSet := DataModule1.DataSetByName('DatosCliente')

Usando FindComponent sería algo así:

Código Delphi [-]
DataSource1.DataSet := DataModule1.FindComponent('DatosCliente') as TDataSet



Saludos...

jzginez 30-11-2007 19:42:48

Cita:

Empezado por maeyanes (Mensaje 249683)
Código Delphi [-]
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
Código Delphi [-]
DataSource1.DataSet := DataModule1.FindComponent('DatosCliente')
y me marcaba error de tipos


gracias


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

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