Livro muito interessante para quem está iniciando no acesso a banco de dados com o C# e que já possuem algum conhecimento em VB/VBA.
O conteúdo é bem objetivo, sem entrar em detalhes da estrutura do C# vai direto ao assunto com exemplos bem didáticos e de fácil entendimento.
O preço gira em torno de R$ 35,00 (bem acessível) e na minha opinião vale o investimento.
Editora O'Reilly/Novatec.
Autor: Michael Schmalz
ISBN: 978-85-7522-315-4
;-)
Eventualmente dicas sobre outros programas, Windows e hardware.
sexta-feira, 30 de agosto de 2013
Access: cuidados ao desabilitar avisos em macros e no VBA
As vezes quando damos manutenção em sistemas complexos e com sequências longas de comandos, é comum deixar passar um pequeno detalhe que pode ser crucial para localizar um possível erro aparentemente sem explicação.
Ao criarmos uma macro quase sempre iniciamos com o comando "Definir Avisos - Não" para que o Access não exiba mensagens de confirmação a cada consulta executada. O equivalente no VBA é o DoCmd.SetWarnings False.
O problema é que os comandos acima desabilitam também as mensagens de erro.
Imaginem uma tabela com um campo numérico onde a instrução é alterar o conteúdo para uma letra. Óbvio que será exibida uma mensagem de erro, mas veja que na sequência abaixo isso não ocorrerá pois os avisos foram desabilitados:
A dica portanto é, na hora de depurar a macro ou código VBA, executar consulta por consulta e acompanhar as mensagens de alerta do Access. Dá trabalho, demora, é necessário muita paciência e atenção.
Somente após ter certeza de que tudo está "ok", aí sim podemos desabilitar as mensagens seja por "Definir Avisos - Não" ou "DoCmd.SetWarnings False".
;-)
Ao criarmos uma macro quase sempre iniciamos com o comando "Definir Avisos - Não" para que o Access não exiba mensagens de confirmação a cada consulta executada. O equivalente no VBA é o DoCmd.SetWarnings False.
O problema é que os comandos acima desabilitam também as mensagens de erro.
Imaginem uma tabela com um campo numérico onde a instrução é alterar o conteúdo para uma letra. Óbvio que será exibida uma mensagem de erro, mas veja que na sequência abaixo isso não ocorrerá pois os avisos foram desabilitados:
Sub teste_aviso() DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE Tabela1 SET campo_numerico = 'A'" DoCmd.SetWarnings True MsgBox "Consulta executada" End Sub
A dica portanto é, na hora de depurar a macro ou código VBA, executar consulta por consulta e acompanhar as mensagens de alerta do Access. Dá trabalho, demora, é necessário muita paciência e atenção.
Somente após ter certeza de que tudo está "ok", aí sim podemos desabilitar as mensagens seja por "Definir Avisos - Não" ou "DoCmd.SetWarnings False".
;-)
quarta-feira, 21 de agosto de 2013
Como a tecnologia evolue
Curiosidades...
A primeira foto é de um HD de 4 Mb, um "monstro" para a época.
Mede pouco mais de um metro e meio de altura.
Na segunda foto, o meu HD portátil de 320Gb (que já é ultrapassado...).
Mede pouco mais de um metro e meio de altura.
Na segunda foto, o meu HD portátil de 320Gb (que já é ultrapassado...).
VBA - Função de arredondamento com incremento personalizado
Outro dia precisei de uma função para transformar 1,1 em 2 e assim por diante (arredondar para cima sempre que a decimal for maior que zero) e com a ajuda do grande mestre Gib@ que conseguiu garimpar no suporte da Microsoft, deixo aqui para futuras consultas, pois os materiais da Microsoft costumam mudar de lugar ou simplesmente sumir.
O link original: http://support.microsoft.com/kb/155696/pt-br
O exemplo a seguir cria um procedimento chamado RoundToNearest, que aceita três parâmetros: Parameter Value --------- --------------------------------------------------------- Amt The numeric value you want to round RoundAmt The increment to which Amt will be rounded Direction Constant indicating which direction to round (up or down) Por exemplo, RoundToNearest (3,33, 0,1, vb_roundup) retorna o valor 3.4. 1. Crie um módulo e digite as seguintes linhas na seção declarações: 2. Option Explicit 3. Public Const vb_roundup = 1 Public Const vb_rounddown = 0 Observação: Versões 1. x e 2.0, use a palavra "Global" em vez de "Público". 4. Crie o procedimento a seguir. Observação: No código de exemplo a seguir, um sublinhado (_) ao final de uma linha é usado como um caractere de continuação de linha. Remova o sublinhado do final da linha quando recriar esse código no Access Basic. 5. Function RoundToNearest (Amt As Double, RoundAmt As Variant, _ 6. Direction As Integer) As Double 7. On Error Resume Next 8. Dim Temp As Double 9. Temp = Amt / RoundAmt 10. If Int(Temp) = Temp Then 11. RoundToNearest = Amt 12. Else 13. If Direction = vb_rounddown Then 14. Temp = Int(Temp) 15. Else 16. Temp = Int(Temp) + 1 17. End If 18. RoundToNearest = Temp * RoundAmt 19. End If 20. End Function 21. Para testar essa função, digite cada uma das linhas a seguir na janela Depurar (ou janela Verificação imediata no 1. x e 2.0) e, em seguida, pressione ENTER. ? RoundToNearest (0.25, vb_roundup, 1.36) Observe que o procedimento retorna 1.5. ? RoundToNearest (1.36, 0.05, vb_rounddown) Observe que o procedimento retorna 1.35. ? RoundToNearest (1.36, 0.75, vb_roundup) Observe que o procedimento retorna 1.5, que é dois incrementos de 0,75. Observação: Para usar a função acima na propriedade OrigemDoControle de um controle em um formulário, você precisará substituir as constantes vb_roundup e vb_rounddown com seus valores de número inteiro.
Assinar:
Postagens (Atom)
Pesquisar este blog
Arquivo do blog
Quem sou eu
- Kazu
- Administrador de Empresas/Técnico em Processamento de Dados. Microsoft Office User Specialist - Excel Proficient. Pós-graduado em Business Intelligence.