menu.gif (2469 bytes)

  

vb_banner.jpg (5053 bytes)

 
 
Home
Informática
Negócios
Guia da Web
Humor
Procura
Serviços
Promoção
Novidades
Atualize-se !
Prêmios
Contate-nos!

Dicas de Visual Basic - Parte I

Como Abrir bases de dados com senha  ? 
Eliminando o IF quando possível  
Validando CGC e CPF 

Imprimindo Relatórios do Crystal no VB   

-  DBGrid com consultas parametrizadas (consulta com parâmetros)   
Movendo-se entre os campos com Enter   
-   Destacando uma linha em um DBGrid  
Como evitar que um programa seja executado 2 vezes pelo usuário  novo11.gif (263 bytes)
 
 
  Como Abrir base de dados com Senha ? 

Este exemplo utiliza o objeto Dao Jet. Para outros objetos consulte o Help do VB.
Para abrir o banco é necessário passar a senha no parâmetro Connect. No exemplo abaixo, a senha é "web".

Dim wrk As Workspace

Dim db As Database

Set wrk = DBEngine. Workspace(0)

Set db = wrk.OpenDatabase("MYDB.MDB", false, false, ";PWD=web")

O parâmetro Connect (4o parâmetro) é case sensitive (diferencia A de a) e - ao contrário do que diz a documentação do VB - os parâmetros exclusive e read-only (2o e 3o parâmetros) devem ser falsos.

Voltar

 

  Eliminando o IF quando possível

Se você atribui true ou false para uma variável (ou propriedade), após testar certas condições, poderia fazê-lo sem o IF. Veja:

If (age > 18 and sex = "M") and (NecessitaSeContigente = true ) Then ServicoMilitar = true

Pode substituir por:

ServicoMilitar = (age > 18 and sex = "M") and (NecessitaSeContigente)

Outro exemplo:

IF (age > 25 and Category = "M1") or (age > 35 and Category = "C1") or _

(Age > 45 and Category = "P1") then ExecuteDemissao

Poderia ser:

Dim condicao as Integer 'boolean

condição = (age > 25 and Category = "M1") or (age > 35 and Category = "C1")_ or (Age > 45 and Category = "P1")

If condicao Then ExecuteDemissao

Voltar

 

  Validando CGC e CPF

Os números de CGC e CPF possuem dígitos verificadores para que  ?!?!?!...
Horas para serem verificados!!!

Isto é obvio. A validação deve ser feita (por qualquer sistema decente) para impedir a digitação por engano e os CGCs e CPFs falsos.

Function Fu_consistir_CgcCpf (Vl_CgcCpf As String)

' Esta Rotina Devolverá True Se o Cgc/Cpf Informado For valido
' ou False Se o Cgc/Cpf Não For Correto
' Para Chamar esta Rotina de Consistência
' 1 ) Atribuir o valor do CgcCpf a uma Variavel String
' 2 ) Chamar a Rotina com : Fu_consistir_CgcCpf (Variavel)
' Uma Forma Simples de fazer a Consistencia
' é Copiando as linhas abaixo (exemplo)
' para dentro do Programa
' Dim Vl_CgcCpf As String
' Vl_CgcCpf = Me.CgcCpf.Text
' If Fu_consistir_CgcCpf(Vl_CgcCpf) = False then
'    MsgBox "( Cgc/Cpf Informado Não é um Cgc/Cpf Correto )"
'    Me.CgcCpf.SetFocus
'    Exit Sub
' End if

Fu_consistir_CgcCpf = False
Dim VA_CgcCpf As String
Dim VA_Digito As String
Static Numero(15) As Integer
Dim VA_Resto As Integer
Dim VA_Resultado As Integer
Dim VA_SomaDigito10 As Integer
Dim VA_resto1 As Integer
VA_CgcCpf = Format(Vl_CgcCpf, "@@@@@@@@@@@@@@")
VA_Digito = Mid(VA_CgcCpf, 13, 2)
Numero(1) = Val(Mid(VA_CgcCpf, 1, 1))
Numero(2) = Val(Mid(VA_CgcCpf, 2, 1))
Numero(3) = Val(Mid(VA_CgcCpf, 3, 1))
Numero(4) = Val(Mid(VA_CgcCpf, 4, 1))
Numero(5) = Val(Mid(VA_CgcCpf, 5, 1))
Numero(6) = Val(Mid(VA_CgcCpf, 6, 1))
Numero(7) = Val(Mid(VA_CgcCpf, 7, 1))
Numero(8) = Val(Mid(VA_CgcCpf, 8, 1))
Numero(9) = Val(Mid(VA_CgcCpf, 9, 1))
Numero(10) = Val(Mid(VA_CgcCpf, 10, 1))
Numero(11) = Val(Mid(VA_CgcCpf, 11, 1))
Numero(12) = Val(Mid(VA_CgcCpf, 12, 1))
Numero(13) = Val(Mid(VA_CgcCpf, 13, 1))
Numero(14) = Val(Mid(VA_CgcCpf, 14, 1))

