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

    Comparação entre Record set e Caixa de Texto

    Compartilhe

    Gipesi
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 15/01/2017

    Comparação entre Record set e Caixa de Texto

    Mensagem  Gipesi em Qua 23 Ago 2017, 14:31

    Senhores bom dia .
    Sou novo no Grupo e também no mundo VBA Access.  
    Estou disposto a compartilhar conhecimentos.
    Estou com uma duvida relacionada ao meu código .
    A comparação entre o Record Set e a caixa de texto neste laço , mesmo os valores sendo "diferentes" vai para o "ELSE" do laço.
    O que estou fazendo de errado ?
    para (Me.CXT_DAT_COM_CONCL.Value) o valor = 02/08/2017 => uma data qualquer
    para (rs.FIELDS("DAT_FICHA_FIS").Value) o valor = Nulo => não foi inserido nenhum valor para este campo ainda.

    Segue trecho do código:


    'condição para alteração de valor
    Código:

       If (Me.CXT_DAT_COM_CONCL.Value) <> (rs.FIELDS("DAT_FICHA_FIS").Value) Then   '''''Está condição , mesmo quando os valores são diferentes vai para o "ELSE" do if
            nome_proj = CTX_DEF_PROJ_CAB.Value
            log_nome_campo = "Data Entrega ficha fisica"
              If Not IsNull(Me.CXT_DAT_COM_CONCL.Value) Then
                log_val_campo = Me.CXT_DAT_COM_CONCL.Value
                Else
                log_val_campo = ""
             End If
      log_Aba = "Entrada"
      input_log
      ![DAT_FICHA_FIS] = Me.CXT_DAT_COM_CONCL.Value
      .Update
      Mensagem = "Data da Entrega da Ficha fisica Atualizada ! " & vbCr & vbCr
      'fim condição para alteração
      Else  ''''''''A condição mesmo estando diferente vem para este Else
      End If
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1038
    Registrado : 05/02/2010

    Comparação entre Record set e Caixa de Texto

    Mensagem  good guy em Qua 23 Ago 2017, 18:35

    Olá Gipesi,

    O que acontece é que você inseriu no seu campo a propriedade "Fields" sem buscá-la na devida biblioteca de recordset. O certo é você declarar primeiro uma variável referente a essa biblioteca dll no seu código e depois buscar a propriedade "Fields" e referenciar o seu campo pela devida tabela determinada pela declaração Set. Veja abaixo meu exemplo de código

    Código:

    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    Set rs = Currentdb.OpenRecordset("SuaTabela", dbOpenTable)


    Do While Not rs.EOF      'Use Do While quando quiser percorrer toda a tabela até chegar ao último registro do recordset. Verifique se é necessário

      If (Me.CXT_DAT_COM_CONCL.Value) <> (rs.FIELDS("DAT_FICHA_FIS").Value) Then  
           nome_proj = CTX_DEF_PROJ_CAB.Value
           log_nome_campo = "Data Entrega ficha fisica"
             If Not IsNull(Me.CXT_DAT_COM_CONCL.Value) Then
               log_val_campo = Me.CXT_DAT_COM_CONCL.Value
               Else
               log_val_campo = ""  
             End If
      Else
      Exit Do
      End If
    Loop

    rs.close    'Encerra o uso da biblioteca
    db.Close  'Fecha o banco de dados

    Set rs = Nothing      'Limpa o cache de memória
    Set db = Nothing    'Limpa o cache de memória

    DoCmd.SetWarnings False

    Gipesi
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2
    Registrado : 15/01/2017

    Re: Comparação entre Record set e Caixa de Texto

    Mensagem  Gipesi em Qua 23 Ago 2017, 22:23

    Boa noite.
    Obrigado pela resposta.
    Eu acho que fiz corretamente este processo que você mencionou:
    Eu fiz funções para abrir e  fechar o record set e o banco .
    Assim eu só chamo a função quando quero abrir ou fechar o banco
    e fechar e limpar o record set .
    ******************************************************
    Sub fecha_rs()
    rs.Close
    Set rs = Nothing
    End Sub
    ********************************
    Sub fecha_banco()
    BANCO.Close
    Set BANCO = Nothing
    End Sub
    *********************************
    'caminho do banco
    Sub caminho()
    caminho_banco = "G:\DADOS\dados.accdb"
    )

    ********************
    'funcao para abrir o banco

    Sub abre_banco()
    caminho               ' caminho declarado na função acima
    Set ws = DBEngine.Workspaces(0)
    Set BANCO = OpenDatabase(caminho_banco, False, False, "MS Access;PWD=SENHA DO BANCO")
    End Sub

    *********************
    'botão que faz todo o processo

    Private Sub btn_Salv_receb_conc_Click()
    If Not IsNull(Me.CTX_DEF_PROJ_CAB.Value) Then
    abre_banco
    Set rs = BANCO.OpenRecordset("Select DAT_REPRO_DOC,DAT_RET_REPRO_DOC,REPROV_DOCUMENTA,DAT_INV_EXECUT,DAT_NOT_REPAR,TECN_CONCIL,DAT_RET_REPAR,DAT_ENV_ACERT,JUST_REPR_PROJ,INV_CONCILIADO,INV_REPRO_CONCIL,INV_APR_PEND_REPAR,DAT_FICHA_FIS,UPS_EXEC_CONC,INV_FISC_CONC,UPS_FISC_CONC,OBS_GERAL_CONCIL,DAT_CONC_INV,FOT_APR_CONCIL " _
                              & "from DADOS_GERAIS WHERE DEF_PROJ=" & """" & Me.CTX_DEF_PROJ_CAB.Value & """")         ''''''''''''''Me.CTX_DEF_PROJ_CAB.Value => Nesta caixa de texto o usuário digita o número do projeto"  o select  localiza toda a informação relacionada a ao projeto e carrega no formulário em outro momento anterior ''''''''''''''

    With rs
                   If Not .BOF And Not .EOF Then
                       .MoveLast
                       .MoveFirst
                                         If .Updatable Then
                                   
                                               .Edit
                                               
                                               '''''INPUT LOG ''''''''
                                               'condição para alteração de valor
                                               If (rs.FIELDS("DAT_FICHA_FIS").Value) <> Me.CXT_DAT_COM_CONCL.Value Then  ''''''''O select de cima carrega o valor do campo DAT_FICHA_FIS da Tabela DADOS_GERAIS
                                               nome_proj = CTX_DEF_PROJ_CAB.Value
                                               log_nome_campo = "Data Entrega ficha fisica"
                                               If Not IsNull(Me.CXT_DAT_COM_CONCL.Value) Then
                                               log_val_campo = Me.CXT_DAT_COM_CONCL.Value
                                               Else
                                               log_val_campo = ""
                                               End If
                                               log_Aba = "Entrada"
                                               
                                               input_log
                                               ''''''''''''''''''''''
                                               ''''''''''''''''''''''
                                                                                   
                                               ![DAT_FICHA_FIS] = Me.CXT_DAT_COM_CONCL.Value
                                               
                                               .Update
                                               Mensagem = "Data da Entrega da Ficha fisica Atualizada ! " & vbCr & vbCr
                                               'fim condição para alteração
                                               Else
                                               End If
                                         
                                         End If
                   End If
                               
           End With

    MsgBox Mensagem
       fecha_rs
       fecha_banco
       
       
       Else
       MsgBox "Para atualizar os dados você precisa carregar um projeto."
       End If
    End Sub

    ******************************************************************
    ******************************************************************

    Esse é o código que tenho.
    Ele funciona da seguinte forma.É para alimentar uma tabela de LOG. Eu  quero alimentar somente o que o usuário alterar quando apertar o botão de salvar .
    Assim eu fiz uma comparação com o que existe no formulário dentro da caixa de texto.
    Depois que carrega os dados  do "Número do projeto" que é localizado. Os dados são carregados no formulário nas caixas de texto que não são associadas .
    Eu queria fazer uma comparação com o valor que o record set traz após o select com o que tenho na caixa de texto . SE for diferente o valor atualiza a tabela de log .
    SE for igual não faz nada.
    Só que o meu record set quando não traz valor nenhum pois o campo não tem nenhum dado , ele não consegue comparar com o valor da caixa de texto ,passa direto no else.
    para (Me.CXT_DAT_COM_CONCL.Value) o valor = 02/08/2017 => uma data qualquer
    para (rs.FIELDS("DAT_FICHA_FIS").Value) o valor = Nulo => não foi inserido nenhum valor para este campo ainda.

    If (Me.CXT_DAT_COM_CONCL.Value) <> (rs.FIELDS("DAT_FICHA_FIS").Value) Then   '''''Está condição , mesmo quando os valores são diferentes vai para o "ELSE" do if

    ** Eu quero que , quando os valores forem diferentes seja executado o que está dentro do laço .  
       Parece que está comparação do campo "NULO" do record set com o valor "DATA" preenchida na caixa de texto não Satisfaz a comparação de desigualdade do Else.

    Desculpe se fui muito extenso.  
    Você conseguiu entender minha dúvida ?
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1038
    Registrado : 05/02/2010

    Comparação entre Record set e Caixa de Texto

    Mensagem  good guy em Qui 24 Ago 2017, 12:47

    Olá Gipesi,

    Ainda está muito confuso. Posta o bd para darmos uma olhada e estudar o que você deseja.

      Data/hora atual: Sab 23 Set 2017, 06:47