MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

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

    Compartilhe

    Chamon Consultoria
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  Chamon Consultoria em Seg 27 Jun - 0: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: Qua 7 Dez - 14:12