If Len(Trim(Vl_CgcCpf)) > 11 Then ' Cgc
   VA_Resultado = Numero(1) * 2
   If VA_Resultado > 9 Then
      VA_SomaDigito10 = VA_Resultado + 1
   Else
      VA_SomaDigito10 = VA_Resultado
   End If
   VA_Resultado = Numero(3) * 2
   If VA_Resultado > 9 Then
      VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
   Else
      VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
   End If
   VA_Resultado = Numero(5) * 2
   If VA_Resultado > 9 Then
     VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
   Else
     VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
   End If
   VA_Resultado = Numero(7) * 2
   If VA_Resultado > 9 Then
      VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
   Else
      VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
   End If
   VA_SomaDigito10 = VA_SomaDigito10 + Numero(2) + Numero(4) + Numero(6)
   If Mid(Str(VA_SomaDigito10), Len(Str(VA_SomaDigito10)), 1) = "0" Then
      VA_Resto = 0
   Else
   VA_Resto = 10 - Val(Mid(Str(VA_SomaDigito10), _ Len(Str(VA_SomaDigito10)), 1))
   End If
   If VA_Resto <> Numero(8) Then
      Exit Function
   End If
   VA_Resultado = (Numero(1) * 5) + (Numero(2) * 4) _
   + (Numero(3) * 3) + (Numero(4) * 2) _
   + (Numero(5) * 9) + (Numero(6) * 8) + _
   (Numero(7) * 7) + (Numero(8) * 6) + _
   (Numero(9) * 5) + (Numero(10) * 4) + _
   (Numero(11) * 3) + (Numero(12) * 2)
   ' Atribui para resto o resto da divisão
   ' de VA_resultado dividido por 11
   VA_Resto = VA_Resultado Mod 11
   If VA_Resto < 2 Then
      VA_resto1 = 0
   Else
      VA_resto1 = 11 - VA_Resto
   End If
   If VA_resto1 <> Numero(13) Then
      Exit Function
   End If
   VA_Resultado = (Numero(1) * 6) + _
   (Numero(2) * 5) + (Numero(3) * 4) + _
   (Numero(4) * 3) + (Numero(5) * 2) + _
   (Numero(6) * 9) + (Numero(7) * 8) + _
   (Numero(8) * 7) + (Numero(9) * 6) + _
   (Numero(10) * 5) + (Numero(11) * 4) + _
   (Numero(12) * 3) + (Numero(13) * 2)
   ' Atribui para resto o resto da divisão
   ' de VA_resultado dividido por 11
   VA_Resto = VA_Resultado Mod 11
   If VA_Resto < 2 Then
      VA_resto1 = 0
   Else
      VA_resto1 = 11 - VA_Resto
   End If
   If VA_resto1 <> Numero(14) Then
      Exit Function
   End If
Else ' Cpf
   VA_Resultado = (Numero(4) * 1) + _
   (Numero(5) * 2) + (Numero(6) * 3) _
   + (Numero(7) * 4) + (Numero(8) * 5) _
   + (Numero(9) * 6) + (Numero(10) * 7)_
   + (Numero(11) * 8) + (Numero(12) * 9)
   VA_Resto = VA_Resultado Mod 11
   If VA_Resto > 9 Then
      VA_resto1 = VA_Resto - 10
   Else
      VA_resto1 = VA_Resto
   End If
   If VA_resto1 <> Numero(13) Then
      Exit Function
   End If
 
   VA_Resultado = (Numero(5) * 1) _
   + (Numero(6) * 2) + (Numero(7) * 3) _
   + (Numero(8) * 4) + (Numero(9) * 5) + _
   (Numero(10) * 6) + (Numero(11) * 7) + _
   (Numero(12) * 8) + (VA_Resto * 9)
   VA_Resto = VA_Resultado Mod 11
   If VA_Resto > 9 Then
      VA_resto1 = VA_Resto - 10
   Else
      VA_resto1 = VA_Resto
   End If
   If VA_resto1 <> Numero(14) Then
      Exit Function
   End If
End If
Fu_consistir_CgcCpf = True
End Function

Voltar

 

  Imprimindo Relatórios do Crystal no VB

Você precisa criar um relatório, baseado na sua tabela, diretamente no Crystal. Depois você deverá inserir o objeto Crystal no seu formulário. Você deve "setar", diretamente nas propriedades do Crystal, ou em tempo de execução, as seguintes propriedades:

  1. ReportFileName, que é o nome do arquivo RPT que será impresso;
  2. Destination, se a saída será a impressora, o vídeo ou um arquivo texto;
  3. P/ executar a impressão basta usar o comando NomedoControleReport.Action = 1.
Voltar

 

  DBGrid com consultas parametrizadas (consulta com parâmetros)

Você deverá mudar a propriedade RecordSource do seu controle data (no qual é baseado o DBGrid) em tempo de execução, para algo como o que segue:

Data1.RecordSource = "Select * suatabela Where seucampo = valordocamponoformulário"
Data1.Refresh

É necessário utilizar o método Refresh para atualizar o controle Data.

Voltar

 

  Movendo-se entre os campos com Enter

Usar o evento KeyPress dos seus controles.

IF Keyascii =13 Then
   SendKeys "{TAB}"
END IF

Voltar

 

  Destacando uma linha em um DBGrid

Para destacar uma linha no controle DBGrid, adicione o registro corrente à SellBookmarks Collection:

Private Sub DBGrid_RowColChange _
   (LatRow As Variant, ByVal LasRow As Integer)
   If Data1.RecordSet.RecordCount Then
      DBGrid.SelBookmarks.Add _
      Data1.RecordSet.Bookmark
   End If
End Sub

Voltar
  Como evitar que um programa seja executado 2 vezes pelo usuário

Use o objeto App do VB. Ele contém as informações sobre a aplicação. Entre elas, a propriedade PrevInstance que pode conter 2 valores:

True - Se existe outra instância da aplicação sendo executada em outra janela ou
False - Caso contrário

Coloque então no evento load do formulário principal ou na Sub Main do projeto, o seguinte código:

If App.PrevIntance then 
  MsgBox  "Esta aplicação já esta sendo executada em outra janela"   
  End 
Endif  
Voltar

Web Mundi - WebMaster: Renato
Copyright © [WEB MUNDI] Todos Direitos Reservados.
Revisado em: 09 Setembro, 2000

Hit Counter