Copiar Somente Um Campo do ClientDataSet2 para o ClientDataSet1 com While
20/09/2018
0
Só que o meu código está fazendo só primeiro item da lista, ele não dá continuidade para o restante da lista, faz somente o primeiro.
Obs1.: o ClientDataSet1 é uma tabela temporaria que eu criei com os campos Descrição / Código de Barras aonde eu clico no botão(button1) e exibo os itens e descrição no dbgrid1, após isso eu clico no botão2 (button2) aonde ele deveria fazer a rotina acima descrita e não faz
Obs2.: o ClientDataSet2 está conectado diretamente ao banco de dados, aonde eu pego pego as informações diretamente do banco de dados
Este é o meu código do botão2
procedure TForm2.Button2Click(Sender: TObject); begin ClientDataSet2.First; while not ClientDataSet2.Eof do begin ClientDataSet1.Edit; if (ClientDataSet2.FieldByName(''P_BARRAS1'').AsString) = ClientDataSet1.FieldByName(''cEAN'').AsString then ClientDataSet1.FieldByName(''CodigoProduto'').AsString := ClientDataSet2.FieldByName(''P_ID'').AsString; ClientDataSet1.Post; ClientDataSet2.Next; end; end;
Conto com a ajuda de vocês.
Grato
Bruno Henrique
Posts
20/09/2018
Emerson Nascimento
Acredito que não baste comparar com o conteúdo do ClientDataset1, você deve procurar o conteúdo.
Algo assim:
procedure TForm2.Button2Click(Sender: TObject); begin ClientDataSet2.First; while not ClientDataSet2.Eof do begin // se NÃO encontrar o código de barras na tabela destino, insere um registro if not ClientDataSet1.Locate('cEAN', ClientDataSet2.FieldByName(''P_BARRAS1'').AsString, []) then begin ClientDataSet1.Insert; ClientDataSet1.FieldByName(''cEAN'').AsString := ClientDataSet2.FieldByName(''P_BARRAS1'').AsString; end else // se encontrou um código de barras igual, edita o registro ClientDataSet1.Edit; // atribui ao campo CodigoProduto do ClientDataset1 o conteúdo do campo P_ID do ClientDataset2 ClientDataSet1.FieldByName(''CodigoProduto'').AsString := ClientDataSet2.FieldByName(''P_ID'').AsString; ClientDataSet1.Post; // segue para o próximo registro do ClientDataset2 ClientDataSet2.Next; end; end;
20/09/2018
Bruno Henrique
Deu certo em partes o código que você me passou!!!
Veja na imagem : https://uploaddeimagens.com.br/imagens/grid-jpg-5c7c37b3-13b5-4309-b86c-5ca99a957755
Ele faz, só que ele insere todos os registro do banco no caso eu tenho mais de 9000 itens, ele insere todos no dbrig, precisaria que inserisse o código somente no que está no grid
E como eu poderia fazer quando o código de barras é igual mas o produto é diferente(no caso é separado por masculino e feminino) no ClientDataSet2, mas o fabricante coloca o mesmo código para os 2 ClientDataSet1, como se fosse um só produto, para não trazer em branco igual na imagem
Veja na imagem: https://uploaddeimagens.com.br/imagens/grid2-jpg
20/09/2018
Emerson Nascimento
Ele faz, só que ele insere todos os registro do banco no caso eu tenho mais de 9000 itens, ele insere todos no dbrig, precisaria que inserisse o código somente no que está no grid
Não entendi.
A tua necessidade é deixar o mesmo P_ID pra todos os registros que tenham o mesmo código de barras?
Qual o banco de dados utilizado?
20/09/2018
Bruno Henrique
A tua necessidade é deixar o mesmo P_ID pra todos os registros que tenham o mesmo código de barras?
É por que, quando chega o xml das notas, nele vem o código de barras dos produtos, o que eu faço, eu importo para o ClientDataSet1, então, o que eu quero fazer, quero verificar, se tem o mesmo produto no meu sistema (ClientDataSet2), para não cadastrar de novo, se tiver eu pego o P_ID, que é o código do meu sistema, no qual uso para dar entrada!
Uso Firebird
Conexões
Sqlconection
DataSetProvider
ClientDataSet
DataSource
Dbgrid
20/09/2018
Emerson Nascimento
Então talvez seja melhor você partir do ClientDataset1.
procedure TForm2.Button2Click(Sender: TObject); begin ClientDataSet1.First; while not ClientDataSet1.Eof do begin // procura pelo código de barras no cadastro if ClientDataSet2.Locate('P_BARRAS1', ClientDataSet1.FieldByName(''cEAN'').AsString, []) then begin // atribui ao campo CodigoProduto do ClientDataset1 o conteúdo do campo P_ID do ClientDataset2 ClientDataSet1.Edit; ClientDataSet1.FieldByName(''CodigoProduto'').AsString := ClientDataSet2.FieldByName(''P_ID'').AsString; ClientDataSet1.Post; end; // segue para o próximo registro do ClientDataset1 ClientDataSet1.Next; end; end;
21/09/2018
Bruno Henrique
Deu certo o código!!! Funcionou como eu precisava!!! Obrigado!!!
Você sabe se teria alguma forma para pegar o P_ID, quando os produtos for diferente com código de barras iguais?
Abraços
Grato
Clique aqui para fazer login e interagir na Comunidade :)