Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con TclientDtataset (https://www.clubdelphi.com/foros/showthread.php?t=25166)

cso2000 14-09-2005 15:58:51

Problemas con TclientDtataset
 
Saludos a todos,

Mi problema es el siguiente:

Estoy creano un componente TclientDataset al cual le quiero agregar dos componetes TsqlDataset y TdatasetProvider, el problema es no he podido asignarle la propiedad ProviderName a mi componente que tendria que ser el nombre del TdatasetProvider que declaro como variable dentro del mismo componete,

anexo el codigo para ver si me pueden ayudar:

Código:

unit SCEClientDataSet;

interface

uses
  Windows, Messages, SysUtils, Classes, DB, DBClient, Provider, SqlExpr;

type
  TSCEClientDataSet = class(TClientDataSet)
  private
    procedure SetSqlDataset(const Value: TSQLDataSet);
    { Private declarations }
  protected
    // aqui declaro la variable
    FDatasetProvider : TDataSetProvider;
    FSqlDataset : TSQLDataSet;
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public declarations }
  published
    // esta la utilizo para
    property SqlDataset : TSQLDataSet Read FSqlDataset Write SetSqlDataset;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('dbExpress', [TSCEClientDataSet]);
end;

{ TSCEClientDataSet }

constructor TSCEClientDataSet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDatasetProvider:= TDataSetProvider.Create(Self);
  FDatasetProvider.DataSet := FSqlDataset;
  self.ProviderName := FDatasetProvider.Name;
end;

destructor TSCEClientDataSet.Destroy;
begin
  FDatasetProvider.Free;
  FDatasetProvider := Nil;
  inherited Destroy;
end;


procedure TSCEClientDataSet.SetSqlDataset(const Value: TSQLDataSet);
begin
  FSqlDataset := Value;
end;

end.

les agradesco toda la ayuda que puedan darme.

jmariano 14-09-2005 16:21:05

Tienes que darle un nombre al componente TDataSetProvider en el constructor Create de la clase (cuando un componente es creado manualmente no se le asigna un nombre por defecto).

Código Delphi [-]
constructor TSCEClientDataSet.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDatasetProvider:= TDataSetProvider.Create(Self);
  FDatasetProvider.DataSet := FSqlDataset;
  FDatasetProvider.Name := '(Nombre)';
  self.ProviderName := FDatasetProvider.Name;
end;

Saludos!

cso2000 14-09-2005 16:33:48

Gracias por responder.

Ya he probado algo asi, aun que veo una diferencia

Código:

FDatasetProvider.Name := '(Nombre)';
son nesesarios los parentesis ??

Gracias de nuevo.

jmariano 14-09-2005 16:44:24

No, jeje! :), en realidad lo que quería decir con '(Nombre)' es que pusieras cualquier nombre que quisieras como: 'DataSetProvider1' o lo que sea pero sin los parentesis.

Por cierto, ¿funcionó?

Saludos!

cso2000 14-09-2005 16:47:38

Nop, de echo hize la prueba nuevamente y non nofunciono.

haber si vieras otra cosa.

Grasis de nuevo.

jmariano 14-09-2005 17:10:35

Existe otra manera que quizás sea mas acorde a lo que quieres hacer, utilizar el método "SetProvider" del ClientDataSet:

Código Delphi [-]
  procedure SetProvider(Provider: TComponent);

La desventaja de usar este método es que tendrás que invocarlo cada vez que abras el ClientDataSet. Por lo que mejor sería asignarlo en el método que se ejecuta antes de abrir tu componente:

Código Delphi [-]
procedure TSCEClientDataSet.DoBeforeOpen; override;
begin
  SetProvider(FDatasetProvider);
  inherited;  
end;

Saludos!

cso2000 14-09-2005 17:32:04

Gracias, lo estoy probando tan pronto lo termine te platico como me fue.

gracias por tu tiempo

cso2000 14-09-2005 17:44:11

Gracias.

Me funcion muy bien, Claro me me esta dando otros errores ya que aun estoy en el proceso de construccion de mi componenete.

Para todos los del Club.

jmariano me ayudo a resolver mi problema sin embargo muchos se tomaron el tiempo de leer este hilo y el tiempo es lo mas valioso que tenemos.

Gracias por su tiempo.


La franja horaria es GMT +2. Ahora son las 07:54:23.

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