Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fells

[Resolvido] Array para comparar CPF

Recommended Posts

Bom dia galera, beleza?

 

Como crio um array de CPF não repetidos?

 

Vou explicar:

Tenho um banco com varios campos de CPF's (CPF_responsavel, CPF_inspetor, CPF_inspetor2, CPF_inspetor3 ..... ) que podem ser repetidos. Por exemplo, no CPF_inspetor2 tenho o CPF 99988877766. Se eu verificar o campo CPF_inspetor3 eu posso achar o mesmo CPF 99988877766.

 

O problema não é repetir, o problema é que tem um programa (em VB6) que manda emails para essas pessoas assim que localiza o CPF da mesma em algum desses campos.

 

Para evitar que a pessoa receba 20 emails iguais (caso o programa ache o CPF dela 20 vezes), queria implementar no codigo um array. Assim a ideia seria comparar o CPF e ver se ele é repetido ou não.

Pego um CPF insiro no vetor, pego outro CPF comparo com o(s) CPF(s) que tem no vetor. Se for igual não guardo ele no array, se for diferente GUARDO no array. Pego outro CPF e comparo novamente e assim por diante até que não tenha mais CPF para comparar.

Desta forma terei uma lista com apenas um CPF de cada pessoa e encaminho apenas um email.

 

Deu para entender mais o menos galera?

Sou iniciante e não manjo muito de array. Mais preciso desenvolver algo urgente para solucionar o problema.

Abraços.

 

 

----------------------------------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia utilizar um collection para simplificar.

 

Option Explicit

dim mycol as Collection

Private Sub Form_Load()
   Set mycol = New Collection
End Sub

Private Sub Add(cpf As String)
   If (Find(cpf, mycol)) Then
       MsgBox "Cpf já existe"
   Else
       Call mycol.Add(Text1.text)
   End If
End Sub

Private Function Find(text As String, ByRef col As Collection) As Boolean
Dim i As Integer

For i = 1 To col.Count
   If (Text1.text = col.Item(i)) Then
       Find = True
       Exit Function
   End If
Next
End Function

 

Ela facilita adicionar e remover items.

 

Agora se quiser utilizar arrays.

 

Option Explicit

Dim myarr() As String


Private Sub Form_Load()
   Redim myarr(0)
End Sub

Private Sub Add(cpf As String)
   If (Find(cpf, myarr)) Then
       MsgBox "Cpf já existe"
   Else
       ReDim Preserve myarr(UBound(myarr) + 1)
       myarr(UBound(myarr)) = cpf
   End If
End Sub

Private Function Find(text As String, ByRef strarr() As String) As Boolean
   Dim I As Integer

   For I = 0 To UBound(strarr)
       If (strarr(I) = text) Then
           Find = True
           Exit Function
       End If
   Next
End Function

 

 

Já pra remover a coisa fica mais complicada.

 

Espero que ajude :).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faaala Hacker_wap. Tranquilo?

 

Cara... ajudar ajudou pq eu até agora não tinha achado nada de nada onde pudesse ao menos ter uma ideia do que fazer ou como começar. rs

 

Seguinte, eu peguei um programa em VB na sexta feira e recebi a missão de criar (de preferencia) um array que fizesse isso que informei na 1ª explicação. Mas eu não sei naaaaaaaada de VB, então me perdoa a "burrice".

 

No BD tem 6 campos diferentes que guardam CPF's "diferentes". O programa roda as instruções abaixo:

 

'Instrução para selecionar os dados do Inspetor 1 (1 de 6)

'Essa instrução se repete + 5 vezes para pegar o conteudo dos outros inspetores/campos CPF

strSql = "SELECT Count(Instr_local.CPF_inspetor) as numInstrumentos, Instr_local.CPF_inspetor, Pessoas.nome , Login.Email"

strSql = strSql & " FROM Instrumentos"

strSql = strSql & " INNER JOIN Instr_local ON Instrumentos.Cod_local = Instr_local.Cod_local"

strSql = strSql & " INNER JOIN Pessoas ON Instr_local.CPF_inspetor = Pessoas.CPF"

