Missing Data provider or Data packet
Boa noite Rodrigo, meu Mestre estou tendo o determinado problema , criei um Class (TSQL)para fazer consulta simples ultizando o ClientDataSet em Tempo de Excução mais estou tendo o seguinte erro quanto tendo dar um open no ClientDataSet "Missing Data provider or Data packet" Segue embaixo o codigo que estou usando.
unit Utpersis;
interface
uses DBClient, DB, SqlExpr,Provider;
type
TSQL = class
private
{ private declarations }
FQuery :TSQLQuery;
FClient:TClientDataSet;
FProv :TProvider;
protected
{ protected declarations }
public
{ public declarations }
constructor Create(cSQL:TSQLConnection);
destructor Destroy; override;
procedure Select(ds:TDataSource);
end;
implementation
{ TSQL }
constructor TSQL.Create(cSQL:TSQLConnection);
begin
Inherited Create;
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.ProviderName:=FProv.Name;
end;
destructor TSQL.Destroy;
begin
FQuery.Free;
FQuery:=nil;
FClient.Free;
FClient:=nil;
FProv.Free;
FProv:=nil;
inherited;
end;
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
C.Open;
ds.DataSet:=FClient;
end;
end.
At.Alex Oliveira
unit Utpersis;
interface
uses DBClient, DB, SqlExpr,Provider;
type
TSQL = class
private
{ private declarations }
FQuery :TSQLQuery;
FClient:TClientDataSet;
FProv :TProvider;
protected
{ protected declarations }
public
{ public declarations }
constructor Create(cSQL:TSQLConnection);
destructor Destroy; override;
procedure Select(ds:TDataSource);
end;
implementation
{ TSQL }
constructor TSQL.Create(cSQL:TSQLConnection);
begin
Inherited Create;
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.ProviderName:=FProv.Name;
end;
destructor TSQL.Destroy;
begin
FQuery.Free;
FQuery:=nil;
FClient.Free;
FClient:=nil;
FProv.Free;
FProv:=nil;
inherited;
end;
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
C.Open;
ds.DataSet:=FClient;
end;
end.
At.Alex Oliveira
Alexandro Oliveira
Curtidas 0
Melhor post
Rodrigo Mourão
11/01/2010
Olá Amigo,
Tudo esta perfeito mas e uma pegadinha do delphi.
constructor TSQL.Create(cSQL:TSQLConnection);
begin
Inherited Create;
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.ProviderName:=FProv.Name; --Errado
FClient.SetProvider(FProv); Correto.
end;
Teste e me diga se funcionou !!!
Abs!!!!
Tudo esta perfeito mas e uma pegadinha do delphi.
constructor TSQL.Create(cSQL:TSQLConnection);
begin
Inherited Create;
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.ProviderName:=FProv.Name; --Errado
FClient.SetProvider(FProv); Correto.
end;
Teste e me diga se funcionou !!!
Abs!!!!
GOSTEI 1
Mais Respostas
Alexandro Oliveira
11/01/2010
Rodrigo se é fera , campeão funcionou perfeito so que ai apareceu o
segundo problema xD , pois depois dos componentes instanciados na minha
memoria e ja criado quero usar a procedure abaixo para fazer minha
pesquisar,
mais quanto faço isto , aparece novamente o erro acima citado "Missing Data provider or Data packet"
Como este Metodo so funciona a primeira vez que eu o execudo e ai o erro não sai mais
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Mais quanto faço assim Colocando o SetProvider(FProv) o erro aparece uma vez sim e outra vez não
procedure TSQL.Select(ds:TDataSource);
begin
FClient.SetProvider(FProv);
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Bom com este codigo eu quero tipo fazer um Consulta, mais não quero que os Dados suma do DBGrid no SQLQUERY Funcionar Perfeitamente mais como este Componente não vai ne com Reza, por algum motivo esta perdendo a referencia, ainda não descobrir qual é o pulo do gato .
mais quanto faço isto , aparece novamente o erro acima citado "Missing Data provider or Data packet"
Como este Metodo so funciona a primeira vez que eu o execudo e ai o erro não sai mais
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Mais quanto faço assim Colocando o SetProvider(FProv) o erro aparece uma vez sim e outra vez não
procedure TSQL.Select(ds:TDataSource);
begin
FClient.SetProvider(FProv);
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Bom com este codigo eu quero tipo fazer um Consulta, mais não quero que os Dados suma do DBGrid no SQLQUERY Funcionar Perfeitamente mais como este Componente não vai ne com Reza, por algum motivo esta perdendo a referencia, ainda não descobrir qual é o pulo do gato .
GOSTEI 0
Alexandro Oliveira
11/01/2010
Rodrigo se é fera , campeão funcionou perfeito so que ai apareceu o
segundo problema xD , pois depois dos componentes instanciados na minha
memoria e ja criado quero usar a procedure abaixo para fazer minha
pesquisar,
mais quanto faço isto , aparece novamente o erro acima citado "Missing Data provider or Data packet"
Como este Metodo so funciona a primeira vez que eu o execudo e ai o erro não sai mais
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Mais quanto faço assim Colocando o SetProvider(FProv) o erro aparece uma vez sim e outra vez não
procedure TSQL.Select(ds:TDataSource);
begin
FClient.SetProvider(FProv);
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Bom com este codigo eu quero tipo fazer um Consulta, mais não quero que os Dados suma do DBGrid no SQLQUERY Funcionar Perfeitamente mais como este Componente não vai ne com Reza, por algum motivo esta perdendo a referencia, ainda não descobrir qual é o pulo do gato .
mais quanto faço isto , aparece novamente o erro acima citado "Missing Data provider or Data packet"
Como este Metodo so funciona a primeira vez que eu o execudo e ai o erro não sai mais
procedure TSQL.Select(ds:TDataSource);
begin
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Mais quanto faço assim Colocando o SetProvider(FProv) o erro aparece uma vez sim e outra vez não
procedure TSQL.Select(ds:TDataSource);
begin
FClient.SetProvider(FProv);
FClient.Close;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
FClient.Open;
ds.DataSet:=FClient;
end;
Bom com este codigo eu quero tipo fazer um Consulta, mais não quero que os Dados suma do DBGrid no SQLQUERY Funcionar Perfeitamente mais como este Componente não vai ne com Reza, por algum motivo esta perdendo a referencia, ainda não descobrir qual é o pulo do gato .
GOSTEI 0
Rodrigo Mourão
11/01/2010
Olá Amigo,
O problema pode não esta no set provider.
Você esta utilizando um unico CDS, DSP e SqlDataSet Certo? Eu faria diferente, eu criaria e destruiria sempre que vc chamar. Experimente criar duas procedures: CriaDataSet, DestroiDataSet. Na cria você faz:
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.SetProvider(FProv);
Ja na Destroi faria:
freeandnil(FQuery);
freeandnil(FClient);
freeandnil(FProv);
Agora nas rotinas poderia fazer:
CriaDataSet;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
ds.DataSet:=FClient;
FClient.Open;
Se quiser poderia destruir aqui !!!!
Agora lembre-se que ainda sim estaremos com uma unica referência, então se vc não destruir e chamar a rotina criadataset de novo a referencia entiga será sobrescrita. Para poder criar varias consultas ao memso tempo então terá que criar dos data set dentro das funcção com variaceis locais.
Abs!!!
O problema pode não esta no set provider.
Você esta utilizando um unico CDS, DSP e SqlDataSet Certo? Eu faria diferente, eu criaria e destruiria sempre que vc chamar. Experimente criar duas procedures: CriaDataSet, DestroiDataSet. Na cria você faz:
FQuery :=TSQLQuery.Create(nil);
FClient:=TClientDataSet.Create(nil);
FProv :=TProvider.Create(nil);
FQuery.SQLConnection:=cSQL;
FProv.DataSet:=FQuery;
FProv.Name:='MY_PROVIDER';
FProv.Options:=[poAllowCommandText];
FClient.SetProvider(FProv);
Ja na Destroi faria:
freeandnil(FQuery);
freeandnil(FClient);
freeandnil(FProv);
Agora nas rotinas poderia fazer:
CriaDataSet;
FClient.CommandText:='SELECT * FROM UCTABUSERS';
ds.DataSet:=FClient;
FClient.Open;
Se quiser poderia destruir aqui !!!!
Agora lembre-se que ainda sim estaremos com uma unica referência, então se vc não destruir e chamar a rotina criadataset de novo a referencia entiga será sobrescrita. Para poder criar varias consultas ao memso tempo então terá que criar dos data set dentro das funcção com variaceis locais.
Abs!!!
GOSTEI 1
Rodrigo Mourão
11/01/2010
Olá Amigo,
Podemos encerrar o chamdo ???
No aguardo !!!
Abs!
Podemos encerrar o chamdo ???
No aguardo !!!
Abs!
GOSTEI 0
Alexandro Oliveira
11/01/2010
sim meu amigo , muito obrigado pela ajudar
At.Alex Oliveira
At.Alex Oliveira
GOSTEI 0