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


    [Resolvido]bloqueio em subformulário

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty bloqueio em subformulário

    Mensagem  fabiobarreto10 10/6/2012, 21:41

    Amigos, estou com uma dificuldade e vim pedir a ajudar de vocÊs.
    Eu tenho um subformulário com os seguintes campos.Passo, data programada, data reprogramada e data realizada.

    No evento no atual, eu tenho este códigos:

    Me.DataProgramada.Locked = True



    If IsNull(DataRealizada) Then
    Me.DataReprogramada.Locked = False
    Else
    Me.DataReprogramada.Locked = True
    End If



    If Not IsNull(Me.DataReprogramada) Or Not IsNull(Me.DataRealizada) Then
    Me.Passo.Locked = True
    Else
    Me.Passo.Locked = False
    End If

    Estou tentando que o primeiro registro vazio do campo data realizada, fique desbloqueado e os demais bloqueados. Assim, forço
    o usuário a realizar um passo de cada vez. Ou seja, ao preencher o campo data realizada com uma data, somente o campo data realizada
    do próximo registro fique disponível, e os demais fiquem bloqueados. Imagem em anexo, talvez explique melhor.

    Obrigado.
    Anexos
    [Resolvido]bloqueio em subformulário AttachmentSem título.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (187 Kb) Baixado 9 vez(es)
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 10/6/2012, 21:52


    Como se trata de form contínuo, creio que deverá usar a formatação condicional, substituindo Locked por Enabled.

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 10/6/2012, 22:36

    Noberto, obrigado por ajudar.

    Neste caso, eu teria que fazer uma expressão no campo? Sinceramente, eu não sei como fazer.
    Não possível fazer por meio do VBA?

    Obrigado.

    Fábio.
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 10/6/2012, 22:51


    Se o objetivo é conduzir o usuário a preencher os campos na ordem correta, não é necessário bloquear campos.

    Pode-se usar eventos como AoEntrar ou AoReceberFoco para controlar isto.

    Explique exatamente sua intenção e vamos ver o que se pode fazer.

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 10/6/2012, 23:44

    ok, vou elaborar melhor. Conforme a imagem enviada anteriormente:


    Quando é cadastrado um novo produto (no evento se não estiver na lista da combo produto), é automaticamente registrado oito passos.

    O campo data programada (é travado) é preenchido automáticamente de acordo com as datas inseridas nos campos data reprogramada e data realizada.

    Quando o usuário inseri uma data no campo data reprogramada, o campo passo fica bloqueado.

    Quando o usuário inseri uma data no campo data realizada o campo data reprogramada e também o campo data realizada fica bloqueado. Com isso todos os campos
    do registro ficam bloqueados (exceto o campo ponto focal, mas este não vem ao caso).

    Quando o campo passo é alterado,(somente é possível se os campos data reprogramada e data realizada estiverem vazios)
    todos os registros seguintes são apagados, pois a sequência foi desfeita.

    O meu problema está quando o usuário preenche o campo data realizada de um determinado passo, e existem passos anteriores sem o preenchimento do campo data
    realizada. Com isso estes passos anteriores podem ser alterados, pois o campo data realizada estará vazio. ( o campo data reprogramada não é obrigatório).

    Por isso preciso forçar o usuário a somente preencher o primeiro campo data realizada que estiver vazio.

    Obrigado.
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 00:36


    Como são sempre 8 passos, creio que a opção por um form normal único seria mais adequada, e tornaria este controle de preenchimentos muito mais eficiente, além da economia de objetos, pois toda informação poderia estar no form principal, sem necessidade do subformulário.

    Repare que há redundância de informações: no form principal é registrado o código (633) e a mesma informação é repetida mais 8 vezes no subform.

    Avalie a possibilidade de colocar todos os controles na mesma tabela.

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 00:45

    Desculpe, tem um previsão inicial de oito passos, mas no total são 15 passos, nem todos obrigatórios. Tem um relacionamento de um para muitos da tabela produto
    para a tabela passo, por isso a repetição do código 633.
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 00:58


    Sejam oito ou quinze, salvo melhor juízo, mantenho minha opinião que um único form seria mais eficiente, considerando a dificuldade de validar campos em registros anteriores.
    Como se poderia saber se um determinado campo no passo 3 ou 4 (p.ex.) foi preenchido, ainda mais se o número de passos pode variar?

    E a questão da redundância de dados permanece.

    Exponha a necessidade do subformulário para que possamos entender.

    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 01:05


    A questão se prende mais ao fato de ser um form contínuo em vez de normal.

    Entendi o detalhe da relação entre produtos e passos, então reformulo a questão:

    Poderia usar um form normal para os passos?

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 01:14

    Eu preciso visualizar todas as informações em um único formulário, como tenho uma relação de um para muitos da tabela produto com
    a tabela passo, eu uso o subformulário. Veja eu tenho assessor, empresa, produto, passos...

    Eu preciso visualizar os passos e as datas em um formulário no modo folha de dados. O que seria um form normal?

    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 01:48


    Um form normal exibe as informações de cada registro em uma página (uma tela), e um form contínuo exibe os dados de cada registro em uma linha.

    Em um form normal é possível inserir outro form, que chamamos de subform, e este subform pode ser contínuo ou normal.

    A dificuldade de trabalhar com validação em forms contínuos é que quando se atribui uma condição a um campo, esta condição afeta o campo em todas as linhas (registros).
    A opção é a formatação condicional (que afeta apenas o registro), mas ela tem limitações.

    Se houver uma forma de identificar cada passo, seria possível uma validação do tipo:

    Private Sub DataRealizadaPasso5_BeforeUpdate(Cancel As Integer)
    If IsNull(DataRealizadaPasso3) Or IsNull(DataRealizadaPasso4) Then
    Cancel = True
    Me.DataRealizadaPasso5.Undo
    MsgBox "Preencha as datas dos passos anteriores"
    End If
    End Sub

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 02:19

    Obrigado pelo código. Vou ver se eu consigo fazer um loop pela tabela e usar o seu código. Um momento por favor.
    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 02:49

    Estou tentando verificar se tem algum campo data realizada vazia com este código:

    Dim testeDataRealizada As Variant
    Dim Db As Database, rs As Recordset, sql As String
    Set Db = CurrentDb
    Set rs = Db.OpenRecordset("SELECT DataRealizada FROM TblPassosStatus WHERE CodProduto =" & CodProduto & " AND CodPassosStatus < " & CodPassosStatus)

    rs.Movefirt
    testeDataRealizada = rs.Fields(0)

    Apenas preciso colocar mais uma condição na "WHERE", DataRealizada = nulo, mas não estou conseguindo fazer a sintaxe correta, você pode ajudar?
    Acho que assim, eu posso identificar se tem algum campo com a datarealizada vazia, e usar o seu código.

    Obrigado.
    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 04:14

    Noberto, fiz uma gambiarra e consegui resolver o meu problema:

    Private Sub DataRealizada_BeforeUpdate(Cancel As Integer)
    Dim testeDataRealizada As Variant
    Dim testecodPasso As Integer
    Dim Contador As Integer
    Dim getpasso As Integer

    testecodPasso = Me.CodPassosStatus

    Dim Db As Database, rs As Recordset, sql As String
    Set Db = CurrentDb
    Set rs = Db.OpenRecordset("SELECT DataRealizada, Passo FROM TblPassosStatus WHERE CodProduto =" & CodProduto & " AND CodPassosStatus < " & CodPassosStatus)

    If rs.BOF Then
    Exit Sub
    Else
    rs.MoveFirst
    While Not rs.EOF
    testeDataRealizada = rs.Fields(0)
    rs.MoveNext
    Wend

    End If
    If IsNull(testeDataRealizada) Then

    Contador = 1
    End If

    If Contador = 1 Then
    Cancel = True
    Me.DataRealizada.Undo
    MsgBox "Preencha as datas dos passos anteriores"
    Exit Sub
    End If
    End Sub

    Suas duas linhas de código:

    Cancel = True
    Me.DataRealizada.Undo

    Foram fundamentais, pois como não tenho muito experiência com o VBA, eu ainda não as tinha utilizado.

    Muito Obrigado por ajudar.

    Fábio.
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 04:24


    Antes de você resolver, ia postar esta resposta:

    Tenho dúvidas quanto a esta técnica.
    Como determinar se os passos anteriores a um com data nula foram preenchidos?

    Acho que é preciso identificar cada passo: 1, 2, 3... 15.
    Teria de haver este índice identificador na tabela.
    Daí daria para associar o código (p.ex. 633) com o índice do passo, e fazer a verificação.



    Bom que resolveu!
    Grato pelo retorno.

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 05:19

    A minha ideia no código é a seguinte:

    O código faz um loop pela tabela onde o codpassoStatus é menor que o código onde o registro esta sendo modificado, se tiver
    algum campo datarealizada com a data vazia, adiciona 1 a variável contador. O if, ficou fora do while (inicialmente eu estava tentando :
    if variavel = "" then, mas não funcionou, então eu coloquei: if isnull(variavel) then...) mas depois eu testei
    dentro do while.

    Datanula você quer dizer feriado, fim de semana...?

    Obrigado.
    avatar
    Convidad
    Convidado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Convidad 11/6/2012, 05:38


    Apenas apresentei a ideia do índice como forma de identificar o registro onde houvesse uma data não preenchida (Nula).

    Mas você encontrou uma alternativa eficaz com esta variável. Beleza!

    avatar
    fabiobarreto10
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 165
    Registrado : 15/12/2011

    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  fabiobarreto10 11/6/2012, 05:43

    Valeu Noberto.

    Conteúdo patrocinado


    [Resolvido]bloqueio em subformulário Empty Re: [Resolvido]bloqueio em subformulário

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/4/2024, 16:05