MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Localizar duplicados especial

    Compartilhe
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 545
    Registrado : 14/12/2010

    [Resolvido]Localizar duplicados especial

    Mensagem  julianovv em 9/5/2018, 14:36

    Bom dia. Tenho um sistema de cadastro de arquivos e muitos registros são repetidos. Gostaria de criar um botão no formulário para que abrisse um popup exibindo os números de CDs onde esse registro existe e se não existir que me dê uma mensagem de arquivo não encontrado. Alguns CDs/DVDs podem apresentar problemas na leitura dos arquivos indicando que eles podem estar corrompidos e não será possível abri-los. Assim, esse botão me indicaria quais são os outros em que eles estão gravados. Seria semelhante à consulta "encontrar duplicados".
    Pensei na consulta de duplicados e um campo parâmetro para digitar o nome mas as vezes o nome é comprido demais e não dá pra digitar.
    Os arquivos são digitados como nome e extensão (formato). Ex: nvidia_cbo.exe, fotodecasa.jpg, animação.gif.. etc.
    Agradeço qualquer luz!

    Juliano

    Wink


    Última edição por julianovv em 13/5/2018, 20:30, editado 1 vez(es)


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Localizar duplicados especial

    Mensagem  CassioFabre em 9/5/2018, 17:45

    Boa tarde,

    É bem simples na verdade. Se for apenas para consulta, é mais fácil ainda, pois apenas uma msgbox já mata seu problema (claro, se quiser algo mais elaborado, seria interessante criar um formulário com uma listbox ou algo assim). Mas num botão qualquer você pode colocar o seguinte:
    Código:
    Dim rs as recordset
    set rs = currentdb.openrecordset("SELECT * FROM SUA_TABELA WHERE txtNomeArquivo = '" & campoNomeArquivo & "'")
    rs.movelast
    if rs.recordcount = 0 then
        MsgBox "Não há registros para o arquivo " & txtNomeArquivo & ".", vbcritical, "Registros"
        Exit sub
    end if
    rs.movefirst

    dim str as string
    str = "O arquivo " & txtNomeArquivo & " está cadastrado nos seguintes CDs:" & vbcrlf & vbcrlf

    str = str & rs!campoNomeArquivo & vbcrlf
    rs.movenext

    do while not rs.eof
        str = str & rs!campoNomeArquivo & vbcrlf
        rs.movenext
    loop

    msgbox str

    Onde SUA_TABELA é a sua tabela de fato, txtNomeArquivo é o campo do formulário onde está o nome do arquivo (com extensão e tudo) e campoNomeArquivo é o campo da tabela onde está o nome do arquivo.

    Teste e retorne. Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 545
    Registrado : 14/12/2010

    Re: Localizar duplicados especial

    Mensagem  julianovv em 9/5/2018, 21:27

    Obrigado Cassio. Quase deu certo..rs. Veja o que ficou faltando:

    A lista de CDs mostrou o número certo de arquivos (3nomearquivo) mas preciso do caminho da pasta (2caminho) mas não consegui colocar.

    Lista dos CDs

    A mensagem abriu mostrando o único arquivo e não a mensagem de que não existe duplicação.

    Mensagem de aviso

    Segue a lista que montei usando a consulta de duplicados mas não está localizando o arquivo. Tive de colocar um 'localizar' para facilitar porque são mais de 50 mil registros.

    Captura da consulta de duplicados.


    Obrigado!

    Wink


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Localizar duplicados especial

    Mensagem  CassioFabre em 10/5/2018, 13:03

    Bom dia,

    Já que você realmente quer algo mais elaborado, vamos tentar criar um formulário parecido com esse que você fez para localizar os duplicados. Crie um form em branco de nome formPesquisa e adicione uma listbox e de o nome de lstDuplicados.

    Agora vamos adaptar os códigos que passei anteriormente.

    Código:
    Dim rs as recordset
    set rs = currentdb.openrecordset("SELECT * FROM SUA_TABELA WHERE txtNomeArquivo = '" & campoNomeArquivo & "'")
    rs.movelast
    if rs.recordcount = 0 then
        MsgBox "Não há registros para o arquivo " & txtNomeArquivo & ".", vbcritical, "Registros"
        Exit sub
    end if
    rs.movefirst

    docmd.openform "formpesquisa"

    With Forms![formpesquisa].lstDuplicados
        .RowSourceType = "Value list"
        .ColumnCount = 2
        .ColumnHeads = true
        .columnwidths = "2cm; 10cm"
        .additem "CD;Caminho"
        .AllowValueListEdits = false

        Do while not rs.eof
            .additem rs!NUMERO_OU_NOME_DO_CD & ";" & rs!CAMINHO
            rs.movenext
        loop
    end with

    Onde SUA_TABELA é a sua tabela de fato, txtNomeArquivo é o campo do formulário onde está o nome do arquivo (com extensão e tudo) e campoNomeArquivo é o campo da tabela onde está o nome do arquivo, NUMERO_OU_NOME_DO_CD é o campo da tabela onde está o número do CD e CAMINHO é o campo da tabela onde está o caminho do arquivo.

    Teste e retorne. Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 545
    Registrado : 14/12/2010

    Re: Localizar duplicados especial

    Mensagem  julianovv em 10/5/2018, 14:57

    Obrigado Cassio, vou tentar esse e te mando o retorno.
    Em formulários assim, eu criaria uma consulta de duplicados e criaria uma combox com os nomes sem a repetição e usaria para buscar os números dos CD em um subformulário.
    Como a consulta é bem seletiva, teriam poucos resultados e assim não causaria falhas de desempenho, mas, como pretendo usar essa consulta em uma linha de registro para que localize os duplicados esse formulário não seria necessário uma vez que eu teria de buscar o arquivo na lista.
    Mesmo assim obrigado.
    Te mando um retorno!

    Wink


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Localizar duplicados especial

    Mensagem  CassioFabre em 10/5/2018, 16:51

    Bom dia,

    Se quiser usar apenas a msgbox para visualização do usuário, voce poderá fazer da seguinte forma:
    Código:
    Dim rs as recordset
    set rs = currentdb.openrecordset("SELECT * FROM SUA_TABELA WHERE txtNomeArquivo = '" & campoNomeArquivo & "'")
    rs.movelast
    if rs.recordcount = 0 then
        MsgBox "Não há registros para o arquivo " & txtNomeArquivo & ".", vbcritical, "Registros"
        Exit sub
    end if
    rs.movefirst

    dim str as string
    str = "O arquivo " & txtNomeArquivo & " está cadastrado nos seguintes CDs:" & vbcrlf & vbcrlf

    str = str & rs!numeroCd & " | " & rs!caminho & vbcrlf
    rs.movenext

    do while not rs.eof
        str = str & rs!numeroCd & " | " & rs!caminho & vbcrlf
        rs.movenext
    loop

    msgbox str, vbinformation, "Duplicados"

    Talvez nao fique tão organizado quando uma form separado. Mas também funciona. Caso não seja isso que quer exatamente, explique melhor ou poste uma parte do seu banco para analise.

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 545
    Registrado : 14/12/2010

    Re: Localizar duplicados especial

    Mensagem  julianovv em 10/5/2018, 21:27

    Obrigado Cassio. Deu certo mas faltaram algumas alterações que não consegui inserir como a ordem crescente e as casas decimais. De resto ficou muito bom!

    Caixa de mensagem com os dados


    Segue a versão com caixa de combinação e subformulário. Também funciona mas mais pesado e na lista não foi possível evitar a duplicação mas é mais ou menos por aí. É um formulário que não pretendo usar. Procurar pelo arquivo não funciona.

    Pesquisa de duplicados


    Obrigado!

    Wink
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Localizar duplicados especial

    Mensagem  CassioFabre em 11/5/2018, 03:26

    Bom dia,

    Para ordenar o registro pelos CDs voce pode fazer o seguinte: substitua o trecho set rs = currentdb.openrecordset("SELECT * FROM SUA_TABELA WHERE txtNomeArquivo = '" & campoNomeArquivo & "'") por:
    Código:
    set rs = currentdb.openrecordset("SELECT * FROM SUA_TABELA WHERE txtNomeArquivo = '" & campoNomeArquivo & "' ORDER BY cd asc")

    Neste caso o que seriam casas decimais?

    O formulário seria bom caso quisesse abrir a pasta dos arquivos já cadastrados por algum motivo. Para fins apenas de informação, realmente a msgbox é muito mais leve.

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 545
    Registrado : 14/12/2010

    Re: Localizar duplicados especial

    Mensagem  julianovv em 13/5/2018, 20:29

    Obrigado Cassio! Agora deu certo!
    Até uma próxima!

    Laughing


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: 19/8/2018, 20:35