Fórum Duvida criação de componente de conexão em Run Time #342460

11/06/2007

0

Bom dia a Todos estou desenvolvendo uma solução no Delphi 100¬ OO, estou construindo as classes, porém quando começo a montar a classe de conexão estou com um problema nos seguintes componentes DataSetProvider e ClientDataSet o comando que uso para criar eles na classe é o seguinte:

type
TFuncionarios=class(Conexao)
function consultar_func(re:Integer):TDataSet;
end;

var
CDSConsFunc:TClientDataSet;
SQLDSConsFunc:TSQLDataSet;
DSConsFunc:TDataSource;
DSPConFunc:TDataSetProvider;

implementation

{ TFuncionarios }

constructor TFuncionarios.criar_obj_cons;
begin

end;
function TFuncionarios.consultar_func(re: Integer): TDataSet;
begin
DSPConFunc:=TDataSetProvider.Create(DSPConFunc);//sendo que assim ele não da erro mas também não cria os objetos eu coloquei também assim: DSPConFunc:=TDataSetProvider.Create(self);//nesse caso da erro de incompátivel tipos TComponent e TFuncionarios que é o nome da classe.

Observação:Quando eu coloco em um form normal com a seguinte sintaxe:
DSPConFunc:=TDataSetProvider.Create(Owner);// funciona normalmente, mas se eu colocar na classe com essa sintaxe diz que o nome Owner não foi declarado.

Será que alguém sabe o que pode estar acontecendo.

Desde de já agradeço a ajuda


Jujan

Jujan

Responder

Posts

11/06/2007

Ruyoutor

Se essa classe que você esta falando não for descendente de TComponet você vai ter que colocar nil na passagem do parâmetro. Esse parâmetro indica qual objeto vai ser o dono do objeto que você está criando, mas esse parâmetro tem que ser um objeto do tipo TComponet ou de uma classe descendente no caso de você fazer isso dentro do form e funcionar eu não sei porque, pois apesar do TForm ser descendente de TComponet geralmente quando eu vou passar a classe na qual eu estou dentro da implementação eu não passo owner eu passo self, mas tenta isso.
DSPConFunc:=TDataSetProvider.Create(nil);



Responder

Gostei + 0

11/06/2007

Jujan

Cara valeu pela força, porém não funcionou não.Quando eu coloco self dentro de um Form ele cria um objeto.
Ex: Se eu colocar no evento on click de um botão está criando outros botões e não o componente de conexão que eu quero que ele crie no meu caso o DataSetProvider e o ClientDataSet.Com o nil não dá erro porém não cria a instância do objeto.


Responder

Gostei + 0

11/06/2007

Jujan

Aqui está a classe:

unit U_ClasseFunc;

interface

uses DBXpress, DB, SqlExpr, DBClient, StdCtrls, Provider, FMTBcd,U_ClasseConexao;

type
TFuncionarios=class(Conexao)
re:integer;
nome:string;
c_cc:string;
status:string;
re_chefia:integer;
function consultar_func(re:Integer):TDataSet;
constructor criar_obj_cons;
constructor create;
end;

var

CDSConsFunc:TClientDataSet;
SQLDSConsFunc:TSQLDataSet;
DSConsFunc:TDataSource;
DSPConFunc:TDataSetProvider;

implementation

{ TFuncionarios }


{ TFuncionarios }


constructor TFuncionarios.criar_obj_cons;
begin

end;
function TFuncionarios.consultar_func(re: Integer): TDataSet;
begin
SQLDSConsFunc:=TSQLDataSet.Create(SQLDSConsFunc);
SQLDSConsFunc.SQLConnection:=SQLConn;
SQLDSConsFunc.CommandText:=´select * from tabfuncionario where re = :re´;

DSPConFunc:=TDataSetProvider.Create(nil);
DSPConFunc.Name:=´DSPConFunc´;
DSPConFunc.DataSet:=SQLDSConsFunc;

CDSConsFunc:=TClientDataSet.Create(nil);
CDSConsFunc.Name:=´CDSConsFunc´;
CDSConsFunc.ProviderName:=´DSPConFunc´;


DSConsFunc:=TDataSource.Create(DSConsFunc);
DSConsFunc.DataSet:=CDSConsFunc;

CDSConsFunc.FetchParams;
CDSConsFunc.Close;
CDSConsFunc.Params[0].AsInteger:=13398;
CDSConsFunc.Open;
end;

constructor TFuncionarios.create;
begin

end;

end.

Aqui eu faço da chamada

Funcionarios:=TFuncionarios.create;
datasource1.DataSet:=Funcionarios.consultar_func(13398);
Dbgrid1.DataSource:=datasource1;

Aí gera o seguinte erro CDSConsFunc Missing Data provider or data packet.


Responder

Gostei + 0

11/06/2007

Ruyoutor

Tenta criar então passando para aplicação assim:
CDSConsFunc:=TClientDataSet.Create(Application);



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar