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

    [Resolvido]duvida com vba

    Compartilhe

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    [Resolvido]duvida com vba

    Mensagem  Carlao2 em Qua 26 Jul 2017, 20:17

    Srs. Boa tarde.

    Venho mais uma vez a esse fórum recorrer a preciosa ajuda dos universitários

    Estou desenvolvendo um sistema, mas me deparei com uns problemas que não estou conseguindo resolver.
    Explico:

    Tenho em meu sistema um módulo que captura o usuário e o grupo, até ai tudo bem.
    Minha pergunta é:

    Existe uma maneira de ao se logar no sistema e, por exemplo, abrir o formulário para o lançamento de despesas de viagem, o número do formulário ser colocado automaticamente, pegando o campo cód do usuário logado que nada mais é que as iniciais do nome do mesmo e acrescentar um "-0001, -0002, etc".? ou seja, ficando por exemplo, assim "ATG-0001"

    Outro ponto é, como são diversos usuários, preciso que ao logar-se o usuário só consiga ver os formulários e relatórios dele, e somente se o logado for o administrador é que consegue ver todos.?

    Se não fui claro o suficiente, por favor, façam as perguntas que acharem necessárias para que consigam me ajudar.


    Desde já agradeço a atenção

    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Qui 27 Jul 2017, 14:40

    sugiro que no formulario em questao deixe a numeração automatica que o proprio access cria, normalmente e o seu campo de chave primaria que se encarrega disso.
    ai na tabela que o formulario faz referencia cria um campo autor ou criador sei la ve um nome legal ai. rsrs
    ai quando o usuario criar um novo lançamento ai nesse campo vc insere essa nomenclatura de codigo('IniciaisNomeSobrenome-NumeraçãoCrescente' : ATG-0001)

    so verifica se a entendi certo sua nomenclatura
    vejamos o nome : antonio augusto pereira santos junior
    ficaria assim: AAPSJ-1

    antes de começar a ver os codigos so me responde uma coisa
    qual a maneira que vc esta fazendo para capturar o usuário logado?

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Qui 27 Jul 2017, 14:47

    Olá Ronaldojr1. Bom dia.

    Obrigado pelo retorno.

    Uso um código para a captura do usuário e grupo

    Option Compare Database
    Public loginU As loginU
    Type loginU
    id As Long
    Usuario As String
    grupo As String
    End Type
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Qui 27 Jul 2017, 16:13

    bom tarde

    primeiro vc copias essas duas funcoes para um modulo ou para dentro do formulario, ai vc decidi o que achar melhor

    Código:

    Function getNmAutor(userLogado As String)

    Dim vetorNome() As String
        Dim i As Integer
        Dim parteNome As Variant
        Dim nmSaida As String
        vetorNome = Split(userLogado)
        nmSaida = ""
        For Each parteNome In vetorNome
            nmSaida = nmSaida & Mid(parteNome, 1, 1)
        Next
    getNmAutor = UCase(nmSaida) & "-" & getNumeroAutor(nmSaida)
    End Function

    Function getNumeroAutor(parteNome As String)
    Dim strSQL As String
    Dim bc As Database
    Dim rs As Recordset
    Dim numeroMaior As Integer
    Dim numeroAtual As Integer
    Dim vetor As Variant

        strSQL = "SELECT nmAutor From tbl_DespesaViagem where nmAutor like '" & parteNome & "*'" 'substituir para o nome da sua tabela
        Set bc = CurrentDb
        Set rs = bc.OpenRecordset(strSQL) 'abre a tabela filtrando as iniciais do nomeSobrenome em nmAutor
        numeroMaior = 0
        If rs.RecordCount > 0 Then
            rs.MoveFirst
            Do While Not rs.EOF
               vetor = Split(rs!nmAutor, "-")
               numeroAtual = vetor(1)
               numeroMaior = IIf(numeroAtual > numeroMaior, numeroAtual, numeroMaior)
               rs.MoveNext
            Loop
        End If
    Set bc = Nothing
    Set rs = Nothing

    getNumeroAutor = numeroMaior + 1
    End Function

    para usar eu sugiro que vc coloque o seguinte codigo no evento "antes de atualizar" do formulário(Propriedades do formulário > guia Evento > Antes de Atualizar)
    Código:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
       If Not IsNull(Me.nome) Then 'aqui vc substitui pelo comando para capturar o usuario que esta logado
            nmAutor = getNmAutor(Me.nome) 'aqui vc substitui pelo comando para capturar o usuario que esta logado
       End If
    End Sub

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Qui 27 Jul 2017, 17:20

    Ronaldojr1. Boa tarde.

    Muitíssimo obrigado pelo retorno e pela ajuda que já lhe é peculiar.

    Daqui à pouco vou entrar em uma reunião e assim que terminar vou testar esses códigos, e tão logo eu o faça te darei um retorno.


    Abraços

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 12:59

    RonaldoJr1. Bom dia.

    Mais uma vez quero agradecer sua atenção.

    Em virtude do meu, ainda muito baixo conhecimento em vba, não consegui fazer funcionar a numeração do formulário.

    Estou anexando o BD para que você, se for possível, dê uma olhada e veja o que é que estou fazendo de errado.

    O formulário em questão é o ENTRADA e ele vem das tabelas 2 e 3

    Desde já agradeço sua atenção

    Abs.
    Anexos
    PROJETO_ADV - testes.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.1 Mb) Baixado 5 vez(es)
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Sex 28 Jul 2017, 14:51

    bom dia
    eu vi alguns problemas ai no que vc esta pedindo.

    1 - na sua tabela de login os user cadastrado nao tem sobrenome ai o codigo iria gerar por exemplo "cameron : C-1 ; Prisco : P-1"
    2 - mesmo se tivesse nome e sobrenome o que aconteceria se duas pessoas tivessem o mesmo nome e sobrenome(dificil, mas nao impossivel)? vc nao teria como saber quem
    lançou o lançamento X.

    minha sugestao, criar um campo idLogin na tabela de Login e com esse numero guardar no campo "criadoPor"(acabei de inventar esse campo.rsrs)

    duvida: no formulário entrada qual o intuito do campo NomeDoFuncionario? é para guardar o nome da pessoa que esta criando a despesa? ou serve pra outra coisa? se for para
    criar a despesa entao é esse campo que vc quer ter o controle né.

    o que vc quer fazer? dar mos um jeito de amarrar a despesa com o login ou com o funcionario? acho q o certo e achar mos um jeito de
    amarrar o login com o funcionario, o que vc acha?

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 15:21

    Ronaldo

    Vamos lá
    Sua experiência, com certeza irá me ajudar muito.

    Vou tentar te explicar como é que a empresa quer que funcione a coisa, dai acho que vai ficar mais fácil para você.

    Esse projeto visa controlar as despesas de viagens e o uso de veículos da empresa.

    Só que o "Gestor" no caso é que irá logar no sistema como "Administrador", pediu o seguinte:

    Vamos supor que o Ronaldo tenha no sistema 3 relatórios de despesas.
    Eu Carlos Tenha 5 por exemplo, inclusive podendo ser um deles do mesmo projeto que o do Ronaldo.

    Uma vez que eu logue no sistema e chame os relatórios de despesas, eu deverei ver somente os meus relatórios de despesas e de uso do veículo e não consiga ver os do Ronaldo rsrsrs

    Como são vários funcionários, pensei na idéia do número de formulário/Relatório ser automático, fazendo uma composição das iniciais do nome mais "-0001", "-0002", etc. Isso para que não haja vários relatórios com o número 0001, 0002, 0003, etc

    Como será o Gestor que irá controlar o gasto com despesa e se o funcionário está credor ou devedor, uma vez logado, ele "Administrador", ele sim consiga ver os formulários/Relatórios de todos os funcionários.

    Ainda tem a parte do uso de veículos, que falaremos depois, melhor irmos como jack o estripador, ou seja por partes. Rsrsrs.

    Então com sua vasta experiencia, que caminho achas que temos que seguir?

    Grato

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 15:24

    Ronaldo.

    Em tempo.

    Ainda tem o formulário de solicitação de numerário que deverá funcionar da mesma maneira
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Sex 28 Jul 2017, 17:00

    to arrumando as coisas aqui, ate de tarde termino, e coisa pra caramba q to modificando, mas to anotando td pra vc poder fazer tb, ou simplesmente importe o novo bd
    mas essa parte agente ve depois. rsrs

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 17:05

    Ronaldo.

    Você não sabe a força que tá me dando.

    Fico muito grato.

    Valeu mesmo.

    Já ví que tenho muito ainda que aprender sobre vba, estou gatinhando ainda. rsrsrs
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Sex 28 Jul 2017, 20:15

    vamos la,
    deu um trabalho do caramba, mas consegui. rsrs

    fiz um passo a passo de td que fiz para atender aos requisitos que vc mencionou.
    e coisa pra caramba que tem que fazer, eu sugiro que vc tente pelo passo a passo pra vc aprender
    e conseguir usar a mesma ideia no resto do seu projeto, ja que vc mencionou que tem a questão do uso de veiculos.
    mas se quiser o jeito facil de fazer funcionar e so importar os objetos que alterei pro seu banco, segue lista:
    tabelas:
    tabela2
    tabela3
    usuario

    formularios:
    CadastroFuncionario
    Entrada
    FLogin

    Modulos:
    Captura Grupo e Usuario
    ControleAcesso
    NmAutor
    Anexos
    PROJETO_ADV.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Mb) Baixado 5 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 20:26

    Ronaldo

    Desde já agradeço imensamente, sua ajuda.
    Foi de extrema importância, visto principalmente que estou a caminhar ainda no que diz respeito a vba.

    Com relação aos veículos, o que preciso, acho que agora está mais simples.

    É somente, quando um funcionário selecionar um dos veículos para uso e com isso preencher a data de saída, se um outro funcionário selecionar o mesmo veículo, seja exibida uma mensagem do tipo. " Veículo já está em uso, verifique se foi devolvido e solicite a baixa no sistema", no caso a baixa seria com o preenchimento da data de retorno.

    Com relação ao arquivo que você postou, vou tentar fazer no meu, se não conseguir vou importar os objetos mencionados por você e te darei um retorno.

    Quando o projeto estiver pronto postarei aqui para estudo ou adaptações para uso, dando é claro os devidos créditos para você

    Sem querer abusar de sua ajuda, se puder me orientar com relação aos veículos, fico grato

    Abs
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Sex 28 Jul 2017, 20:45

    Sua logica esta no caminho certo.

    no codigo o segredo e usar o evento apos atualizar nos campos envolvidos. exemplo

    vamos supor que o veiculo esta pronto para ser locado, mais abaixo mostra a ideia de como fazer o campo onde escolhe o veiculo.

    no campo onde escolhe o veiculo insira o seguinte codigo no evento "apos atualizar"

    me.dataLocacao = date

    para devolver eu usaria um formulario proprio para esse fim.
    a fonte de dados dele seria todos os veiculos que nao foram devolvidos, ou seja, data retorno em branco com a datadeLocacao preenchida.
    ficaria mais ou menos assim a fonte de dados do formulario:

    select veiculo,dataRetorno,dataLocacao from locacaoVeiculo where dataRetorno is null and dataLocacao not is null

    e nesse mesmo formulario criaria um botao para dar baixa. ai no evento ao clicar do botao faria assim:
    me.dataRetorno = date com isso iria poupar o usuario de ficar digitando a data

    agora no formulario para a locacao eu faria um combobox chamada veiculos disponiveis
    e na origem da linha usaria uma consulta para trazer os veiculos cujo retorno esteja preenchido,
    ou os veiculos que nao fora locados, ou seja, veiculos que nao possuem data de locacao e data de retorno
    ficando mais ou menos assim:

    select veiculo from locacaoVeiculo where (dataRetorno not is null and dataLocacao not is null) or (dataLocacao is null)


    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 20:57

    Ronaldo.

    Uma dúvida!!!
    No formulário cadastro de usuário, agora tem um comando 12, para que serve e em que situação ele deve ser usado?


    Vou tentar fazer o que me sugeriu com relação aos veículos

    Grato
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Sex 28 Jul 2017, 21:03

    era so um botao de teste que criei, serve pra nada, so apagar, eu esqueci ele ai.rsrsrs

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sex 28 Jul 2017, 21:19

    Valeu


    Muito obrigado, por enquanto.

    Estou fazendo os testes, e vendo a questão dos veículos.
    Assim que concluído te dou um retorno.

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Sab 29 Jul 2017, 20:48

    Ronaldojr Boa tarde.

    Identifiquei dois problemas no sistema após efetuar os testes.
    É não estou conseguindo identificar o erro.

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 12:26

    Bom dia Ronaldojr1

    Mestre, como disse na mensagem anterior identifiquei dois problemas durante os testes.

    1º Ao cadastrar os usuários, como tenho, por exemplo, dois usuários cujo nome começa com Andre, na hora de logar, quando abrimos a lista de usuário no formulário login, aparecem os dois, porém não dá para saber quem é quem.

    2º quando abro o relatório de despesa, embora na consulta o único critério que existe é; "Digite o número do relatório", ele pergunta nome do funcionário, local, etc.

    Aproveitando estou postando o BD, para que, se possível dê uma olhada, pois fiz o mesmo esquema que você fez no formulário entrada, no formulário TabelaSolicitaçãoDeNumerário, porém, ele preenche o nome do funcionário, mas o número do relatório ele está repetindo, ex. se eu fizer duas solicitação de numerário, na primeira ele coloca o número CPR-5 e na segunda ele também coloca CRP-5.
    Outra questão é que tem colo ele mostrar o número do relatório ainda com as informações na tela, pois ele só coloca o número depois que passamos para um novo registro.
    Peço a gentileza a você que faça o teste e me oriente sobre o erro.

    Desde já, fico muito grato
    Anexos
    PROJETO_ADV -Teste_3107.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Mb) Baixado 2 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 12:36

    Ronaldojr.

    Em tempo

    No relatório de solicitação de numerário, também está acontecendo o mesmo que no de despesa, ou seja, o único critério é "digite o número do relatório", mas ele pergunta, nome do funcionário, projeto, etc.


    Grato
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 13:47

    vou dar uma olhada, logo retorno com uma resposta, mas no problema 1, vc pode solucionar inserindo o sobrenome no login da pessoa, exemplo, ao inves de ficar so andre, fique andre cameran, alias da ate pra deixar automatico essa questao caso for do seu interesse.


    Última edição por ronaldojr1 em Seg 31 Jul 2017, 13:56, editado 1 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 13:55

    Valeu.

    Obrigado
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 14:20

    dei uma olhada aqui, para o problema de so mostrar o numRelatorio apos mudar de registro vc pode resolver de duas maneiras.

    1 - usar o comando para salvar o registro a partir de um botao

    2 - usar o comando para salvar apos algum campo do seu formulario for atualizado, por exemplo caixa de combinação onde o usuario escolhe o projeto.

    segue comando para salvar

    DoCmd.RunCommand acCmdSave

    agora o que vai complicar um pouco dependendo da sua resposta e a solicitação de numerario.

    vc quer que siga a mesma ideia da entrada, ir na sequencia as iniciais + um numero sequencial(RXSJ-1;RXSJ-2;RXSJ-3;etc...)?
    caso sim, essa numeração deve seguir sua propria ordem baseada apenas na tabela "TabelaSolicitacaoDeNumerario" ou deve ser baseada na tabela "tabela2"(fonte de registro do form "entrada")?

    só vai uma dica, mas isso pode ser resolvido facilmente com relacionamentos de tabelas, ou seja, um funcionario pode ter 0 ou muitas solicitacoes de numerario.
    essa seria um tipo relação 1 para muitos ai com isso vc nao iria se preocupar com numerario de relatorio pq o numero seria automatico graças a um campo autonumeracao
    e este mesmo campo seria nossa chave primaria.
    antes que eu esqueça mesmo que vc nao use relacionamento no seu projeto, eu sugiro que vc coloque um campo autonumeração em todas as suas tabelas e este campo seja
    chave primaria, isso ira te poupar muita dor de cabeça no futuro.
    ai conforme vc for ficando ninja no access vc ira desfrutar de todas as vantagens de um simples campo de chave primaria.

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 14:28

    Ronaldojr.

    Acho que podemos seguir a mesma linha do formulário de entrada, ou seja iniciais mais 1,2,3 etc
    Quanto ao botão salvar, vou colocar, mas e quanto a questão da numeração não estar mudando no formulário de solicitação de numerário?
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 14:58

    entao, nao esta mudando pq ele esta se baseando na tabela "tabela2", no meu ver a numeração dever ser baseada nele mesmo "tabelaSolicitacaoNumerario"
    para fazer isso teriamos que duplicar a funcao e adaptar para esta tabela,
    logo o farei e retorno

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 15:09

    Mas se você olhar no módulo ao carregar, verá que está assim
    strConsultaFonteDados = "select * from tabelaSolicitacaoDeNumerario"


    Por favor dê uma olhada também na questão do formulário de login, onde temos dois usuários cujo nome começa com Andre, e quando abrimos o formulário Login não sabemos quem é quem.


    Muito obrigado
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 15:21

    vamos la, as alterações sao bem poucas

    substitua a funcao getNumeroAutor por esta

    Código:
    Function getNumeroAutor(parteNome As String, nmTabelaOrigem As String)
    Dim strSQL As String
    Dim bc As Database
    Dim rs As Recordset
    Dim numeroMaior As Integer
    Dim numeroAtual As Integer
    Dim vetor As Variant

        strSQL = "SELECT numRelatorio From " & nmTabelaOrigem & " where numRelatorio like '" & parteNome & "*'"
        Set bc = CurrentDb
        Set rs = bc.OpenRecordset(strSQL) 'abre a tabela filtrando as iniciais do nomeSobrenome em nmAutor
        numeroMaior = 0
        If rs.RecordCount > 0 Then
            rs.MoveFirst
            Do While Not rs.EOF
               vetor = Split(rs!NumRelatorio, "-")
               numeroAtual = vetor(1)
               numeroMaior = IIf(numeroAtual > numeroMaior, numeroAtual, numeroMaior)
               rs.MoveNext
            Loop
        Else
            numeroMaior = 0
        End If
    Set bc = Nothing
    Set rs = Nothing

    getNumeroAutor = numeroMaior + 1
    End Function

    e onde vc captura o numero do relatorio use a nova funcao assim:.
    Código:

    'no form TabelaSolicitacaoDeNumerario
    Me.NumRelatorio = IIf(IsNull(Me.NumRelatorio) Or Len(Me.NumRelatorio) = 0, getNmAutor(Me.NomeDoFuncionario) & "-" & getNumeroAutor(getNmAutor(Me.NomeDoFuncionario), "TabelaSolicitacaoDeNumerario"), Me.NumRelatorio)

    'no form Entrada
    Me.NumRelatorio = IIf(IsNull(Me.NumRelatorio) Or Len(Me.NumRelatorio) = 0, getNmAutor(Me.NomeDoFuncionario) & "-" & getNumeroAutor(getNmAutor(Me.NomeDoFuncionario), "Tabela2"), Me.NumRelatorio)

    referente ao nome andre o mais facil seria na hora de cadastrar o user dele coloque o sobrenome dele no campo Login do form Flogin

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 15:30

    A função Getnumeroautor, já troquei

    Quanto a função do número de relatório, devo colocar na propriedade do campo NumeroDoRelatório antes de atualizar?
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 16:01

    nao, eu inseri por exemplo no evento apos atualizar do campo onde o user escolhe o projeto(combobox)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 17:13

    Então fiz as atualizações e ocasionou o seguinte erro:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    'depois de preenchido ninguem vai poder alterar as propriedades ligadas ao criador, exemplo nomeFuncionario, cdFuncionario,etc...
    Me.NomeDoFuncionario = IIf(IsNull(Me.NomeDoFuncionario) Or Len(Me.NomeDoFuncionario) = 0, getNmFuncionario(loginU.cdFuncionario), Me.NomeDoFuncionario)
    Me.cdFuncionario = IIf(IsNull(Me.cdFuncionario) Or Len(Me.cdFuncionario) = 0, loginU.cdFuncionario, Me.cdFuncionario)
    Me.nmGrupoFuncionario = IIf(IsNull(Me.nmGrupoFuncionario) Or Len(Me.nmGrupoFuncionario) = 0, loginU.grupo, Me.nmGrupoFuncionario)
    Me.NumRelatorio = IIf(IsNull(Me.NumRelatorio) Or Len(Me.NumRelatorio) = 0, getNmAutor(Me.NomeDoFuncionario) & "-" & getNumeroAutor(getNmAutor(Me.NomeDoFuncionario)), Me.NumRelatorio)
    End Sub


    Me.NumRelatorio)
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 18:21

    a linha me.numRelatorio... ta errada, escreva exatamente assim:
    Me.NumRelatorio = IIf(IsNull(Me.NumRelatorio) Or Len(Me.NumRelatorio) = 0, getNmAutor(Me.NomeDoFuncionario) & "-" & getNumeroAutor(getNmAutor(Me.NomeDoFuncionario), "TabelaSolicitacaoDeNumerario"), Me.NumRelatorio) 'lembrando para se atendar no segundo parametro da função getNumeroAutor, ja q é nela que dizemos ao codigo em qual
    tabela sera feito o incremento do numero do relatorio.


    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Seg 31 Jul 2017, 18:52

    Troquei a linha.

    Mas continua a dar erro

    "A macro ou função definida como a propriedade BeforeUpdate ou ValidationRule para este campo está evitando que o microsoftaccess salve os dados co campo".

    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Seg 31 Jul 2017, 22:03

    verifica se vc nao esta colocando no evento antes de atualizar(beforeUpdate) de algum campo, o correto a apos atualizar (AfterUpdate).
    o unico lugar que pode estar beforeUpdate e nas propriedades do form, ou seja,

    private Form_BeforeUpdate(Cancel as integer)... e nao private campoX_BeforeUpdate(Cancel as Integer)...

    aperte o depurar na hora do erro e veja em qual linha esta mostrando o erro,
    segue em anexo o ultimo bd que vc mandou com as alterações que fiz para funcionar as numerações de relatorios.
    Anexos
    PROJETO_ADV -Teste_3107.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Mb) Baixado 3 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 12:23

    Ronaldojr

    Bom dia.

    Ficou show. Quem sabe, sabe e faz ao vivo, rsrsrs

    Vou comparar o que você fez, com o meu para ver onde errei.
    Sei que estou te ocupando bastante, mas é que realmente sou primário no que diz respeito a vba.

    É normal quando peço para abrir por exemplo o relatório de despesas, ele pedir número, solicitante, local, se na consulta o único parâmetro que tem é [Digite o número do relatório] ?
    E com relação ao problema que identifiquei no formulário de login, que é o de se tivermos, por exemplo, dois usuários cadastrados, o Andre Marques e o Andre Barbosa, ao abrir o formulário de login, ele mostra "Andre" e "Andre", ai não dá para saber quem é quem. Qual o caminho para a solução desse impasse?

    Desde já fico mais uma vez muito grato
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 13:45

    vamos la, referente ao relatorio nao é normal ele pedir dados que vc nao configurou como criterio, tem q rever a base de dados do relatorio,
    qual relatorio que é para eu dar uma olhada? e referente ao usuario duplicado na tela de login tente fazer assim:

    1 - Propriedades da combobox cbxLogin vá na guia dados e na origem da linha altere para esta consulta
    Código:
    SELECT Usuario.login, Usuario.grupo, Usuario.cdLogin, Usuario.cdFuncionario, Tbl_Funcionarios.Funcionario FROM Usuario INNER JOIN Tbl_Funcionarios ON Usuario.cdFuncionario = Tbl_Funcionarios.CodIdFunc ORDER BY Tbl_Funcionarios.Funcionario;

    2 - ainda na propriedades da combobox cbxLogin va na guia formato e altere as propriedades:
    Número de Colunas = 5
    Largura das Colunas = 0cm;0cm;0cm;0cm;5cm

    com isso na tela de login ira ser mostrado o nome completo do funcionario q esta associado ao login.

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 13:51

    Maravilha

    Com relação aos relatórios, está acontecendo no: consulta relatorio de despesa_teste e também no Solicitação de numerário.

    Grato

    Obs. No formulário Login, já fiz as alterações e está funcionando perfeitamente, problema resolvido, um a menos. rsrsrs
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 14:03

    No formulario solicitacao de numerario o campo "Solicitante" nao existe na consulta(fonte de dados)
    o que deve ser mostrado nesse campo solicitante?
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 14:13

    A principio removi o campo solicitante, depois vc reinsere ele denovo com o valor correto,
    ai para seu relatorio funcionar primeiro altere a consulta "Solicitacao de Numerario"

    no penultimo campo vai estar o campo extenso, substitua por essa instrução:
    ValorExtenso: Extenso95([TabelaSolicitacaoDeNumerario].[VALOR])

    depois vai nas propriedades do seu formulario e no campo extenso vai estar com a fonte de dados assim: =extenso95([valor]), pois bem,
    substitua apenas para "ValorExtenso" (esse campo foi criado na consulta usando a função extenso95 diretamente na declaração de campos, legal né eu tb uso essa função. Parabens aos criadores dela)

    Para o relatorio de despesa vou deixar as dicas de como construir pq do jeito que esta nao vai funcionar

    a fonte de dados dele deve ser a "tabela2" ou uma consulta que a origem seja da "tabela2" e na parte detalhes vc deve fazer um subRelatorio usando a "tabela3" ou uma consulta que tenha
    a "tabela3" como origem dos dados. seus campos coincidentes deve ser o numRelatorio

    boa sorte ai, pq esses tipos de relatorios é trabalhoso para configurar, mas com paciencia chega no resultado final rsrs



    Última edição por ronaldojr1 em Ter 01 Ago 2017, 14:28, editado 1 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 14:16

    Ok.

    Farei as alterações e darei retorno
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 14:28

    alterei minha resposta mais acima, da uma lida la. vlw

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 14:35

    Fiz as alterações e já coloquei no lugar do solicitante o nome do funcionário, está funcionando, à não ser pelo fato de agora ele pedir o número do formulário e valorExtenso.


    Desconsidere o acima. Já está funcionando perfeitamente

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 15:00

    Mestre.

    Acho que para finalizar, só está faltando a questão dos veículos.
    Já alterei o nome dos campos e tenho o formulário de solicitação de veiculo e entrega de veículo separados.
    Agora estou brigando para colocar suas idéias neles

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 18:56

    É mestre.

    Está difícil chegar em um acordo com relação aos veículos

    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 19:31

    blz, se tiver duvidas pode perguntar

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Ter 01 Ago 2017, 21:16

    Mestre Ronaldo.

    Por favor veja no arquivo em anexo que a parte de veículo, está funcionando parcialmente.
    Também está no esquema de o funcionário ver somente os veiculos locados por ele, e a data de locação esta funcionando conforme sua orientação, e no formulario FDevolucaoVeiculo, está calculando o KM Percorrido
    Porem não estou conseguindo fazer com que no formulario FDevolucaoVeiculo ele me mostre somente os veiculos que não foram dado baixa.
    Também no Formulário FSolicitacaoVeiculo, mesmo com um veiculo locado ele continua mostrando todos.

    Objetos envolvidos

    FSolicitacaoVeiculo
    FDevolucaoVeiculo
    TblUsoVeiculo
    Anexos
    PROJETO_ADV - 01082017_Atual.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1 Mb) Baixado 5 vez(es)
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Ter 01 Ago 2017, 22:09

    blz amanha cedo eu olho.
    achei da hora que vc ja conseguiu fazer td isso, logo vc fica bom no vba

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Qua 02 Ago 2017, 12:17

    Ronaldojr
    Bom dia

    Valeu
    Obrigado.

    Fico no aguardo de seu retorno
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Qua 02 Ago 2017, 21:54

    maluco, essa locacao de veiculo deu trabalho, aprendi a trabalhar com um evento do formulario que eu nunca parei pra ver pra que servia(em sujo).rsrs graças a sua necessidade vou melhorar os comportamentos e validacao dos meus formularios.

    segue em anexo o bd atualizado e abaixo o nome dos objetos alterados e criados:

    objetos alterados

    tabelas:
    TblUsoVeiculo
    veiculos

    forms:
    FDevolucaoVeiculo
    FSolicitacaoVeiculo
    FHistoricoLocacaoVeiculo

    modulo:
    ControleAcesso

    so algumas observações:
    1 - percebi que tinhas alguns campos de tabela que vc criou com o sinal ":" não nomeie assim pq o access pode entender como comando
    2 - ao criar relacionamento sempre crie com campos de tipos iguais, no seu caso o veiculos e tblveiculousado estava assim: de um lado texto e outro numero.
    3 - na hora de fazer o relacionamento deixe o campo que pertence a outra tabela com o mesmo nome para evitar confusao. no seu caso estava assim: cod em uma e placa na outra
    4 - evite renomear tabelas no plural, nao da erro nenhum, mas na hora de programar as vezes confunde pq vc pensa "sera que a tabela tal ta no plural?" ai com isso vc para o codigo para verificar

    sugiro vc a dar uma estudada em relacionamentos, esses fundamentos sera util em qualquer linguagem de banco de dados e tb sera util se um dia
    vc quiser aprender programação orientadas a objeto(POO) pq vc ira entender o conceito mais facilmente.
    Anexos
    PROJETO_ADV - 01082017 - Atualizado.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (1.3 Mb) Baixado 6 vez(es)

    Carlao2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 101
    Registrado : 19/10/2016

    Re: [Resolvido]duvida com vba

    Mensagem  Carlao2 em Qui 03 Ago 2017, 12:14

    Bom dia Ronaldojr

    Antes de mais nada, mais uma vez muito obrigado pela força.
    Com relação as suas sugestões, vou fazer delas um hábito


    Estou fazendo os testes e surgiu um erro:

    No FSolicitacaoVeiculo, ao clicar no botão locar veiculo, ele acusa um erro de operação faltando na expressão de consulta 'cdVeiculo='. e depurando ele pinta de amarelo a linha

    DoCmd.RunSQL "UPDATE Veiculos Set Locado = -1 WHERE cdVeiculo = " & Me.cdVeiculo



    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

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

    Re: [Resolvido]duvida com vba

    Mensagem  ronaldojr1 em Qui 03 Ago 2017, 13:16

    exclua as tabelas veiculos e tblusoveiculos e importe as minhas, eu fiz algumas alterações nessas tabelas.
    esse erro provavelmente deve ser pq ele nao esta achando o campo locado ou o campo cdVeiculos da tabela veiculos.

      Data/hora atual: Seg 25 Set 2017, 10:40