Apagar um registo - VBA [Access]

Goldberg

Power Member
Boas.
Tenho a seguinte rotina para apagar um registo no botão eliminar:

Dim I As Integer

I = MsgBox("Tem a certeza que quer apagar?", vbYesNo, "Confirmação")
If I = vbNo Then
Exit Sub
Else
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
End If
Sendo o "DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70"
o código que vem predeninido quando se cria o botão eliminar

O problema é que quando vou apagar um resgisto, às vezes preciso de carregar no "sim" umas 5 vezes até apagar mesmo. às vezes apaga logo, outras vezes é preciso carregar mais vezes.
É estranho pois o código nunca muda.

Alguém tem alguma ideia?
 
São em vários formulários, por conseguinte, esse código estava num pequeno procedimento o qual ia chamando no momento em que fosse necessário.
Por exemplo, o Cliente 1 (cod_cli) da tabela Cliente
 
Faz um procedimento e utiliza algo assim:

Dim db As Database
Dim SQL As String
Set db = CurrentDb
SQL = "DELETE FROM myTable WHERE ID = myRecord"
db.Execute SQL, dbInconsistent
db.Close
Set db = Nothing
 
Tentei e funciona, contudo não tentei em todas as circunstâncias no que tentei no meu antigo código, porque assim que elimina coloca em todos os campos "#Eliminado", e não é isso que prentedo. Ainda tentei, por exemplo, me.cod_postal = "", mas não apagou.

Tentei este agora, e estava a funcionar bem até chamar o formulário através de um formulário "menu"

Dim I As String

Sql_Exp = "select * FROM Postal WHERE ([Postal.cod_postal] = " & Chr$(34) & Me.cod_postal & Chr$(34) & ");"
Set registo = CurrentDb.OpenRecordset(Sql_Exp)
I = MsgBox("Tem a certeza que quer apagar?", vbYesNo, "Confirmação")
If I = vbYes Then
registo.Delete
DoCmd.ShowAllRecords
Else
Exit Sub
End If
O tal menu que falei é um outro formulário, mas só contem uns meros botões com o código, por exemplo
"DoCmd.OpenForm "Postal"

Sempre que chamo o formulário através desse tal menu o código apagar a tende a deixar de funcionar :s
 
Última edição:
Tentei e funciona, contudo não tentei em todas as circunstâncias no que tentei no meu antigo código, porque assim que elimina coloca em todos os campos "#Eliminado", e não é isso que prentedo. Ainda tentei, por exemplo, me.cod_postal = "", mas não apagou.

Mas a unica coisa que tens de fazer a seguir é um requery ou refresh à lista, table, etc.
 
Ah bom, não me lembrei.
Deu este erro que não sei o que é "não é possível executar consulta selecção".

O Código:
Set db = CurrentDb
Sql_Exp = "select * FROM Postal WHERE ([Postal.cod_postal] = " & Chr$(34) & Me.cod_postal & Chr$(34) & ");"
I = MsgBox("Tem a certeza que quer apagar?", vbYesNo, "Confirmação")
If I = vbYes Then
db.Execute Sql_Exp, dbInconsistent
db.Close
Me.Refresh
Set db = Nothing
Else
Exit Sub
End If
 
Ah, sim sim. Erro meu.

Usei o me.refresh no código que coloquei há 2 posts atrás (sem contar com este).
Quando abro o formulário "Postal" e cliquo para apagar, apaga sem dar erro algum.
Quando abro o formulário Menu, e abro o formulário "Postal", através de um botão no formulário Menu, elimina 2 depois aparece #Eliminado em todos os campos do formulário (neste caso no cod_cli e localidade)
Acho que o problema está mesmo no menu, mas tenho o código do menu todo comentado, apenas o código para chamar os formulários ♣
 
>>Ah, sim sim. Erro meu.
>>Quando abro o formulário Menu, e abro o formulário "Postal", através de um botão no formulário Menu, elimina 2 depois aparece >>#Eliminado em todos os campos do formulário (neste caso no cod_cli e localidade)


Mostra lá isto ...
 
Mostro como assim?
Simplesmente quando cliquo no eliminar, elimina, mas aparece #Eliminado nas caixas de texto.

O código que está é:
Dim I As String

Sql_Exp = "select * FROM Postal WHERE ([Postal.cod_postal] = " & Chr$(34) & Me.cod_postal & Chr$(34) & ");"
Set registo = CurrentDb.OpenRecordset(Sql_Exp)
I = MsgBox("Tem a certeza que quer apagar?", vbYesNo, "Confirmação")
If I = vbYes Then
registo.Delete
Me.Refresh
DoCmd.ShowAllRecords
Set db = Nothing
Else
Exit Sub
End If

As variáveis globais são:

Global db As Database
Global registo As Recordset
Global Sql_Exp As String
 
Sim, parece funcionar tudo bem após o Me.Requery.
Algum coisa, volto.
Agradeco a ajuda jpaulino

Já agora, é possível esconder a Janela da BD por código?
Refiro-me àquela onde se podem ver os formulários, relatórios, tabelas...
Sei que tenho a opção Ferramentas > Arranque > Tirar o checked na "Mostrar Janela da BD", mas o que eu procuro mesmo era tirar por código.

Já não faz mal, consegui encontrar
 
Última edição pelo moderador:
Tudo é possível meu amigo ... (excepto os números para o euromilhões)

' Para esconder
DoCmd.SelectObject acTable, , True
DoCmd.RunCommand acCmdWindowHide

' Para voltar a mostrar
DoCmd.SelectObject acTable, , True
 
Back
Topo