Pergunte aqui
1

Macro para excluir um registro de um subformulário?

perguntadas 2015-04-16 19:39:37 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

Oi pessoal preciso de ajuda.

Tenho um form e no modo design acoplei um controle chamado "controle de Tabela" ( grid control ), que apresenta os registros de uma tabela ou consulta em um formato tabular dentro de um formulário.

Nele eu associei uma consulta sem vincular campos com o formulário principal.

Eu queria criar um botão excluir que apagasse o registro selecionado na grid, mas não sei como fazer

No "navegador de formulários" a grid fica dentro de um subformulário criado automaticamente quando se acopla o objeto gridcontrol esse subformulário chama-se Subform.

Não consigo fazer referência a esses controles, na documentação do access2base tá confuso referenciar a um controle de um subformulário, alguém pode me explicar detalhadamente?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

1

respondidas 2015-04-19 03:03:00 +0200

imagem do gravatar de Grafeno

Eu queria criar um botão excluir que apagasse o registro selecionado na grid, mas não sei como fazer

É possível criar este botão excluir sem usar macro. O controle botão de pressão vem com algumas ações disponíveis. Uma delas, inclusive, permite excluir o registro atual (selecionado) do form ou subform onde o controle se encontra.

Para funcionar corretamente, é preciso certificar-se no Navegador de Formulários que o botão "excluir" esteja dentro do subformulário desejado . Depois, clique com o botão direito nele. E na janela propriedades, use a barra de rolagem para chegar na propriedade Ação e escolha "Excluir registro".

Descrição da imagem

Não consigo fazer referência a esses controles, na documentação do access2base tá confuso referenciar a um controle de um subformulário, alguém pode me explicar detalhadamente?

Realmente é confuso, pois, pelo que entendi, o framework Access2Base não suporta a hierarquia de formulários do Base. Ao invés disso, trata os subformulários como controles comuns dentro de um formulário. Então, primeiro é preciso acessar o subform como um controle (método Controls) e depois invocar sua propriedade Form:

Sub ValorColunaSF
Dim oForm as Object, oSubForm As Object, oColuna As Object
Dim ValorCol As String


    'Form
    oForm = Forms( "Form1" )
    'SubForm
    oSubForm = oForm.Controls( "SubForm" ).Form
    'Coluna (campo) do Controle Tabela do SubForm
    oColuna = oSubForm.Controls( "SubForm_Grid" ).Controls( "Nome" )
    'Valor atual (selecionado) da coluna (campo)
    ValorCol = oColuna.Value

    Print oColuna.Name & ": " & ValorCol
End Sub

Atte,
Grafeno

editar assinalar como ofensivo Excluir Link mais
1

respondidas 2015-04-20 14:28:56 +0200

esta mensagem está marcada como wiki comunitário

Esta mensagem é um wiki. Qualquer pessoa com karma >75 é bem-vinda para a melhorar.

Oi Grafeno...

Muito obrigado pela dica, depois de muito penar também consegui um código que funciona, mas sua explicação detalhada vem muito a calhar e ajudará muitos outros, nem sabia desse campo "ação" de um botão e isso vai facilitar muito, a forma como vc dá prints na tela e organiza a resposta também é digna de elogios. Segue abaixo outra forma de se fazer um botão excluir:

    
Sub btn_excluir

Dim Form1, SubForm_1, oConsulta, cmb_codhw, cmb_softw, cons_subtab, txtM, txtS As Object, sSQL As String

Set Form1=Forms("frm_licenca")
Set SubForm_1 = Form1.Controls("Subform") ' Trata o subform como um controle
Set cons_subtab = SubForm_1.form.Controls("Controle_de_tabela_1") ' também pode usar essa sintase
Set txtM = cons_subtab.Controls("TextField1") ' campos (colunas) do grid
Set txtS = cons_subtab.Controls("TextField2") 'idem
Set cmb_codhw=Form1.Controls("txtMicro")
Set cmb_softw=Form1.Controls("txtSoftware")
oConsulta = ThisDatabaseDocument.DataSource.QueryDefinitions.getByName ("cons_subtab_licenca")

sSQL = ("DELETE FROM `c06`.`tab_licenca` WHERE `cod_hw` = '" & txtM.Value & "' AND `software` = '" & txtS.Value & "';") ' deleta da tabela o valor dos campos do registro selecionado e mais a frente atualiza o form

RunSQL(sSQL)

cmb_softw.Value=""

Form1.Requery

Muito obrigado Graffeno, pelo tempo dispendido em ajudar, vejo que é um dos que mais colaboram aqui.

Luiz Carlos

editar assinalar como ofensivo Excluir Link mais

Comentários

@LuizCarlos18RJ, é sempre um prazer ajudar. Obrigado pelo retorno (feedback).

imagem do gravatar de GrafenoGrafeno ( 2015-04-21 16:21:36 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-04-16 19:39:37 +0200

Lidas: 573 vezes

Última atualização: Apr 20 '15