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
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