strSql = strSql & " INNER JOIN Login ON Pessoas.CPF = Login.CPF"

strSql = strSql & " WHERE (" 'Manda Apenas as calibrações vencidas

strSql = strSql & " YEAR(Instrumentos.Prox_calibr) < YEAR(GETDATE()) OR"

strSql = strSql & " MONTH(Instrumentos.Prox_calibr) < MONTH(GETDATE()) AND YEAR(Instrumentos.Prox_calibr) = YEAR(GETDATE())"

strSql = strSql & " )"

strSql = strSql & " GROUP BY Instr_local.CPF_inspetor, Pessoas.Nome, Login.Email"

 

 

'Executa a consulta SQL

Set objRS = CreateObject("ADODB.Recordset")

objRS.Open strSql, objCon, 3, 3

If Not (objRS.BOF And objRS.EOF) Then

While Not objRS.EOF

 

'Define os dados a serem enviados para o usuário via email

strNome = objRS("Nome")

strEmail = objRS("Email")

strCPF = objRS("CPF_inspetor")

strLink = "http://" & strServidor & "/Qualidade/Calibracao/Email_instr_calibr4.asp?CPF=" & strCPF

strMensagem = strNome & "<br><br>Há <span style='color: #ff0000;' >" & objRS("numInstrumentos") & "</span> instrumento(s) de sua responsanbilidade que precisa(m) ser calibrado(s).<br><br><br>Para consultar, <a href=" & strLink & ">clique aqui</a>.<br><br><br>"

 

'Envia a mensagem de aviso da calibração

str = Envia_email(strDeNome, strDeEmail, strNome, strEmail, strAssunto, strMensagem)

objRS.MoveNext

Wend

End If

 

Se deixar assim do jeito que esta (lembrando que há mais CPF's de outros inspetores), cada vez que o a instrução localizar o CPF repetido da pessoa, ele mandará um e-mail (o mesmo e-mail).

 

Por isso a necessidade do Array.

Quando o programa processar o inspetor 1, o array "guardaria" os CPF's encontrados sem repeti-los. Quando o programa rodar a intrução do inspetor 2, o array ja tem alguns CPF's lá que irá comparar com os CPF's encontrados para o inspetor 2. Se achasse algum igual ele não faria nada pois ja tem aquele CPF, mas se ele achasse algum diferente do que ele ja possui no array adicionaria na lista para que quando for para o inspetor 3, 4, 5 e 6 fazer a mesma comparação, adicionar ou nao os CPF's e encaminhar apenas um e-mail, uma unica vez, para os inspetores contidos no array.

 

Pode me ajudar por favor????

 

.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos resumir: Não entendo bulhufas... então PORRR FAVOOOR me ajudem a criar um laço onde eu pego um numero de cpf coloco no array, pego outro cpf e comparo com o(s) que esta(ão) no array. Se já tiver algum cpf igual ele pula ou não faz nada ou qualquer coisa, mais não insere no array. Se não tiver nenhum cpf igual a aquele comparado ele é inserido no array.

Quero um array com varios cpfs, porem que nenhum se repita.

 

O resto eu me improviso.

 

.

 

Srs, ainda estou no aguardo de uma manifestação de ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

(Resolvido)

 

       Enviar = 0
       NaoEnviar = 0

       strCPF = objRS("CPF_inspetor")

           /*Faz a verificação se o CPF do inspetor x consta ou não no Array
           caso conste ele atribui 1 a variavel NaoEnviar*/
       For i = 0 To UBound(strArrayCpf)
           If strArrayCpf(i) <> strCPF Then
               Enviar = 1
           Else
               NaoEnviar = 1
           End If
       Next i

           /*Insere CPF na prox prosição livre do Array e pega os dados do inspetor a ser enviado o email*/
       For i = 0 To UBound(strArrayCpf)
           If (strArrayCpf(i) = Null Or strArrayCpf(i) = "") And (Enviar = 1 And NaoEnviar = 0) Then
               strArrayCpf(i) = strCPF

/* abaixo vem meu codigo que pega os dados e manda o email se as condições do IF forem atendidas.*/

 

Obrigado

.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.