Copiar Somente Um Campo do ClientDataSet2 para o ClientDataSet1 com While
Bom dia!!! Preciso copiar os dados do ClientDataSet2 para um outro que é o ClientDataSet1, com a seguinte condição, se o código de barras do ClientDataSet2(''P_BARRAS1'') for igual ao Código de Barras do ClientDataSet1(''cEAN''), copia o Código do Produto(P_ID) que está no ClientDataSet2 e joga os valores no campo (''CodigoProduto'') que está no ClientDataSet1.
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
Conto com a ajuda de vocês.
Grato
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
Curtidas 0
Respostas
Emerson Nascimento
20/09/2018
Não sei se entendi o que você pretende, mas vamos lá....
Acredito que não baste comparar com o conteúdo do ClientDataset1, você deve procurar o conteúdo.
Algo assim:
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;
GOSTEI 0
Bruno Henrique
20/09/2018
Emerson, bom dia!!! Obrigado Pela atenção!!!
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
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
GOSTEI 0
Emerson Nascimento
20/09/2018
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?
GOSTEI 0
Bruno Henrique
20/09/2018
Emerson, boa tarde!!!
É 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
Não entendi.
A tua necessidade é deixar o mesmo P_ID pra todos os registros que tenham o mesmo código de barras?
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
GOSTEI 0
Emerson Nascimento
20/09/2018
Ah, entendi.
Então talvez seja melhor você partir do ClientDataset1.
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;
GOSTEI 0
Bruno Henrique
20/09/2018
Emerson, boa tarde!!!
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
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
GOSTEI 0