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:
Cara, e quando o provider é remoto? como faço a atribuição?
Postar um comentário