Página 1 de 1

[RESOLVIDO] Impedir cadastro em duplicidade

Enviado: Dom Jul 22, 2018 7:40 pm
por andre220
Caros amigos,

Não estou conseguindo impedir que o campo CodProduto aceite cadastro em duplicidade.
Alguém poderia me ajudar? Muito obrigado

Código: Selecionar todos

Private Sub UserForm_Activate()
    cnnBanco.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\Banco_SIG.mdb"
    rstBanco.Open "SELECT Id, CodProduto, NomeProduto, Valor FROM TblProduto", cnnBanco, adOpenKeyset, adLockOptimistic, adCmdText
    Indice = rstBanco.AbsolutePosition
    Activar
    
   
End Sub


Sub Incluir_Registro()
    
     If Me.txtCodProduto.Text = "" Or txtNomeProdutoFlora.Text = "" Or Me.txtValor.Text = "" Then
        
       MsgBox "Os campos: Código do Produto, Nome Produto, Valor, não devem ficar em branco, digite!!!", 64, "Aviso"
Else
      
    ''Inserindo os dados na tabela
    With rstBanco
        .AddNew
        .Fields("CodProduto") = Me.txtCodProduto.Text
        .Fields("NomeProduto") = Me.txtNomeProduto.Text
        .Fields("Valor") = Me.txtValor.Text
        rstBanco.Update
        
        lblMensagemSim.Caption = "Registro salvo com sucesso."
        
    End With
    
End If
End Sub

Re: Impedir cadastro em duplicidade

Enviado: Seg Jul 23, 2018 4:27 pm
por PRMPOKER
Prezado andre220,

Para validar se o CodProduto já existe e impedir a duplicidade, utilize a função Dlookup, da seguinte maneira:

Código: Selecionar todos

'(verificar se o tipo do campo na tabela e declarar a variável de acordo)
Dim vCodProduto as integer 
'A função DLookup busca o campo "CodProduto", na tabela "TblProduto", respeitando a condição "CodProduto="
vCodProduto = Dlookup("CodProduto", "TblProduto", "CodProduto=" & Me.txtCodProduto.Text)

'Testa se a variável possui algum retorno, ou seja, se existe o registro. Caso não exista, segue na rotina de inclusão. Caso exista, exibe uma mensagem.
If Isnull(vCodProduto)  or vCodProduto = "" then 'Se a variável é nula ou vazia:
    With rstBanco
        .AddNew
        .Fields("CodProduto") = Me.txtCodProduto.Text
        .Fields("NomeProduto") = Me.txtNomeProduto.Text
        .Fields("Valor") = Me.txtValor.Text
        rstBanco.Update        
        lblMensagemSim.Caption = "Registro salvo com sucesso."        
    End With
Else
      Msgbox "Código já cadastrado!"
      Exit Sub
End If
Faz uma busca no Google sobre a função DLookup. É muito útil.

Qualquer coisa, dá um grito.

Abraço!

Re: Impedir cadastro em duplicidade

Enviado: Seg Jul 23, 2018 8:31 pm
por andre220
Paulo,

Muito Obrigado pelo retorno

Deu erro aqui na função DLookup

erro "Sub ou Function não definida"

Não consegui solucionar :(

Abraços!

Re: Impedir cadastro em duplicidade

Enviado: Ter Jul 24, 2018 10:43 am
por Reinaldo
Se não me engano, Dlookup e uma função de banco de dados, e como tal, não é presente no Excel gerando assim o erro.
Para utiliza-la no escopo de seu procedimento, el necessário aloca-la, convenientemente/adequadamente na clasula select de sua rotina

Re: Impedir cadastro em duplicidade

Enviado: Qua Jul 25, 2018 9:35 am
por PRMPOKER
Bom dia Pessoal,
Reinaldo, em função do tópico ser Excel+Access, acabei me atrapalhando, hehehehe....

Então andre220, basta que você busque verificar se o registro existe, fazendo uma contagem no Recordset:

Código: Selecionar todos

'verificar se o registro já existe na tabela
 cnnBanco.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\Banco_SIG.mdb"
    rstBanco.Open "SELECT * Valor FROM TblProduto WHERE CodProduto=" & Me.txtNomeProduto.Text, cnnBanco, adOpenKeyset, adLockOptimistic, adCmdText
    

'Testa se o Recordset possui algum retorno, ou seja, se existe o registro. Caso não exista, segue na rotina de inclusão. Caso exista, exibe uma mensagem.
If Isnull(rstBanco.Recordcount)  or rstBanco.Recordcount < 1 then 'Se o Recordset é nulo ou não existe o registro:
    With rstBanco
        .AddNew
        .Fields("CodProduto") = Me.txtCodProduto.Text
        .Fields("NomeProduto") = Me.txtNomeProduto.Text
        .Fields("Valor") = Me.txtValor.Text
        rstBanco.Update        
        lblMensagemSim.Caption = "Registro salvo com sucesso."        
    End With
Else
      Msgbox "Código já cadastrado!"
      Exit Sub
End If
Testa aí e nos retorne, por favor.

Re: Impedir cadastro em duplicidade

Enviado: Qui Jul 26, 2018 1:42 am
por andre220
Caros amigos, Paulo e Reinaldo

Agora funcionou perfeitamente. Muito Obrigado

Deus abençoe vocês

Re: [RESOLVIDO] Impedir cadastro em duplicidade

Enviado: Sex Jul 27, 2018 12:46 pm
por PRMPOKER
Caro André, bom dia!

A satisfação é minha, e certamente também do Reinaldo, por de alguma forma, podermos ser úteis.

Grande abraço!

Paulinho Monteiro.