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]Pula a instrução do if e faz a ultima linha

    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1815
    Registrado : 23/01/2018

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  crysostomo 2/3/2021, 18:37

    colegas boa  noite, estou começando a mudar a instrução de ssql pelo recordset.
     O problema que esta acontecendo é que o meu comando o sistema não verifica se a caixa está vazia ele passa da linha verifica se o nome existe no bd caso não ele cadastra . 
     não sei o problema é esse porque quando mudo  a ssql a depuração colocando o recordset  o sistema pula das instrução da caixa vazia e cadastra 

    Código:
    Dim rst1 As Recordset
        If IsNull(Me.txt_nome_proced) Then
            MsgBox "A caixa está vazia", vbCritical, "Serviço Social"
    ElseIf DCount("*", "tbl_tipo_de_procedimentos", "tipos_de_procedimentos ='" & Me.txt_nome_proced & "'") >= 1 Then
        MsgBox "OPA! Esse procedimento já está cadastrado", vbCritical, "Serviço Social"
    Else
     Sel1 = "SELECT * from tbl_tipo_de_procedimentos"
            Set rst1 = CurrentDb.OpenRecordset(Sel1)
            rst1.AddNew
                    rst1![tipos_de_procedimentos] = Me.txt_nome_proced
                   rst1.Update
            rst1.Close
         MsgBox "Cadastrado com sucesso", vbInformation, "Seviço Social"
    Me.txt_nome_proced = ""

    End If
    End Sub
    tenho outra maneira de não cadastrar como, se estiver no banco o nome o botão fica travado , queria começar mexer com recordset qual seria esse problema do código acima?


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty Re: [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  Alexandre Fim 2/3/2021, 21:08

    Crysostomo,

    O problema está na verificação de cada IF.

    Copie e cole o código abaixo e observe os comentários.


    Código:


    Private Sub GravaDados()
    On error goto trata_erro
    Dim rst1 As DAO.Recordset
       
       'Verifica se é nulo ou vazio
       If IsNull(Me.txt_nome_proced) or Trim(Me.txt_nome_proced) = Empty  Then
            MsgBox "O Nome do Procedimento é de preenchimento obrigatório", vbExclamation, "Serviço Social"
          Exit Sub 'Se a condição não atender, a rotina para aqui
       End If

       'Conta na tabela se existe registro com a descrição informada
       If DCount("*", "tbl_tipo_de_procedimentos", "tipos_de_procedimentos ='" & Trim(Me.txt_nome_proced) & "'") >= 1 Then
          MsgBox "Já existe um preocedimento cadastrado com este nome.", vbExclamation , "Serviço Social"
          Exit Sub 'Se a condição não atender, a rotina para aqui
       End If

       'Sel1 = "SELECT * from tbl_tipo_de_procedimentos" ==> Não carregue todos os registros da tabela, pois se ela possuir 10.000 registros, seu sistema ficará lento
        Sel1 = "SELECT TOP 1 * from tbl_tipo_de_procedimentos" '==> selecione apenas 1 registro para abrir um recordset
       rst1 = CurrentDb.OpenRecordset(Sel1)
        rst1.AddNew
        rst1![tipos_de_procedimentos] = Me.txt_nome_proced
        rst1.Update
       
       rst1.Close 'Fecha o recordset
       SET rst1 = Nothing 'Limpa da memória
           
       MsgBox "Cadastrado com sucesso", vbInformation, "Seviço Social"
       Me.txt_nome_proced = ""
       
       Exit Sub
    'Sempre faça o tratamento de erro nas rotinas. Se ocorrer o erro, o Access vai infomar qual erro foi gerado
    trata_erro:
       msgbox "Erro gerado: "& Err.Number &" - "& Err.Description &"",vbCritical, "Erro"
       Exit Sub
       

    End Sub



    Boa sorte
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty Re: [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  Alexandre Fim 2/3/2021, 21:27

    Crysostomo,

    Procure utilizar as constantes de mensagens de forma correta:

    [Resolvido]Pula a instrução do if e faz a ultima linha Consta10

    - VbCritical: utilize para informar quando houver um erro no sistema.
    [Resolvido]Pula a instrução do if e faz a ultima linha Msg_er10

    MsgBox "Erro no banco de dados",vbCritical, "Erro"


    - VbExclamation: Utilize para advertir o usuário. Ex.: use nas mensagens de campos não preenchidos ou com valores inválidos.
    [Resolvido]Pula a instrução do if e faz a ultima linha Msg_ex10

    MsgBox "O campo Nome é de preenchimento obrigatório.",vbExclamation, "Aviso"


    - VbInformation: Informar o usuário quando o registro foi gravado corretamente ou terminado algum cálculo e etc.
    [Resolvido]Pula a instrução do if e faz a ultima linha Msg_in10

    MsgBox "Registro gravado com sucesso",vbInformation, "Mensagem"



    - vbQuestion: Utilizar em mensagens quando depender de uma decisão do usuário. Ex.: Deseja realmente excluir o registro?
    [Resolvido]Pula a instrução do if e faz a ultima linha Msg_qu10

    MsgBox "Confirma a exclusão do registro?",vbQuestion+vbYesNo, "Confirma(S/N)?"



    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1815
    Registrado : 23/01/2018

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty Re: [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  crysostomo 3/3/2021, 14:42

    Esse primeiro end if com exit sub tinha me dado problema então coloquei ele lá em baixo. esse top1 não tinha visto na minha humilde pesquisa de iniciante de instrução . 
    Deu certo aqui, mas vou rever as linhas.
    Uma pergunta, o recordset tem um função de atualizar todos os campo sem precisar digitar os mesmo códigos para cada campo?
    Obrigo Alexandre.
    o recordset parece bem mais rápido para agir .
    vou entra comentando todas as linhas mesmo sabendo das outras.


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1791
    Registrado : 13/12/2016

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty Re: [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  Alexandre Fim 3/3/2021, 16:20

    Crysostomo boa noite,

    Recordset é um objeto onde ele retorna um conjunto de dados na memória.
    Ele pode trazer dados de uma tabela, de uma query (consulta com 1 ou mais tabelas) e etc.
    Esses dados você pode manipular também, para carregar listbox (Caixa de Listagem), combobox (Caixa de combinação), campos em formulários e etc.
    Os recordset's (DAO e ADO) oferecem este recurso da propriedade AddNew e Update, mas que não é muito usual em nivel de programação profissional.
    O melhor é criar uma instrução SQL de INSERT para inserir dados na tabela, onde é possivel realizar um melhor controle em gravar, excluir, alterar e selecionar dados.

    Uma pergunta, o recordset tem um função de atualizar todos os campo sem precisar digitar os mesmo códigos para cada campo? escreveu:

    O recordset irá atualizar os dados dos respectivos campos do form, mas vc tem que indicar cada um deles no código. Ex.:


    rst.AddNew
    rst("Campo001") = me.Campo001.value
    rst("Campo002") = me.Campo002.value
    rst("Campo003") = me.Campo003.value
    rst("Campo004") = me.Campo004.value
    rst.Update


    Espero ter ajduado

    Boa sorte










    crysostomo gosta desta mensagem

    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1815
    Registrado : 23/01/2018

    [Resolvido]Pula a instrução do if e faz a ultima linha Empty Re: [Resolvido]Pula a instrução do if e faz a ultima linha

    Mensagem  crysostomo 4/3/2021, 04:34

    Obg Alexandre.
    Vou continuar mexendo no ssql não vou abandonar só mexendo no ter pra ver performance


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.

      Data/hora atual: 26/9/2021, 03:33