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]Selecionar registro máximo em campo texto concatenado com "/"

    avatar
    Convidado
    Convidado


    [Resolvido]Selecionar registro máximo em campo texto concatenado com "/" Empty Selecionar registro máximo em campo texto concatenado com "/"

    Mensagem  Convidado 23/11/2012, 13:14

    Amigos em uma tabela em campo texto:


    CpNumMat

    ID 01 - 0002/2013
    ID 02 - 0003/2012
    ID 03 - 0004/2012
    ID 04 - 0001/2013



    Observem que o registro de numero 03 é menor que o registro de numero 1. se utilizo em uma consulta agrupada ela me retorna o reg. 03

    Necessito uma consulta que me retorne o maior valor do primeiro numero + o maior ano

    Ex: ID 01 - 0002/2013



    Grato.
    avatar
    Convidado
    Convidado


    [Resolvido]Selecionar registro máximo em campo texto concatenado com "/" Empty Re: [Resolvido]Selecionar registro máximo em campo texto concatenado com "/"

    Mensagem  Convidado 23/11/2012, 13:30

    Até o momento consegui utilizando uma instrução format nos critérios:

    SELECT Right([cpNumMat],4) AS Ano, Max(tblAlunos.CpNumMat) AS MáxDeCpNumMat
    FROM tblAlunos
    GROUP BY Right([cpNumMat],4)
    HAVING (((Right([cpNumMat],4)) Like Format(Now(),'yyyy')));


    No Entanto se tiverem uma solução sem ser necessário filtrar pelo ano corrente, fico grato

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Selecionar registro máximo em campo texto concatenado com "/" Empty Re: [Resolvido]Selecionar registro máximo em campo texto concatenado com "/"

    Mensagem  Convidado 23/11/2012, 15:01

    Bem amigos.... A cnsulta que fiz acima resolveu o meu problema, tentarei explicar de maneira mais clara possível.

    É um form de cadastro de Alunos e o seu número de matrícula, este número de matricula serve para gerar também um número de contrato para impressão de contrato no word.

    Pois bem...

    Suponhamos que o Aluno ID=1 tenha a sua primeira matricula de numero 0007/2012
    mas que outro aluno ja tenha sido cadastrados com números 0006/2013, se eu utilizar o Recordset com a propriedade Move Last.. ele peegaria o ultimo registro o que as vezes daria erro, se por outro lado utilizasse a consulta com o Max somente m retornaria o numero 0007/2012

    Então eu preciso pegar o maior numero do ano da nova matricula que no caso é 2013, então apliquei uma combo do tipo lista de valores com alguns anos cadastrados, tomando cuidado para em uma clausula nao permitir selecionar ano inferior ao ano atual, apartir dai um botão onde se executo o codigo para caso for efetuar nova matricula para o Aluno ID = 1 este numero será substituido pelo proximo numero +1 da tabela cujo ano seja igual ao ano da matricula.


    Código:

    Private Sub btnNovaMat_Click()
    On Error GoTo trataerro
    Dim I As String
    Dim Msg As String
    Dim AnoMat As String

    StrAnoMat = Year(Date)
    If Me.cboAnoMat.Value < StrAnoMat Then MsgBox "Este ano não está mais disponível" _
                                            & vbNewLine & "para efetuar matrículas!", vbCritical, "INDISPONÍVEL": Exit Sub

    If Me.cboAnoMat = "" Or IsNull(Me.cboAnoMat) = True Then MsgBox "Selecione o Ano Letivo para a Matrícula", vbCritical, "ATENÇÃO": Me.cboAnoMat.SetFocus: Me.cboAnoMat.Dropdown: Exit Sub
    If Right(Me.txtNumMat, 4) <> Year(Date) Or IsNull(Me.txtNumMat) = True Or Me.txtNumMat = "" Then

    Call NumeraAnoNova ' Função para levar a variável a última numeração da tabela
    '=========================================================================
    If Format(Date, "yyyy") > Right(LastNum, 4) Then
        NumAtual = Format(1, "0000") & "/" & Year(Date)
    Else
        I = Left(LastNum, 4)
        I = CInt(I)
        NumAtual = Format(I + 1, "0000") & "/" & Year(Date)
        Me.txtNumMat = NumAtual
    End If
    Exit Sub
    Exit_TrataErro:
        DoCmd.Hourglass False
        DoCmd.Echo True
     Exit Sub

    trataerro:
    If err.Number = 0 Then
        Resume Next
    Else
     DoCmd.Hourglass False
     DoCmd.Echo True
     Msg = "Erro # " & Str(err.Number) & " gerado na " & err.Source _
     & vbNewLine & vbNewLine & "Descrição: " & err.description _
     & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
     MsgBox Msg, vbMsgBoxHelpButton + vbCritical, "Erro", err.Helpfile, err.HelpContext
     Resume Exit_TrataErro
    End If
    End If
    End Sub

    Sub NumeraAnoNova()
    On Error GoTo trataerro
    Dim db As DAO.Database
    Dim ws As DAO.Workspace
    Dim rs As DAO.Recordset

    Dim StrSQLNumero As String
    Dim DetIdent As String

    Set ws = DBEngine.Workspaces(0)
    Set db = CurrentDb
                    'StrSQLNumero = ("SELECT * FROM tblAlunos WHERE Right(CpNumMat,4) = " & Me.cboAnoMat.Value & ";")
                    StrSQLNumero = ("SELECT Right([cpNumMat],4) AS Ano, Max(tblAlunos.CpNumMat) AS MáxDeCpNumMat FROM tblAlunos" _
                                & " GROUP BY Right([cpNumMat],4)HAVING (((Right([cpNumMat],4)) Like Format(Now(),'yyyy')));")


                   
    Set rs = db.OpenRecordset(StrSQLNumero)
    MsgBox rs.RecordCount
    rs.MoveLast

    LastNum = rs!MáxDeCpNumMat

    If rs.NoMatch Then ' Se o código ainda não está cadastrado...
      Exit Sub
    End If

    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
    Exit Sub
    'No tratamento de erro se não encontra registro correspondente gera numero 0001/Ano
    trataerro:
    If err.Number = 3021 Then
        NumAtual = Format(1, "0000") & "/" & Year(Date)
        Me.txtNumMat = NumAtual
        Call btnSalvar_Click
    ElseIf err.Number = 94 Then
        LastNum = Nz(rs!CpNumMat, "0001") & "/" & Year(Date)
        If Me.txtNumMat = LastNum Then Exit Sub
        Me.txtNumMat = LastNum
    Else
        MsgBox Error, , "Erro nº" & err & " em Numera Ano"
    End If
    End Sub

    Cumprimentos.

    Conteúdo patrocinado


    [Resolvido]Selecionar registro máximo em campo texto concatenado com "/" Empty Re: [Resolvido]Selecionar registro máximo em campo texto concatenado com "/"

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 21:51