sexta-feira, 21 de novembro de 2014

Missing Data Provider or Data Packet

Ontem um colaborador nosso ficou emperrado em um método para copiar dados de uma tabela 'A' de um banco origem para um banco destino usando o trio SQLQuery + DataSetProvider + ClientDataSet.

O metodo estava assim

procedure TForm1.CopiarDados(Origem, Destino: TSQLConnection;  NomeTabela: String);
Var
    QryOrigem, QryDestino: TSQLQuery;
    DtStPrvd : TDataSetProvider;
    CDS  : TClientDataSet;
begin
  QryOrigem := TSQLQuery.Create(nil);
  QryDestino := TSQLQuery.Create(nil);

  QryOrigem.SQLConnection := Origem;
  QryDestino.SQLConnection := Destino;

  DtStPrvd := TDataSetProvider.Create(nil)
  DtStPrvd.Name := 'DT';
  DTStPrvd.DataSet := Qry_Destino;

  CDS := TClientDataSet.Create(nil);
  CDS.PacketRecords := 1;
  CDS.ProviderName := DtStPrvd.Name;

  CDS.Open;   // Ao executar o open esta dando a mensagem 'Missing Data Provider or Data Packet '

  CDS.Free;
  DataSetProvider1.Free;
  QryOrigem.Free;
  QryDestino.Free;

end;

O erro estava na atribuicao do provider para o ClientDataSet. Para atribuir um provider em tempo de execucao para um ClientDataSet tem que usar o metodo SetProvider do ClientDataSet, ficando assim

CDS.SetProvider (DT);

Desta forma o Open do ClientDataSet funciona sem problema algum.








    
    



Um comentário:

Maycon Gabriel disse...

Cara, e quando o provider é remoto? como faço a atribuição?