Srs. do conselho. Bom dia
Abri, recentemente um tópico desse assunto que foi prontamente respondido pelo amigo Alexandre Neves
que me passou esse código
Sub PreenchePtr()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' código criado por Alexandre Neves, do Fórum MaximoAccess '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Rst As DAO.Recordset, Rst1 As DAO.Recordset, strPtr As String, ContaPtr As Integer
Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Princ LEFT JOIN Fis ON Princ.Ptr=Fis.Ptr ORDER BY Princ.Ptr")
Do While Not Rst.EOF
If Rst.AbsolutePosition = 0 Then
strPtr = Rst("Princ.Ptr")
ContaPtr = 1
Else
If Rst("Princ.Ptr") = strPtr Then
ContaPtr = ContaPtr + 1
Else
If ContaPtr = 1 Then
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
Rst1.Edit
Rst1("Idp") = "M1"
Rst1.Update
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
If Not Rst1.EOF Then
Rst1.Edit
Rst1("Idp") = "M1"
Rst1.Update
End If
Else
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
Do While Not Rst1.EOF
Rst1.Edit
Rst1("Idp") = "B3"
Rst1.Update
Rst1.MoveNext
Loop
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
Do While Not Rst1.EOF
Rst1.Edit
Rst1("Idp") = "B3"
Rst1.Update
Rst1.MoveNext
Loop
End If
strPtr = Rst("Princ.Ptr")
ContaPtr = 1
End If
End If
Rst.MoveNext
Loop
Set Rst = Nothing
Set Rst1 = Nothing
CurrentDb.Execute "UPDATE Princ SET Idp='M0' WHERE Cnc like 'Dev*'"
CurrentDb.Execute "UPDATE Princ SET Idp='B1' WHERE Cnc='Sobr'"
CurrentDb.Execute "UPDATE Fis SET Idp='I1' WHERE IsNull(Ptr) and Cnc='Sobr'"
End Sub
Porém tenho uma segunda fase que fecha esse circulo, ficando assim totalmente automatizado e seria ótimo se algum dos senhores pudessem me ajudar.
Explicando essa segunda fase
Após ele executar o módulo acima, ele teria que proceder da seguinte forma:
Esse processo deverá ocorrer somente na tabela Princ.
Para os itens onde o PtrAlt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "M1", esses deverão ser preenchidos a coluna Idp com "B2"
Para os itens onde o Ptralt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "B3", esses deverão ser preenchidos a coluna Idp com "I4"
Para os itens onde o PtrAlt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "M0", esses deverão ser preenchidos a coluna Idp com "B2"
Anexo o exemplo para maior entendimento
Desde já agradeço imensamente a ajuda dos senhores
Abri, recentemente um tópico desse assunto que foi prontamente respondido pelo amigo Alexandre Neves
que me passou esse código
Sub PreenchePtr()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' código criado por Alexandre Neves, do Fórum MaximoAccess '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Rst As DAO.Recordset, Rst1 As DAO.Recordset, strPtr As String, ContaPtr As Integer
Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Princ LEFT JOIN Fis ON Princ.Ptr=Fis.Ptr ORDER BY Princ.Ptr")
Do While Not Rst.EOF
If Rst.AbsolutePosition = 0 Then
strPtr = Rst("Princ.Ptr")
ContaPtr = 1
Else
If Rst("Princ.Ptr") = strPtr Then
ContaPtr = ContaPtr + 1
Else
If ContaPtr = 1 Then
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
Rst1.Edit
Rst1("Idp") = "M1"
Rst1.Update
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
If Not Rst1.EOF Then
Rst1.Edit
Rst1("Idp") = "M1"
Rst1.Update
End If
Else
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Princ WHERE Ptr='" & strPtr & "'")
Do While Not Rst1.EOF
Rst1.Edit
Rst1("Idp") = "B3"
Rst1.Update
Rst1.MoveNext
Loop
Set Rst1 = CurrentDb.OpenRecordset("SELECT * FROM Fis WHERE Ptr='" & strPtr & "'")
Do While Not Rst1.EOF
Rst1.Edit
Rst1("Idp") = "B3"
Rst1.Update
Rst1.MoveNext
Loop
End If
strPtr = Rst("Princ.Ptr")
ContaPtr = 1
End If
End If
Rst.MoveNext
Loop
Set Rst = Nothing
Set Rst1 = Nothing
CurrentDb.Execute "UPDATE Princ SET Idp='M0' WHERE Cnc like 'Dev*'"
CurrentDb.Execute "UPDATE Princ SET Idp='B1' WHERE Cnc='Sobr'"
CurrentDb.Execute "UPDATE Fis SET Idp='I1' WHERE IsNull(Ptr) and Cnc='Sobr'"
End Sub
Porém tenho uma segunda fase que fecha esse circulo, ficando assim totalmente automatizado e seria ótimo se algum dos senhores pudessem me ajudar.
Explicando essa segunda fase
Após ele executar o módulo acima, ele teria que proceder da seguinte forma:
Esse processo deverá ocorrer somente na tabela Princ.
Para os itens onde o PtrAlt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "M1", esses deverão ser preenchidos a coluna Idp com "B2"
Para os itens onde o Ptralt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "B3", esses deverão ser preenchidos a coluna Idp com "I4"
Para os itens onde o PtrAlt é igual ao Ptr e lá encima ele preencheu a coluna Idp com "M0", esses deverão ser preenchidos a coluna Idp com "B2"
Anexo o exemplo para maior entendimento
Desde já agradeço imensamente a ajuda dos senhores
- Anexos
- exomplocruzaepreenchecampo.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (29 Kb) Baixado 8 vez(es)