Categoria: Dicas

Dias e macetes de Access e VBA

Resolvendo problemas com datas no SQL Server

set 26, 2020 by admin

Um dos grandes problemas que surgem quando migramos uma base de dados Access para SQL Server é relacionado às datas. Isto por que o Access gerencia as datas de uma forma diferente do SQL Server, mesmo sendo ambos os softwares do mesmo fabricante, a Microsoft.

O Access, com o motor Jet/AceDAO, geralmente utiliza como referência de formato de data a máquina onde está instalado – em máquinas com Windows em inglês, por exemplo, as datas são formatadas como mês/dia/ano. Isto costuma gerar muita confusão, principalmente em ambientes onde o Windows está em português e o Office em inglês ou vice-versa. Já o SQL Server trata, por definição, as datas como ano/mês/dia.

Com isto, há o risco de as datas serem interpretadas erroneamente, por exemplo 03/02 (fevereiro) ser interpretado como março, ou vice-versa. Para fins de busca, é um elemento muito complicador, pois pode gerar um indicador errado e tornar o sistema não confiável. E isto, por consequência, pode impactar na relação entre o cliente e o desenvolvedor.

Ao longo dos anos enfrentamos este problema em diversas vezes, e por isso adotamos uma solução que compartilho neste artigo. Adotamos uma padronização nas datas, formatando todas como ano/mês/dia, sendo o ano com 4 dígitos e ps demais com 2. Ao ler a informação no banco de dados, adotamos a formatação visual de acordo com o idioma do sistema, e ao registrar as informações, revertemos a formatação. À primeira vista isto pode soar confuso, mas é uma solução viável e que resolve, em definitivo, o problema com a exibição e tratamento das datas.

Dou um exemplo: imagine uma tela onde você tenha um filtro de período, o usuário digita 01/02/2011 (1º de fevereiro de 2011) como início e 12/02/2011 como término. Ao solicitar a listagem (com base nos filtros), fazemos a conversão das datas para, respectivamente, 2011-02-01 e 2011-02-12 e enviamos o comando SQL para o servidor processar a informação. Ao retornar a informação na lista, revertemos o formato e exibimos 01/02/2011 e 12/02/2011. Com isso, não há como ocorrer falha na interpretação das datas, pois o formato informado é o padrão adotado pelo SQL Server.

Para uma maior eficiência na codificação, você pode transformar este processo em uma função independente, recebendo uma data e transformando-a em texto para o SQL.

Public Sub FormatarData(dtReferencia as Date) as String
    FormatarData = "'" & Format(dtReferencia,"yyyy-mm-dd") & "'"
End Sub

Resolvendo problemas de resolução nos formulários

set 26, 2020 by admin

A partir da versão 2007, a Microsoft disponibilizou um comando muito útil e que nos ajudou em nosso desenvolvimento: o comando “Ancoragem”. Com esse recurso, resolvemos o problema com as diferentes resoluções.

Um dos problemas mais comuns quando desenhamos as telas dos sistemas em Access é dimensionar os campos e controles da tela de forma que fiquem visíveis em todos os tipos de monitores.

Na maioria das vezes, as telas são desenvolvidas tendo como base uma única resolução (geralmente 1024×768 pixels). A vantagem é que temos aí uma referência para o layout que serve para todas as telas da aplicação. O problema é que em resoluções menores as telas acabam ficando distorcidas ou alguns objetos acabam ficando ocultos. A saber, por padrão, todos os controles e objetos que são colocados em um formulário (bem como o próprio) é alinhado à esquerda e ao topo da tela. Isto significa que se uma tela preenche completamente uma resolução de 800×600 pixels, em um monitor com resolução maior o Access exibe a tela com um espaço vazio nas extremidades inferior e direita.

Até a versão 2003 este era um grande desafio para nós. Para contornar, desenvolvemos uma série de funções que desenhavam os controles a partir da resolução do monitor utilizado. Apesar de atender à necessidade, este redimensionamento acabava impactando na performance da aplicação, e em alguns casos havia travamento.

Porém, a partir da versão 2007, a Microsoft disponibilizou um comando muito útil e que nos ajudou em nosso desenvolvimento: o comando “Ancoragem”.

Ancoragem? 

Ancoragem (Access 2013)

Este comando permite criar um efeito “responsivo” em um controle no formulário. Com isso, é possível desenvolver a tela sem se preocupar com a resolução do monitor do cliente.

Tela desenvolvida sem Ancoragem, no formato Access até 2003. Veja que os controles estão alinhados à esquerda e ao topo.
A mesma tela com Ancoragem. Veja que os controles estão bem distribuídos na tela.

Tipos de ancoragem

Existem 9 tipos de ancoragem:

  • Superior esquerdo: alinha o controle à esquerda e ao topo da tela (esta é a opção padrão de todos os objetos do Access).
  • Alongar para cima: “estica” o controle na horizontal, alinhado ao topo da tela.
  • Superior direito: alinha o controle à direita e ao topo da tela
  • Alongar para baixo: “estica” o controle na vertical, alinhado à esquerda
  • Alongar para baixo de um lado a outro: “estica” o controle ocupando as laterais da tela
  • Alongar para baixo e para a direita: “estica” o controle tanto na vertical quando na horizontal, ocupando o espaço disponível
  • Inferior esquerdo: alinha o controle à esquerda e no rodapé da tela
  • Alongar para baixo: “estica” o controle na horizontal, alinhado ao rodapé da tela
  • Inferior direito: alinha o controle à direita e ao rodapé da tela

Abaixo, um exemplo de como podemos aplicar a ancoragem em nossos formulários.

Exemplo de tela em tamanho normal – a ancoragem não é percebida
A mesma tela maximizada – veja que a ancoragem ainda não está ativada
Tela redimensionada e ancoragem ativada em todos os controles, cada um com seu tipo

A ancoragem é um recurso muito útil, porém deve ser usado com atenção, pois os controles podem “atropelar” uns aos outros, dependendo de como for configurado.

A tela acima com erro – veja que um campo está “atropelando” o outro.

Conclusão

A ancoragem, se bem utilizada, pode ajudar muito no desenvolvimento das aplicações. Este recurso irá dar um toque “moderno” nas suas aplicações e com isso se tornar um diferencial em seus projetos.

A dica aqui é criar um esboço da tela e definir antes quais campos serão “esticados” e como isto será configurado. Feito isso, é só criar seus formulários.

Bom desenvolvimento!