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


    Cadastro de dados em Caixa de Combinação via VBA

    avatar
    Chamon Consultoria
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 266
    Registrado : 31/08/2012

    Cadastro de dados em Caixa de Combinação via VBA Empty Cadastro de dados em Caixa de Combinação via VBA

    Mensagem  Chamon Consultoria 27/6/2016, 00:42

    Boa noite!

    Bd em Access 2010.


    Estou tentando fazer uma adaptação em um formulário "Produtos" que eu não desenvolvi. Assim precisaria manter as configurações originais.
    No formulário "Produtos" possui o campo "txtMedida" que é uma caixa de combinação onde é selecionada a unidade de medida do produto. A seguir a linha da origem dessa caixa:
    SELECT tbl_Escolha.cvCodTip, tbl_Escolha.ccVarTip, tbl_Escolha.ccNomTip, tbl_Escolha.ccFiltro FROM tbl_Escolha WHERE (((tbl_Escolha.ccFiltro)="MEDIDA"));

    A tabela tbl_Escolha é composta pelos campos:
    cvCodTip: Número - Chave Primária
    ccVarTip: Texto
    ccNomTip: Texto
    ccNomTip2:texto
    ccNomTip3:texto
    ccNomTip4:texto
    ccFiltro: texto
    ccAtivo: Sim/Não


    Essa tabela tbl_Escolha também é usada para outras funções dentro do sistema. Mas ela filtra seus cadastros através do campo ccFiltro, que quando preenchido com a palavra "MEDIDA", seleciona os dados dessa linha para a caixa de combinação txtMedida no formulário Produtos.
    Detalhe: O campo ccVarTip da tbl_Escolha funciona como um contador personalizado crescente para cada tipo de Filtro. Exemplo:

    ccVarTip: 01 ccNomTip: MT ccFiltro: MEDIDA
    ccVarTip: 02 ccNomTip: PR ccFiltro: MEDIDA
    ccVarTip: 03 ccNomTip: KG ccFiltro: MEDIDA

    ccVarTip: 01 ccNomTip2:texto ccFiltro: OUTRACATEGORIA
    ccVarTip: 02 ccNomTip2:texto2 ccFiltro: OUTRACATEGORIA

    Quando muda-se o tipo do filtro, o campo "ccVarTip" reinicia a numeração. E assim por diante.

    A questão é que o Bd não possui um formulário para o cadastro dessas unidades de medida, apenas a tbl_Escolha com as particularidades citadas.
    O que eu consegui fazer foi criar um formulário chamado "Unidades".
    Quando a unidade não existir na caixa de combinação do formulário Produtos, um aviso é emitido e abre-se o formulário Unidades, que contém apenas o campo "txtUnidade".
    Tentei adaptar alguns códigos nesse formulário para que fosse adicionada a nova unidade de medida na tbl_Escolha, de forma que insira a palavra "MEDIDA" no campo ccFiltro e a numeração do campo ccVarTip desse sequencia. Porém quando clico no botão Salvar, nada acontece.

    Desde já agradeço pela ajuda!


    Private Sub Form_Load()
    txtCodigo = Forms!PRODUTOS.txtMedida
    End Sub

    Private Sub BotaoOk_Click()
    If DadosOk() Then
    Atualizar
    End If
    End Sub

    Private Sub BotaoSair_Click()
    DoCmd.Close acForm, Me.Form.Name
    Exit Sub
    End Sub

    Private Sub Atualizar()

    Dim rst As New ADODB.Recordset
    Dim conCars As ADODB.Connection
    Set conCars = Application.CurrentProject.Connection
    Dim ConsultaSQL As String
    If Me.ccFiltro = "MEDIDA" Then
    ConsultaSQL = "SELECT max(ccVarTip) As tot FROM TBL_Escolha where ccFiltro = 'MEDIDA'"
    Set rst = conCars.Execute(ConsultaSQL)
    Me.ccVarTip = rst!tot + 1
    End If

    End Sub


    Set db = CurrentDb()
    Set rs = db.OpenRecordset("TBL_Escolha")

    rs.AddNew

    rs("ccNomTip") = txtMedida
    rs("ccNomTip2") = ""
    rs("ccNomTip3") = ""
    rs("ccNomTip4") = ""
    rs("ccFiltro") = "MEDIDA"
    rs("ccAtivo") = True
    rs.Update

    Set rst = Nothing
    Set db = Nothing

    Forms!PRODUTOS.txtMedida.Column(3) = txtMedida
    DoCmd.Close acForm, Me.Form.Name
    Exit Sub
    End Sub

    Private Function DadosOk()
    Dim Retorno
    Dim strMensagem As String
    Retorno = True

    If IsNull(txtMedida) Then
    strMensagem = "A Unidade não foi informada!"
    txtMedida.SetFocus
    Retorno = False
    End If

    If Retorno = False Then
    Beep
    MsgBox strMensagem, vbExclamation, "Edição"
    End If
    DadosOk = Retorno
    End Function



      Data/hora atual: 19/3/2024, 07:30