LOOP UM DENTRO DO OUTRO

JOHNSTEVE 18/05/2017 15:45:33
#474060
Boa tarde galera, alguem poderia me da uma ideia nesse loop ? estou tentando fazer 2 LOOP um dentro do outro. com 2 tipos de [txt-color=#e80000] Datagrid [/txt-color]

Dgv_Fornecedor_BlocoC100 e Dgv_ItensProdtCompra_BlocoC170

Acontece que nesse codigo q escrevi, esta duplicando os itens ficando por igual em cada compra.
Tipo.
ID.Compra: 399 : contem os itens: 821,520,206,523
ID.Compra: 400 : contem os itens: 823,773,36
Acontece que no loop q criei um dentro do outro. esta trazendo os 7 itens nas duas compras.
ficando errado da seguinte forma: ID de COmpra 399: 821,520,206,523,823,773,36 - esta pegando os 7 itens o mesmo para o ID de Compra 400

   If Ckb_NFe_Entradas.Checked = True Then
Try [ô]ENTRADAS - NFE
con.Open()
Dim sql As String
Dim cmd As OleDbCommand
For j = 0 To Dgv_Fornecedor_BlocoC100.Rows.Count - 1
sql = [Ô]SELECT Compras.[codigo], Compras.[modelo], Compras.[serie], Compras.[NumeroNotaFiscal], Compras.[ChaveNFe], Compras.[CodigoFornecedor], Compras.[DataEmissao], Compras.[DataEntrada], Compras.[Valor_Total_Nota], Compras.[Vrl_Total_Produto], Compras.[Vlr_Total_Desconto], Compras.[Vlr_Total_Frete], Compras.[Vlr_Total_Seguro], Compras.[Vlr_Total_OutrasDesp], Compras.[Vlr_total_bsCal_icms], Compras.[Vlr_total_vlr_icms], Compras.[Vlr_total_bsCal_icmsST], Compras.[modFrete], Compras.[Vlr_total_vlr_icmsST], Compras.[Vlr_total_IPI], Compras.[Indicador_Pagamento], Compras.[Vlr_Total_PIS], Compras.[Vlr_Total_COFINS] FROM Compras WHERE DataEntrada between @datainicial and @datafinal and codigo=?[Ô]
cmd = New OleDbCommand(sql, con)

cmd.Parameters.AddWithValue([Ô]@datainicial[Ô], mskDIni.Value.Date)
cmd.Parameters.AddWithValue([Ô]@datafinal[Ô], mskDFim.Value.Date)
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@codigo[Ô], Dgv_Fornecedor_BlocoC100.Rows(j).Cells([Ô]codigo[Ô]).Value.ToString()))

Limpa_variaveis_Bloco_C100()

dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()
If Not IsDBNull(dr.Item([Ô]codigo[Ô])) Then COD_PART = dr.Item([Ô]codigo[Ô])
COD_PART = Format(CInt(COD_PART), [Ô]00000[Ô])
COD_PART = [Ô]F[Ô] & COD_PART
If Not IsDBNull(dr.Item([Ô]modelo[Ô])) Then COD_MOD = dr.Item([Ô]modelo[Ô])
If Not IsDBNull(dr.Item([Ô]serie[Ô])) Then SER = dr.Item([Ô]serie[Ô])

Qtd_Linha_Bloco_C = Qtd_Linha_Bloco_C + 1
Qtd_Linha_Bloco_C100 = Qtd_Linha_Bloco_C100 + 1
Qtd_Linha_ArquivoDigital = Qtd_Linha_ArquivoDigital + 1


If Ckb_Itens.Checked = True Then
For P = 0 To Dgv_ItensProdtCompra_BlocoC170.Rows.Count - 1
sql = [Ô]SELECT Compras.DataEntrada, Itens_Compra.id_compra, Itens_Compra.id_produto, produtos.descricao, Itens_Compra.qtd_item, produtos.undMedida, Itens_Compra.vrl_total_item, Itens_Compra.desconto, Itens_Compra.cst, Itens_Compra.Cfop_Nota, produtos.Cst_Ipi FROM produtos INNER JOIN (Compras INNER JOIN Itens_Compra ON Compras.[codigo] = Itens_Compra.[id_compra]) ON produtos.[codigo] = Itens_Compra.[id_produto] WHERE DataEntrada between @datainicial and @datafinal and Itens_Compra.id_produto=? and Itens_Compra.id_compra=?[Ô] [ô]Itens_Compra.id_produto=?[Ô]
cmd = New OleDbCommand(sql, con)

cmd.Parameters.AddWithValue([Ô]@datainicial[Ô], mskDIni.Value.Date)
cmd.Parameters.AddWithValue([Ô]@datafinal[Ô], mskDFim.Value.Date)
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@id_produto[Ô], Dgv_ItensProdtCompra_BlocoC170.Rows(P).Cells([Ô]id_produto[Ô]).Value.ToString()))
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]@id_compra[Ô], Dgv_ItensProdtCompra_BlocoC170.Rows(P).Cells([Ô]id_compra[Ô]).Value.ToString()))

dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()
Num_Seq_Item_Doc = Num_Seq_Item_Doc + 1

If Not IsDBNull(dr.Item([Ô]id_produto[Ô])) Then Cod_Item_Doc = dr.Item([Ô]id_produto[Ô])
Cod_Item_Doc = Format(CInt(Cod_Item_Doc), [Ô]00000[Ô])
Cod_Item_Doc = [Ô]P[Ô] & Cod_Item_Doc
If Not IsDBNull(dr.Item([Ô]descricao[Ô])) Then Desc_Item_Doc = dr.Item([Ô]descricao[Ô])

Qtd_Linha_Bloco_C = Qtd_Linha_Bloco_C + 1
Qtd_Linha_Bloco_C170 = Qtd_Linha_Bloco_C170 + 1
Qtd_Linha_ArquivoDigital = Qtd_Linha_ArquivoDigital + 1

End If
Next
End If

End If
Next
Catch ex As Exception
MsgBox([Ô]Ocorreu um erro ao carregar os dados da Compra - Bloco C100.[Ô], MsgBoxStyle.Exclamation)
Finally
con.Close()
End Try
End If
JOHNSTEVE 18/05/2017 15:50:12
#474061
Nesse print da para ter uma ideia do que esta acontecendo no Loop.
KERPLUNK 18/05/2017 20:08:42
#474067
Caramba, não é à toa que vocês ficam doidos! Amigo, simplifique sua vida, use OOP.
NILSONTRES 18/05/2017 21:50:30
#474069
Resposta escolhida
Porque vc não faz uma sql utilizando inner join ?
na tabela de itens vc deve ter o id da compra.
JOHNSTEVE 19/05/2017 07:43:51
#474071
Citação:

:
Porque vc não faz uma sql utilizando inner join ?
na tabela de itens vc deve ter o id da compra.



Boa ideia NILSONTRES, vou fazer aqui vlw
JOHNSTEVE 19/05/2017 13:33:26
#474075
Citação:

:
Porque vc não faz uma sql utilizando inner join ?
na tabela de itens vc deve ter o id da compra.



Deu certo Nilson vlw
Tópico encerrado , respostas não são mais permitidas