Duvida criação de componente de conexão em Run Time
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
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
Curtidas 0
Respostas
Ruyoutor
11/06/2007
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);
GOSTEI 0
Jujan
11/06/2007
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.
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.
GOSTEI 0
Jujan
11/06/2007
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.
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.
GOSTEI 0
Ruyoutor
11/06/2007
Tenta criar então passando para aplicação assim:
CDSConsFunc:=TClientDataSet.Create(Application);
GOSTEI 0