DICAS PREFERIDAS
Backup e Recuperação de Banco de Dados Danificado *
Colocando o Relógio/Calendário num Controle *
Somando Valores de Campos de um Questionário *
Fazer Mensagem Piscar em Formulário *
Tornando Valores Negativos de Campos em Vermelho *
Personalizando uma Caixa De Texto do Tipo Sim/Não *
Mudando a Cor de Fundo de Controle *
Mudando o Título do Formulário para o Fornecedor que tem o Foco *
Função QBColor *
Função RGB *
Controlando Eventos *
Criar um Formulário e Botão de Comando Via Código e Dimensiona Controle para Mensagem Caber no Mesmo (Sizetofit) *
Ocultando Controles *
Exemplo da Função Timer *
Backup e Recuperação de Banco de Dados Danificado
Fazer backup, restore, recuperação e compactação de um Banco de Dados.
Criar um outro banco de dados apenas para isso (pois o sistema não pode estar aberto para ser reparado e muitas vezes realmente nem conseguimos abri-lo), com um único formulário com 3 botões: Backup, Restore e Reparar Sistema Danificado.
Digite no Evento Click do botão Backup:
Dim X, Y As Integer, AppName As String
AppName = "C:\autopsg\arj.exe a -vva a:autopsg *.mdb"
X = Shell(AppName, 1)
Digite no Evento Click do botão Restore:
Dim X As Integer, AppName As String
AppName = "c:\autopsg\Arj e -vva a:* c:\autopsg"
X = Shell(AppName, 1)
Aqui pode ser melhorado (a gosto), adicionando o parâmetro /y a linha do código do Restore ficando assim: AppName = "c:\autopsg\Arj e -vva a:* c:\autopsg /y"
Selecione o botão Reparar, abra a janela de Propriedades e em Evento, na frente de Ao Clicar digite "=Reparo()" (sem as aspas).
Crie também um módulo e digite o seguinte código para a função Reparo:
Function Reparo()
'Este exemplo tenta corrigir o banco de dados denominado autopsg.mdb. Você não pode ‘executar este procedimento a partir de um módulo de dentro do autopsg.mdb ou de outro
‘Banco de dados que queira reparar
Dim errLoop As Error
If MsgBox("Corrigir o Sistema Auto Peças São Gerardo?", _
vbYesNo) = vbYes Then
On Error GoTo Err_Repair
DBEngine.RepairDatabase "c:\autopsg\autopsg.mdb"
On Error GoTo 0
MsgBox "Sistema corrigido com sucesso!"
DoCmd.Quit ‘Cair fora do Access
End If
Exit Function
Err_Repair:
For Each errLoop In DBEngine.Errors
MsgBox "Correção mal-sucedida!" & vbCr & _
"Número do erro: " & errLoop.Number & _
vbCr & errLoop.Description
Next errLoop
Dim dbsAutopsg, dbsAutopsgT As Database
Set dbsAutopsg = OpenDatabase("C:\autopsg\autopsg.mdb")
' Esta instrução cria uma versão compactada do banco de dados Autopsg.mdb.
DBEngine.CompactDatabase "c:\autopsg\autopsg.mdb", _
"c:\autopsg\autopsg.mdb"
End Function
Colocando o Relógio/Calendário num Controle
Crie 2 Botões de Comando e 1 Rótulo (lblTempo), coloque figuras adequadas (relógio e calendário neles) nos botões.
No Evento Ao Mover o Mouse do botão relógio digite:
lblTempo.Caption = Format$(Time, "hh:mm")
No Evento ao Mover o Mouse do botão calendário digite:
lblTempo.Caption = Date
Somando Valores de Campos de um Questionário
Temos um formulário que entre outras cosias tem um questionário Escala de Avaliação de Depressão (Terapia Ocupacional), com perguntas (Rótulos) e espaço para respostas (Caixas de Texto). As Caixas de Texto recebem nomes: um, dois, três em diante. Ao final temos uma caixa de texto "total". As perguntas (Está satisfeito com sua vida, Aborrece-se com frequência e por ai vai) devem ser respondidas com apenas uma letra: D ou N (Depressão ou Não Depressão). Lembrar que aqui seria o terapeuta perguntando ao cliente.
No Evento Ao Entrar da Caixa "total", digite:
Private Sub total_Enter()
If um = "D" Then
contador = contador + 1
End If
If dois = "D" Then
contador = contador + 1
End If
If tres = "D" Then
contador = contador + 1
End If
If quatro = "D" Then
contador = contador + 1
End If
If cinco = "D" Then
contador = contador + 1
End If
‘... Cortei
If trinta = "D" Then
contador = contador + 1
End If
total = contador
End Sub
Fazer Mensagem Piscar em Formulário
Crie um Rótulo de nome lblPiscando (por exemplo) e coloque o seguinte código no evento No Cronômetro do Formulário:
Private Sub Form_Timer()
Me!lblPiscando.Visible = Not Me!lblPiscando.Visible
End Sub
Altere a propriedade Intervalo do Cronômetro do form para 500 (mude à vontade).
Obs.: até botões de comando piscam, sendo que todo ele,
não apenas o caption.
Tornando Valores Negativos de Campos em Vermelho
Para que ao digitarmos valores negativos em um Controle/Campo basta que na propriedade Formato do Controle, coloque a seguinte expressão:
#.###,##;-#.###,##[Vermelho]
Veja outro exemplo:
$#,##0.00[Verde];($#,##0.00)[Vermelho];"Zero";"Nulo"
Personalizando uma Caixa De Texto do Tipo Sim/Não
O exemplo a seguir mostra um formato personalizado sim/não para um controle caixa de texto. O controle exibe a palavra "Sempre" em texto azul para Sim, Verdadeiro ou Ativado, e a palavra "Nunca" em texto vermelho para Não, Falso ou Desativado.
Crie uma caixa de texto e coloque na propriedade Origem do Controle o Campo Sim/Não correspondente da Tabela que deseja associar. Na propriedade formato da caixa de texto:
;"Sempre"[Azul];"Nunca"[Vermelho]
Mudando a Cor de Fundo de Controle
No exemplo a seguir, um procedimento de evento Current verifica o status de um botão de opção denominado Descontinuado. Se o botão estiver selecionado, o exemplo definirá a cor de segundo plano do campo NomeDoProduto como vermelho para indicar que o produto foi descontinuado.
Para testar o exemplo, adicione o procedimento de evento a seguir a um formulário que contenha uma opção denominada Descontinuado e uma caixa de texto denominada NomeDoProduto.
Private Sub Form_Current()
If Me!Descontinuado Then
Me!NomeDoProduto.BackColor = 255
EndIf
End Sub
Mudando o Título do Formulário para o Fornecedor que tem o Foco
O próximo exemplo define a propriedade Caption de um formulário com o campo NomeDoCliente. Conforme o foco é movido de registro para registro, a barra de título mostra o nome do fornecedor atual.
Para testar o exemplo, adicione o procedimento de evento a seguir a
um formulário que contenha uma caixa de texto denominada NomeDoCliente.
Na propriedade No Atual do Formulário, digite:
Private Sub Form_Current()
If NomeDoCliente <> Null Then ‘Evita problema com Campo vazio
Me.Caption = Me!NomeDoCliente
End If
End Sub
Retorna um Long que representa o código de cores RGB correspondente ao número de cor especificado.
Sintaxe
QBColor(cor)
O argumento obrigatório cor é um número inteiro no intervalo de 0 a 15.
Definições
O argumento cor possui as definições a seguir:
Número Cor Número Cor
0 Preto 8 Cinza
1 Azul 9 Azul-claro
2 Verde 10 Verde-claro
3 Ciano 11 Ciano-claro
4 Vermelho 12 Vermelho-claro
5 Magenta 13 Magenta-claro
6 Amarelo 14 Amarelo-claro
7 Branco 15 Branco-brilhante
Comentários
O argumento cor representa valores de cor utilizados por versões
anteriores do Basic (como o Microsoft Visual Basic para MS-DOS e o Basic
Compiler). Começando pelo byte menos significativo, o valor retornado
especifica os valores de vermelho, verde e azul utilizados para definir
a cor apropriada no sistema RGB utilizado pelo Visual Basic para Aplicativos.
EXEMPLO:
Este exemplo utiliza a função QBColor para alterar a propriedade BackColor do formulário passado como MeuFormulário para a cor indicada por CódigoDaCor. QBColor aceita valores inteiros entre 0 e 15.
Sub ChangeBackColor (CódigoDaCor As Integer, MeuFormulário As Form)
MeuFormulário.BackColor = QBColor(CódigoDaCor)
End Sub
Retorna um número inteiro Long que representa um valor de cor RGB.
Sintaxe
RGB(red, green, blue
A sintaxe da função RGB possui os argumentos nomeados a seguir:
Parte Descrição
red Obrigatório; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente vermelho da cor.
green Obrigatório; Variant (Integer). Número no intervalo de 0 a.255, inclusive, que representa o componente verde da cor.
blue Obrigatório; Variant (Integer). Número no intervalo de 0 a 255, inclusive, que representa o componente azul da cor.
Comentários
Os métodos e as propriedades de aplicativos que aceitam uma especificação de cor esperam que essa especificação seja um número que represente um valor de cor RGB. Este valor especifica a intensidade relativa de vermelho, verde e azul que causa a exibição de uma cor específica.
O valor de qualquer argumento de RGB que exceda 255 é assumido como sendo 255.
A tabela a seguir lista algumas cores padrão e os valores de vermelho, verde, e azul que elas contêm:
Cor Valor do vermelho Valor do verde Valor do azul
Preto 0 0 0
Azul 0 0 255
Verde 0 255 0
Ciano 0 255 255
Vermelho 255 0 0
Magenta 255 0 255
Amarelo 255 255 0
Branco 255 255 255
EXEMPLO:
Este exemplo mostra como a função RGB é utilizada para retornar um número inteiro que representa um valor de cor RGB. Ela é utilizada em métodos e propriedades de aplicativo que aceitam uma especificação de cor. O objeto MeuObjeto e a sua propriedade são utilizados somente com finalidades ilustrativas. Se MeuObjeto não existir, ou se não tiver uma propriedade Color, ocorrerá um erro.
Dim VERMELHO, I, ValorRGB, MeuObjeto
Vermelho = RGB(255, 0, 0) ' Retorna o valor para Vermelho.
I = 75 ' Inicializa o deslocamento.
ValorRGB = RGB(I, 64 + I, 128 + I) ' Igual a RGB(75, 139, 203).
MeuObjeto.Color = RGB(255, 0, 0) ' Define a propriedade Color de
' MeuObjeto como Vermelho.
O exemplo a seguir mostra como você pode utilizar o valor inserido no controle País para determinar qual dentre duas macros distintas será executada quando você clicar no botão Relatório Imprimir País.
Sub País_AfterUpdate()
If País = "Canadá" Then
[Relatório Imprimir País].OnClick = "ImprimirRelatórioDoCanadá"
ElseIf País = "USA" Then
[Relatório Imprimir País].OnClick = "ImprimirRelatórioUSA"
End If
End Sub
Outros Exemplos:
No Visual Basic, defina a propriedade com uma expressão de seqüência.
Para executar Utilize esta sintaxe Exemplo
Macro "nomedamacro" Botão1.OnClick = "MinhaMacro"
Procedimento de evento "[Event Procedure]" Botão1.Onclick = "[Event Procedure]"
Função definida pelo usuário "=nomedafunção(
)" Botão1.Onclick = "=MinhaFunção()"
Exibindo e Ocultando uma Mensagem de acordo com o Valor de um Controle Calculado
O exemplo a seguir exibe ou oculta uma mensagem de congratulações próxima a um controle calculado que mostra totais de vendas por vendedor. Em seções de relatório onde o total das vendas for maior que a meta de vendas, um rótulo denominado Mensagem exibirá a mensagem "Congratulações! Você atingiu sua meta de vendas" quando a seção for impressa em seções onde o total das vendas for menor que a meta de vendas, o rótulo ficará oculto.
Para testar o exemplo, adicione o procedimento de evento a seguir a um relatório que contenha um rótulo denominado Mensagem, uma caixa de texto denominada TotalGeral (um controle calculado que exibe o total de vendas) e uma seção detalhe denominada DetalheDasVendas.
Private Sub DetalheDasVendas_Format(Cancel As Integer, _
FormatCount As Integer)
Const conMetaDeVendas = 1000
If Me!TotalGeral > conMetaDeVendas Then
Me!Mensagem.Visible = True
Else
Me!Mensagem.Visible = False
End If
End Sub
Criar um Formulário e Botão de Comando Via Código e Dimensiona Controle para Mensagem Caber no Mesmo (Sizetofit)
O exemplo a seguir cria um novo formulário e um novo botão de comando no formulário. Depois, o procedimento define a propriedade Caption do controle e dimensiona o controle para que nele caiba a legenda.
Sub DimensionarNovoControle()
Dim frm As Form, ctl As Control
' Cria novo formulário.
Set frm = CreateForm
' Cria novo botão de comando.
Set ctl = CreateControl(frm.Name, acCommandButton, , , , 500, 500)
' Restaura formulário.
DoCmd.Restore
' Define a propriedade Caption do controle.
ctl.Caption = "Legenda de Controle Extremamente Longa"
' Dimensiona o controle para que nele caiba legenda.
ctl.SizeToFit
End Sub
O exemplo a seguir oculta o campo CódigoDoProduto no modo Folha de Dados do formulário Produtos.
Forms!Produtos!CódigoDoProduto.ColumnHidden = -1
O próximo exemplo também oculta o campo CódigoDoProduto no modo Folha de dados da tabela Produtos. Para definir a propriedade ColumnHidden, o exemplo utiliza os procedimentos ExibirColuna e DefinirPropCampo, os quais estão no módulo padrão do banco de dados.
Dim dbs As Database
Set dbs = CurrentDb
ExibirColuna dbs.TableDefs!Produtos.Fields!CódigoDoProduto, False
Sub ExibirColuna(fldObjeto As Field, intExibir As Integer)
' Define a propriedade ColumnHidden.
DefinirPropCampo fldObjeto, "ColumnHidden", dbLong, Not intExibir
End Sub
Este exemplo utiliza a função Timer para pausar o aplicativo. O exemplo também utiliza DoEvents para submeter-se a outros processos durante a pausa.
Dim TempoDePausa, Início, Fim, TempoTotal
If (MsgBox("Pressione Sim para pausar por 5 segundos", 4)) = vbYes Then
TempoDePausa = 5 ' Define a duração.
Início = Timer ' Define a hora inicial.
Do While Timer < Início + TempoDePausa
DoEvents ' Submete-se a outros processos. Permite multitarefa
Loop
Fim = Timer ' Define a hora final.
TempoTotal = Fim - Início ' Calcula o tempo total.
MsgBox "Pausou por " & TempoTotal & " segundos"
Else
End
End If
OUTRO:
Dim TempoDePausa, Início, Fim, TempoTotal
TempoDePausa = InputBox ("Digite o Tempo de pausa")
Início = Timer ' Define a hora inicial.
Do While Timer < Início + TempoDePausa
DoEvents ' Submete-se a outros processos. Permite multitarefa
Loop
Fim = Timer ' Define a hora final.
TempoTotal = Fim - Início ' Calcula o tempo total.
MsgBox "Pausou por " & TempoTotal & " segundos"
Formatos numéricos definidos pelo usuário (função Format)
A tabela a seguir identifica caracteres que você pode utilizar para criar formatos numéricos definidos pelo usuário:
Caractere Descrição
Nenhum Exibe o número sem formatação.
(0) Espaço reservado para dígito. Exibe um dígito ou um zero. Se a expressão apresenta um dígito na posição onde o 0 aparece na seqüência de caracteres de formato, exibe-o; caso contrário, exibe um zero nessa posição.Se o número apresenta menos dígitos do que os zeros existentes (de qualquer lado do decimal) na expressão de formato, exibe zeros à esquerda ou à direita. Se o número apresenta mais dígitos à direita do separador decimal do que zeros à direita do separador decimal na expressão de formato, arredonda o número em tantas casas decimais quanto for o número de zeros. Se o número apresenta mais dígitos à esquerda do separador decimal do que zeros à esquerda do separador decimal na expressão de formato, exibe os dígitos extras sem modificação.
(#) Espaço reservado para dígito. Exibe um dígito ou nada. Se a expressão apresenta um dígito onde o # aparece na seqüência de caracteres de formato, exibe-o; caso contrário, não exibe nada nessa posição.Esse símbolo funciona como o espaço reservado para o dígito 0, exceto que os zeros à direita e à esquerda não são exibidos se o número apresentar o mesmo número de dígitos ou menos do que o número de caracteres # de cada lado do separador decimal na expressão de formato.
(.) Espaço reservado decimal. Em algumas localidades, uma vírgula é utilizada como separador decimal. O espaço reservado decimal determina quantos dígitos são exibidos à esquerda e à direita do separador decimal. Se a expressão de formato contém somente sinais numéricos à esquerda desse símbolo, números menores do que 1 começam com um separador decimal. Para exibir um zero à esquerda exibido com números fracionários, utilize 0 como o primeiro espaço reservado de dígito à esquerda do separador decimal. O caractere realmente utilizado como um espaço reservado decimal na saída formatada depende do Formato numérico reconhecido pelo seu sistema.
(%) Espaço reservado de porcentagem. A expressão é multiplicada por 100. O caractere de porcentagem (%) é inserido na mesma posição em que aparece na seqüência de caracteres de formato.
(,) Separador de milhar. Em algumas localidades, um ponto é utilizado como separador de milhar. O separador de milhar separa as centenas dos milhares dentro de um número com quatro ou mais posições à esquerda do separador decimal. A utilização padrão do separador de milhar é especificada se o formato contiver um separador de milhar cercado por espaços reservados para dígitos (0 ou #). Dois separadores de milhar adjacentes ou um separador de milhar imediatamente à esquerda do separador decimal (independente de o decimal ser ou não especificado) significa "escalonar o número dividindo-o por 1000 e arredondando se necessário." Por exemplo, você pode utilizar a seqüência de caracteres de formato "##0,," para representar 100 milhões como 100. Números menores do que 1 milhão são exibidos como 0. Dois separadores de milhar adjacentes em qualquer posição diferente de imediatamente à esquerda do separador decimal são tratados simplesmente como especificação da utilização de um separador de milhar. O caractere realmente utilizado como separador de milhar na saída formatada depende do Formato numérico reconhecido pelo seu sistema.
(:) Separador de tempo. Em algumas localidades, outros caracteres podem ser utilizados para representar o separador de tempo. O separador de tempo separa horas, minutos e segundos quando os valores de tempo são formatados. O caractere realmente utilizado como separador de tempo na saída formatada depende das definições de seu sistema.
(/) Separador de data. Em algumas localidades, outros caracteres podem ser utilizados para representar o separador de data. O separador de data separa o dia, o mês e o ano quando os valores de data são formatados. O caractere realmente utilizado como separador de data na saída formatada depende das definições de seu sistema.
(E- E+ e- e+) Formato científico. Se a expressão de formato contém pelo menos um espaço reservado para dígito (0 ou #) à direita de E-, E+, e-, ou e+, o número é exibido em formato científico e E ou e é inserido entre o número e seu expoente. O número de espaços reservados para dígitos à direita determina o número de dígitos no expoente. Utilize E- ou e- para colocar um sinal de menos ao lado de expoentes negativos. Utilize E+ ou e+ para colocar um sinal de menos ao lado de expoentes negativos e um sinal de mais ao lado de expoentes positivos.
- + $ ( ) Exibe um caractere literal. Para exibir um caractere diferente daqueles listados, anteceda-o com uma barra invertida (\) ou coloque-o entre aspas duplas (" ").
(\) Exibe o próximo caractere na seqüência de caracteres de formato. Para exibir um caractere que apresenta um significado especial como um caractere literal, anteceda-o com uma barra invertida (\). A barra invertida, na verdade, não é exibida. Utilizá-la é a mesma coisa que colocar o próximo caractere entre aspas duplas. Para exibir uma barra invertida, utilize duas barras invertidas (\\).Exemplos de caracteres que não podem ser exibidos como caracteres literais são os caracteres de formatação de data e hora (a, c, d, h, m, n, p, q, s, t, w, y, / e :), os caracteres de formatação numérica (#, 0, %, E, e, vírgula e ponto) e os caracteres de formatação da seqüência de caracteres (@, &, <, > e !).
("ABC") Exibe a seqüência de caracteres dentro de aspas duplas
(" "). Para incluir uma seqüência de caracteres em format a
partir do código, você deve utilizar Chr(34) para envolver
o texto (34 é o código de caractere para uma aspa (")).