Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) TFDBatchMove adicionar mappings dinamicamente


robinhocne

Pergunta

Boa tarde, estou usando o FDBatchMoveDataSetReader1 para pegar os dados de uma query e usando o FDBatchMove1 para pegar os dados e jogar num FDBatchMoveSQLWriter1 para gravar os dados em outro lugar....
o sql que retorna na query é dinamico e nem todos os campos que tem nele, terá na tabela de destino, então o que preciso é criar os mappings do FDBatchMove1 de origem e destino dinamicamente, estou fazendo assim;

 

with FDQuery1 do
begin
Active := false;
Close;
sql.Clear;
sql.add('select * from tbl_adm_configsynccampos where nm_tabelapara = ''tbl_prd_produtos'' ');
open;
end;
while not FDQuery1.Eof do
begin
with BatchMove.Mappings do
begin
Add.SourceFieldName := FDQuery1.FieldByName('nm_campode').AsString;
Add.DestinationFieldName := FDQuery1.FieldByName('nm_campopara').AsString;
end;
FDQuery1.Next;
end;

 

Ele está adicionando, mas está criando um item de mapping de origem e outro item de destino e não no mesmo item incluindo o destino e origem, coloquei manualmente para ver o objeto e ele deu assim;
 

object BatchMove: TFDBatchMove
Reader = Reader
Mappings = <
item
SourceFieldName = 'origem'
DestinationFieldName = 'destino'
end
item
SourceFieldName = 'de'
DestinationFieldName = 'para'
end>
LogFileName = 'Data.log'
Analyze = [taFormatSet, taHeader, taFields]
Left = 232
Top = 344
end

Como faço para incluir dinamicamente ?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

with BatchMove1 do
  begin
    Mode := batCopy;  // procure no help para mais opções
    Mappings.clear;
    Source := Table1;
    Destination := Table2;
    Mappings := <TStrings>;  //
    Execute;
  end;

  //Mappings é um Stringlist no Form
  //FieldName(Destination) = FieldName(Source)
  //Nome2 = Nome1;
  //Rendimento = Salario;
  //Nome1, Salario de (Source) é copiado para Nome2, Rendimento de (Destination),
  //respectivamente. 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jhonas, resolvi assim:

 

  while not FDQuery1.Eof do
    begin
      FDBatchMove1.Mappings.Add;
      with FDBatchMove1.Mappings do
        begin
         Items[i].SourceFieldName      := FDQuery1.FieldByName('nm_campode').AsString;
         Items[i].DestinationFieldName := FDQuery1.FieldByName('nm_campopara').AsString;
        end;

      i := i + 1;
      FDQuery1.Next;
    end;

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...