Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 14-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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!
Responder Con Cita
  #3  
Antiguo 14-09-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 14-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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!
Responder Con Cita
  #5  
Antiguo 14-09-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
Nop, de echo hize la prueba nuevamente y non nofunciono.

haber si vieras otra cosa.

Grasis de nuevo.
Responder Con Cita
  #6  
Antiguo 14-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
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!

Última edición por jmariano fecha: 14-09-2005 a las 17:12:52.
Responder Con Cita
  #7  
Antiguo 14-09-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
Gracias, lo estoy probando tan pronto lo termine te platico como me fue.

gracias por tu tiempo
Responder Con Cita
  #8  
Antiguo 14-09-2005
cso2000 cso2000 is offline
Miembro
 
Registrado: may 2003
Ubicación: Guadalajara, Jalisco
Posts: 108
Poder: 21
cso2000 Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:46:49.


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
Copyright 1996-2007 Club Delphi