MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    [Resolvido]Como não inserir dados Duplicados

    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Como não inserir dados Duplicados

    Mensagem  ronaldojr1 3/7/2012, 13:25

    Bom dia a todos

    Estou desenvolvendo um banco de dados e ele ta ficando bom e tal. Com a ajuda de vcs quero resolver um possível problema de duplicação de dados, só que na verdade não está duplicado. Vou explicar melhor.

    Tenho um formulário Chamado Despesas. Nesse formulário vou cadastrando todas as despesas na produção de um livro.
    Campos principais existentes

    Cod - Codigo do livro

    Serviços - Dependendo do Serviço que eu coloco aqui a formula do SubTotal muda. É nesse campo que tem 1 único valor que eu não quero que ele duplique, Chamado "Eventuais", pois esse eventuais é o formulário "CustoTotal" que insere no Formulário "Despesa", mais abaixo posto o código pra vcs entenderem melhor.

    Qtde - Quantidade
    Valor - Valor
    SubTotal - Campo Calculado pelo VBA dependo do Tipo do Serviço a Formula Muda.

    Pois bem meu campo coicidente entre os formulários é o Cod, nesse formulário o Cod está definido para duplicação Autorizada e o Formulário "CustoTotal" é um formulário que não da pra alterar, pois ele é um resultado de uma consulta que Soma tudo.

    Agora vamos ao foco do tópico.

    Como não deixar o Botão "Inserir Eventuais" que está no Formulário CustoTotal inserir mais de uma vez no mesmo Código que está formulário "Despesas"? Ex.: o Codigo 31281 só pode ter 1 Eventuais e diferente disso o mesmo Codigo pode ter outras despesas mesmo se duplicar.

    Segue o Codigo do Botão "Inserir Eventuais" Localizado no CustoTotal.

    Private Sub Calc_Margem_Click()

    Dim resultado As VbMsgBoxResult
    resultado = MsgBox("Inserir Eventuais?", vbYesNo, "Atenção")

    If resultado = vbYes Then

    Dim ct, Margem, Tiragem, unit, eventu As Double
    Dim bco As Database

    ct = Me.Total
    Margem = Me.Margem
    unit = Me.Custo_Unit
    Tiragem = Me.Tiragem

    eventu = unit + Margem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu * Tiragem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu - ct
    eventu = FormatNumber(eventu, 2)

    Dim L_Servicos As Recordset
    Set bco = CurrentDb()
    Set L_Servicos = bco.OpenRecordset("L_Servicos")

    L_Servicos.AddNew
    L_Servicos!Cod_L = Cod_L
    L_Servicos!Serviços = "Eventuais"
    L_Servicos!Qtde = 1
    L_Servicos!Valor = eventu
    L_Servicos!Subtotal = eventu
    L_Servicos!PrecoUnit = unit + Margem
    L_Servicos.Update
    Else
    Exit Sub
    End If
    End Sub

    Luís Augusto
    Luís Augusto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 129
    Registrado : 28/10/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  Luís Augusto 3/7/2012, 15:53

    Tente assim:

    Private Sub Calc_Margem_Click()

    Dim resultado As VbMsgBoxResult
    resultado = MsgBox("Inserir Eventuais?", vbYesNo, "Atenção")

    If resultado = vbYes Then

    If Not IsNull(Cod_L) Then
    Avalia = "Cod_L='" & Cod_L & "' And Serviços='" & Eventuais & "'"

    If DCount("Cod_L", "L_Servicos", Avalia) > 0 Then
    Dialog.Box "Para o livro " & Me.Cod_L & " já foram lançadas despesas eventuais.", vbInformation, "Despesa duplicada"
    Exit Sub
    End If
    End If


    Dim ct, Margem, Tiragem, unit, eventu As Double
    Dim bco As Database

    ct = Me.Total
    Margem = Me.Margem
    unit = Me.Custo_Unit
    Tiragem = Me.Tiragem

    eventu = unit + Margem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu * Tiragem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu - ct
    eventu = FormatNumber(eventu, 2)

    Dim L_Servicos As Recordset
    Set bco = CurrentDb()
    Set L_Servicos = bco.OpenRecordset("L_Servicos")

    L_Servicos.AddNew
    L_Servicos!Cod_L = Cod_L
    L_Servicos!Serviços = "Eventuais"
    L_Servicos!Qtde = 1
    L_Servicos!Valor = eventu
    L_Servicos!Subtotal = eventu
    L_Servicos!PrecoUnit = unit + Margem
    L_Servicos.Update
    Else
    Exit Sub
    End If
    End Sub
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  ronaldojr1 3/7/2012, 17:06

    Ta falando que a variavel eventuais não foi definida.

    Avalia = "Cod_L='" & Cod_L & "' And Serviços='" & eventuais & "'"

    Essa Avalia é uma função interna do access?

    o botao pra calcular eventuais fica em um formulário e o campo Serviços que pode ter o Valor "Eventuais" Estão em outro. Mesmo assim Vai dar certo com esse código que vc postou?

    Esqueci de avisar que eu uso o Access 2007
    Grato
    Luís Augusto
    Luís Augusto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 129
    Registrado : 28/10/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  Luís Augusto 3/7/2012, 17:38

    Veja se funciona desta maneira.
    Seria interessante ter o seu BD para testar.

    Private Sub Calc_Margem_Click()

    Dim resultado As VbMsgBoxResult
    resultado = MsgBox("Inserir Eventuais?", vbYesNo, "Atenção")

    If resultado = vbYes Then

    If Not IsNull(Cod_L) Then

    Dim SuaVar as String
    SuaVar = Eventuais

    Avalia = "Cod_L='" & Cod_L & "' And Serviços='" & SuaVar & "'"

    If DCount("Cod_L", "L_Servicos", Avalia) > 0 Then
    Dialog.Box "Para o livro " & Me.Cod_L & " já foram lançadas despesas eventuais.", vbInformation, "Despesa duplicada"
    Exit Sub
    End If
    End If

    Dim ct, Margem, Tiragem, unit, eventu As Double
    Dim bco As Database

    ct = Me.Total
    Margem = Me.Margem
    unit = Me.Custo_Unit
    Tiragem = Me.Tiragem

    eventu = unit + Margem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu * Tiragem
    eventu = FormatNumber(eventu, 2)

    eventu = eventu - ct
    eventu = FormatNumber(eventu, 2)

    Dim L_Servicos As Recordset
    Set bco = CurrentDb()
    Set L_Servicos = bco.OpenRecordset("L_Servicos")

    L_Servicos.AddNew
    L_Servicos!Cod_L = Cod_L
    L_Servicos!Serviços = "Eventuais"
    L_Servicos!Qtde = 1
    L_Servicos!Valor = eventu
    L_Servicos!Subtotal = eventu
    L_Servicos!PrecoUnit = unit + Margem
    L_Servicos.Update
    Else
    Exit Sub
    End If
    End Sub
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  ronaldojr1 3/7/2012, 18:53

    Não consigui fazer funcionar.
    Segue o banco em anexo Se vc puder me ajudar agradeço muito.
    Anexos
    [Resolvido]Como não inserir dados Duplicados Attachmentservicos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (187 Kb) Baixado 26 vez(es)
    Luís Augusto
    Luís Augusto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 129
    Registrado : 28/10/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  Luís Augusto 3/7/2012, 20:51

    Veja se é o que pretende.

    Também adicionei esta linha no evento do botão para atualizar o formulário.
    Forms!L_Servicos.Requery 'Adicionado para Atualizar o Formulário L_Servicos
    Anexos
    [Resolvido]Como não inserir dados Duplicados Attachmentservicos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (103 Kb) Baixado 40 vez(es)
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  ronaldojr1 3/7/2012, 21:10

    Perfeito, é isso mesmo.

    Se não for abusar um pouco, vc pode comentar essa linha

    Avalia = "Cod_L=" & Me.Cod_L & " And Serviços='" & SuaVar & "'"

    o que vc exatamente ta fazendo e como o vba interpreta ela?

    gratissississimo.
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  ronaldojr1 3/7/2012, 22:04

    Faltou Colocar o resolvido.

    Obrigado pela ajuda Luis Autusto
    Luís Augusto
    Luís Augusto
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 129
    Registrado : 28/10/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  Luís Augusto 4/7/2012, 01:38

    Caro Ronaldojr1, acredito que assim como eu esteja iniciando o seu aprendizado. Devo ressaltar que não sou a pessoa mais indicada para a tarefa mas tentarei explicar da maneira como entendi.

    A sintaxe da função Dcount assim como a do Dlookup é composta da senguinte forma: DCount(expr, domínio [, critérios] )

    No seu BD está assim: DCount("Cod_L", "L_Servicos", Avalia)
    DCount é o nome da função...
    expr, servirá para identificar de quem estamos "falando"...
    [, critérios] é opcional mas funciona como filtro.
    No caso a variável Avalia só está passando para a função o domínio e o critério, se quiser pode apagar a declaração dessa variável e passar tudo na função assim:
    DCount("Cod_L", "L_Servicos", "Cod_L=" & Me.Cod_L & " And Serviços='" & SuaVar & "'")

    Em grosso modo seria assim:
    Conte("Cod_L", na tabela "L_Servicos", onde "Cod_L=" é igual ao valor do campo Cod_L que está no formulário, e na mesma linha o campo Serviços deve conter o valor de "Eventuais")

    Como disse, acredito que não seja a melhor pessoa para explicar mas, aconselho alguns tópicos para o melhor entendimento.

    Este para entender a função DLookup que usa a mesma estrutura do DCount, talvez assimile melhor.
    http://maximoaccess.forumeiros.com/t1533-funcao-dlookup-explicacao

    Este outro é uma video aula do Mestre Avelino sobre filtragens, mas também fala sobre como avaliar um código VBA usando o ponto de interrupção. Ele começa abordar este assunto após o 25° minuto após o começo do vídeo, isso me ajuda muito a entender todo o código postado.
    http://www.usandoaccess.com.br/tutoriais/tuto35.asp

    Sei que muito mais pode ser dito sobre as funções Dcount, Dlookup como o macete do uso das aspas simples e duplas, mas não estou encontrando os tópicos que abordam esse tema.
    Enfim, caso alguém queira dar a sua contribuição fique a vontade.

    Ps: Existe uma outra discução sobre estas funções aqui:
    http://maximoaccess.forumeiros.com/t7919-funcoes-dlookupdcountdmaxdmin-em-front-end-desvinculado?highlight=dlookup

    E uma ótima abordagem e exemplo aqui:
    http://maximoaccess.forumeiros.com/t8436-testes-de-performance-dos-varios-metodos-de-manipulacao-de-registros?highlight=Testes+de+Performance

    Espero que tenha ajudado.
    Um abraço.
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 419
    Registrado : 01/08/2011

    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  ronaldojr1 4/7/2012, 12:19

    Vlw Luis Ausgusto sua explicação me ajudou muito e vou seguir os tópicos que vc postou para melhorar o entendimento das funções.

    Grato pela ajuda

    Conteúdo patrocinado


    [Resolvido]Como não inserir dados Duplicados Empty Re: [Resolvido]Como não inserir dados Duplicados

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 25/11/2024, 12:58