USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (Banco de Dados)

Título da Dica:  Incluir em Banco de Dados e consultar atraves de um Listbox conforme nome for digitado
Postada em 1/9/2004 por geronimo            
Fonte livro Editora Erika:
Coloque em um form o seguinte 7 textbox 10 commandButton e um listBox
Renomei um commandbutton7  como Nome_Completo_BTn os demais controles pode deixar com o nome gerado pelo VB depois coloque este codigo no form:

   'Define uma variável global como
   'sendo do tipo Database. A variável
   'Agenda será utilizada para indicar o
   'nome e o caminho (drive e diretório)
   'do arquivo de banco de dados. No nosso
   'caso, utilizaremos o arquivo alunos.mdb
   'localizado em c:\livro.vb\alunos\ o qual
   'possui duas tabelas (Nomes e Notas)
   Public Arquivo As Database
  
   'Define variáveis globais como
   'sendo do tipo Recordset.
   'Os Recordsets Notas e Nomes serão
   'utilizados para abrir as tebelas
   'Nomes e Notas. Já o Recorset Alunos
   'será utilizado para a pesquisa em
   'SQL envolvendo as duas tabelas mencionadas.
   Public Nomes  As Recordset
   Public Notas  As Recordset
   Public Alunos As Recordset
    
   Function Atualiza_Campos()
      
    'Para cada campo da tabela é verificado
    'o valor do campo. Caso o valor seja
    'maior do que zero, a caixa de texto
    'apresenta o conteúdo do campo especificado
    'entre parenteses. Se o valor não for maior
    'do que zero, o conteúdo da caixa de texto
    'é "zerado". Embora a tabela originalmente
    'utilizada não apresente campos nulos ou vazios
    'é interessante manter esse teste para o caso
    'da tabela ser modificada.
            
    
    'Como estamos relacionando as duas tabelas pelo
    'número do aluno (vide consulta em SQL),
    'é necessário especificar de qual tabela estaremos
    'extraindo o número de cada alunos apresentado.
    'Por isso, utilizamos Text1.Text = Alunos (0) ,
    'sendo que Alunos (0) representa o primeiro campo
    '(numero)da tabela.
    If Alunos(0).Value > 0 Then
        Text1.Text = Alunos(0)
    Else
        Text1.Text = ""
    End If
    
    'Para os demais campos seguimos o
    'procedimento normal.
    
    If Alunos("Nota").Value > 0 Then
        Text2.Text = Alunos("Nota")
    Else
        Text2.Text = ""
    End If
    
    If Alunos("Serie").Value > 0 Then
        Text3.Text = Alunos("Serie")
    Else
        Text3.Text = ""
    End If
    
    If Alunos("Nome").Value > 0 Then
        Text4.Text = Alunos("Nome")
    Else
        Text4.Text = ""
    End If
    
  
   End Function
    
    
Function Limpa_Campos()
    
    'Esta função limpa o conteúdo
    'das caixas de texto utilizadas.
    Text1.Text = ""
    Text2.Text = ""
    Text3.Text = ""
    Text4.Text = ""
    

End Function


Private Sub Command1_Click()
Dim Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Contador As Integer, Total_encontrado As Integer
      

Contador = 0
Total_encontrado = 0
        

List1.Clear


Consulta_SQL = Text7.Text
  
Set Alunos = Arquivo.OpenRecordset(Consulta_SQL, dbOpenSnapshot)


Limpa_Campos


Total_encontrado = Alunos.RecordCount


Text6.Text = Total_encontrado



If Total_encontrado > 1 Then
    List1.ToolTipText = "Clique em um dos nomes " + _
           "disponíveis para verificar dados completos."
Else
    List1.ToolTipText = "Nenhum nome disponível."
End If
      

Do
      If Alunos.AbsolutePosition > -1 Then
                              
          List1.AddItem (Alunos("nome"))
          
          Contador = Contador + 1
      
          Alunos.MoveNext
      
      
      End If
      
  
  
  Loop Until Contador >= Total_encontrado
    


End Sub

Private Sub Command10_Click()

    'Vai para o último registro válido
    Alunos.MoveLast
        
    Atualiza_Campos

End Sub

Private Sub Command2_Click()

Text7.Text = "SELECT * " _
            + "FROM Nomes, Notas " _
            + "WHERE Serie >= 1 AND " _
            + "Nomes.Numero = Notas.Numero " _
            + "ORDER BY Serie;"
End Sub

Private Sub Command3_Click()

Text7.Text = "SELECT * " _
            + "FROM Nomes, Notas " _
            + "WHERE Nomes.Numero >= 10  " _
            + "AND Nomes.Numero = Notas.Numero " _
            + "ORDER BY Serie;"

End Sub


Private Sub Command4_Click()

Text7.Text = "SELECT * " _
            + "FROM Nomes, Notas" _
            + "WHERE Nomes.Numero >= 10  " _
            + "AND Nomes.Numero = Notas.Numero " _
            + "ORDER BY Nome;"
            
End Sub


Private Sub Command5_Click()
    
    'Finaliza o programa.
    
    End
    
End Sub

Private Sub Command6_Click()
    
    'Nos leva ao primeiro registro
    'da tabela consulta realizada
    'pelo Recordset Alunos.
    Alunos.MoveFirst
                
    'Chama a função que
    'atualiza os campos
    '(ou conteúdo das
    'caixas de texto)
    Atualiza_Campos
    
End Sub

Private Sub Command8_Click()
    
    'Nos leva ao registro anterior da
    'tabela consulta realizada
    'pelo Recordset Alunos.
    Alunos.MovePrevious
    
    'Testa se atingimos um ponto antes
    'do início dos registros. BOF significa
    'Beginning Of File, que pode ser traduzido
    'por Antes do Arquivo. Ao atingirmos essa
    'posição, não poderemos atualizar os campos,
    'dessa forma, utilizamos MoveFirst para ir
    'ao primeiro (First) registro válido.
    If Alunos.BOF Then
        Alunos.MoveFirst
    End If
        
    'Caso tentássemos atualizar os campos (caixas
    'do tipo texto)sem a verificação anterior e
    'estivéssemos em BOF, o programa daría erro.
    'A seguir, é chamada a função para atualização
    'dos campos.
    Atualiza_Campos
  
End Sub

Private Sub Command9_Click()

    'Vamos para o próximo registro da
    'consulta especifica no Recordset Alunos.
    Alunos.MoveNext
    
    'Verificamos se foi atingido o final
    'do arquivo (EOF que significa
    'End Of File e pode ser traduzido
    'exatamente como Final de Arquivo).
    'Caso essa posição tenha sido atingida,
    'vamos para o último registro válido,
    'utilizando MoveLast.
    If Alunos.EOF Then
        Alunos.MoveLast
    End If
        
    'O próximo comando executa a rotina que
    'atualiza as caixas de texto do formulário
    'com o conteúdo do registro atual resultante
    'de uma das operações anteriores (MoveNext ou
    'MoveLast). Caso seja atingido a posição EOF
    'e fosse solicitada a atualização dos campos,
    'o programa acusaria um erro, pois o registro
    'não seria válido. Com o teste anterior,
    'fica contornado o problema, sendo apresentado
    'um registro válido.
    Atualiza_Campos

End Sub

Private Sub Form_Load()

Dim Relacionamento As String
    
'Quando o formulário é carregado, o arquivo
'c:\livro.vb\alunos\alunos.mdb é lido e
'amarrado à variável Arquivo, conforme indicado
'a seguir. Essa variável foi declarada em
'General - Declarations.
Set Arquivo = OpenDatabase(App.Path & "\alunos.MDB", False)



'Após a abertura do arquivo, vamos abrir as tabelas
'Nome e Notas, associando-as aos Recordsets Nomes e
'Notas, declarados em General - Declarations.
Set Nomes = Arquivo.OpenRecordset("Nomes", dbOpenDynaset)
Set Notas = Arquivo.OpenRecordset("Notas", dbOpenDynaset)


'Monta a pesquisa SQL e relacionamento entre as duas tabelas.
'Ele pode ser traduzido da seguinte maneira
'SELECIONE todos os campos (representado pelo asterístico)
'LOCALIZADOS NAS TABELAS Nomes e Notas
'ONDE o campo numero (tabela nomes)=campo numero (tabela notas)
Relacionamento = "SELECT * " _
                + "FROM Nomes, Notas " _
                + "WHERE  Nomes.Numero = Notas.Numero;"

'É aberto um novo Recorset com a pesquisa montada
'em Relacionamento. Note que Relacionamento é apenas
'uma String que armazena as instruções em SQL. Caso
'desejássemos, poderíamos substituir a variável
'Relacionamento (apresentada a seguir) pela própria
'consulta. Dessa forma, o comando a seguir ficaria
'com uma estrutura similar à essa:
'Set Alunos = Arquivo.OpenRecordset("SELECT * ...."
Set Alunos = Arquivo.OpenRecordset(Relacionamento, dbOpenDynaset)

    
'Levamos as duas tabelas para o
'primeiro registro utilizando o
'MoveFirst, mostrado a seguir.
Alunos.MoveFirst

Atualiza_Campos

Text7.Text = "SELECT * " _
            + "FROM Nomes, Notas " _
            + "WHERE Serie >= 2 " _
            + "AND Nomes.Numero = Notas.Numero " _
            + "ORDER BY Nome;"
      
End Sub


Private Sub List1_Click()
'Faz a pesquisa por Nome no Banco de
'Dados utilizando SQL.

'Inicialmente, o usuário deverá especificar
'as primeiras letras (ou a primeira parte
'do nome a ser pesquisado), como por exemplo
'Ma, na caixa de texto localizada
'logo abaixo da caixa de texto (Text5.Text).
'Uma vez digitada alguma coisa nessa caixa de
'texto, uma rotina específica será executada para
'verificar todos os nomes que possuem, em seu
'início, as letras especificadas. Os nomes que
'atendem a essa pesquisa serão apresentado no
'ListBox. Caso o usuário deseje verificar
'outras informações sobre um determinado aluno
'apresentado no ListBox, basta clicar sobre esse
'nome que a rotina apresentada a seguir será executada.

'Declara as variáveis utilizadas.
Dim Dado As String, Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Registro As Long
          
'Pesquisa o nome selecionado (List1.Text)
'atribuindo-o à variável Dado.
Dado = List1.Text

'Monta o comando SQL e o armazena na String Consulta_SQL.
'Note que o relacionamento é mantido com à utilização de
'AND Nomes.Numero = Notas.Numero
Consulta_SQL = "SELECT * FROM Nomes, Notas WHERE Nome = '" _
                + Dado + "' AND Nomes.Numero = Notas.Numero;"
    
'O Recordset Alunos recebe o resultado da
'pesquisa SQL montada em Consulta_SQL .
Set Alunos = Arquivo.OpenRecordset(Consulta_SQL, dbOpenSnapshot)

'Caso a propriedade AbsolutePosition seja maior do que -1
'isso indica que a pesquisa encontrou o nome especificado.
'Para indicar o valor de AbsolutePosition, montamos a mensagem
'a seguir e a exibimos em um MsgBox, independente do seu valor.
'Para apresentar a mensagem, basta retirar o termo
'Rem (de Remark ou comentário)
Rem Mensagem = "Posição retornada por Pesquisa.AbsolutePosition = " + _
           Str(Alunos.AbsolutePosition)
          
'Para apresentar a mensagem, basta retirar o termo
'Rem (de Remark ou comentário)
Rem Resultado = MsgBox(Mensagem, vbInformation)
  
'Limpa as caixas de texto,
'executando a função a seguir
Limpa_Campos

'Agora, testamos o valor da propriedade AbsolutePosition
'a qual nos indica o sucesso ou não da pesquisa, conforme
'comentado anteriormente.
If Alunos.AbsolutePosition > -1 Then
    
    'Mostramos o nome encontrado
    Mensagem = "Nome encontrado: " + Alunos("nome")
    Resultado = MsgBox(Mensagem, vbInformation)
        
    Atualiza_Campos
    
Else

    Resultado = MsgBox("Nome não encontrado.", vbInformation)
    
End If

'Os comandos apresentados a seguir restauram
'o controle para a pesquisa feita originalmente
'no Form Load. Caso não utilizássemos essas
'instruções, uma vez apresentado o nome do
'aluno e seus dados, nós não conseguríamos
'navegar da mesma forma com os botões
'Primeiro Anterior Próximo e Último. Veja
'como procedemos:

'Verificamos o número do aluno e
'ançamos esse resultado na variável
'Registro (conforme mostrado a seguir).
'Esse valor será utilizado mais adiante
'para reposicionar o registro atual.
Registro = Alunos(0)

'Informamos o número desse registro
Resultado = MsgBox(Registro, vbInformation)
  
'Montamos o mesmo relacionamento
'feito no Form Load.
Relacionamento = "SELECT * " _
                + "FROM Nomes, Notas " _
                + "WHERE  Nomes.Numero = Notas.Numero;"


'Remontamos o Recorset Alunos, para que a
'navegação pelos botões funcione normalmente.
Set Alunos = Arquivo.OpenRecordset(Relacionamento, dbOpenDynaset)


'Como o número dos alunos é crescente,
'esse número (do aluno) praticamente
'corresponde ao número do registro.
'A única diferença é que os registro
'no banco de dados iniciam com zero
'e o primeiro aluno da tabela recebe
'o número 1 (um). Dessa forma, o registro
'0 corresponde ao aluno 1, o registro 1
'corresponde ao aluno 2 e assim por diante.
'Por isso ao diminuirmos 1 da variável Registro,
'estaremos obtendo sua posição na tabela.
Registro = Registro - 1

'Finalmente, movemos a pesquisa Alunos para
'o valor indicado pela variável Registro que,
'conforme mencionado, representa a posição
'do nome encontrado.
Alunos.Move Registro


End Sub

Private Sub Nome_Completo_Btn_Click()
'Faz a pesquisa por Nome no Banco de Dados
'utilizando uma estrutura SQL.
'Se não localizar o registro, mostra
'a mensagem de "Não Existe".

Dim Dado As String, Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Registro As Long
            
'Verifica o númro do aluno
'atualmente apresentado na tela
Registro = Alunos(0)

'Solicita o nome completo a ser pesquisado.
Dado = InputBox("Informe o Nome Completo")

'Monta o comando SQL e o armazena na String Consulta_SQL
Consulta_SQL = "SELECT * " _
              + "FROM Nomes, Notas " _
              + "WHERE Nome = '" + Dado + "' " _
              + "AND Nomes.Numero = Notas.Numero;"
    
'Montamos um novo Recorset com a consulta
'desejada e o 'atribuímos à variável
'Alunos (declarada em General - Declarations).
Set Alunos = Arquivo.OpenRecordset(Consulta_SQL, dbOpenSnapshot)

'Caso a propriedade AbsolutePosition seja maior do que -1
'isso indica que a pesquisa encontrou o nome especificado.
'Para indicar o valor de AbsolutePosition, montamos a mensagem
'a seguir e a exibimos em um MsgBox, independente do seu valor.
Mensagem = "Posição retornada por Pesquisa.AbsolutePosition = " + _
           Str(Alunos.AbsolutePosition)
          
Resultado = MsgBox(Mensagem, vbInformation)
  
'Limpa as caixas de texto,
'executando a função a seguir
Limpa_Campos

'Agora, testamos o valor da propriedade AbsolutePosition
'a qual nos indica o sucesso ou não da pesquisa, conforme
'comentado anteriormente.
If Alunos.AbsolutePosition > -1 Then
    
    'Mostramos o nome encontrado
    Mensagem = "Nome encontrado: " + Alunos("nome")
    Resultado = MsgBox(Mensagem, vbInformation)
      
    'Caso o nome especificado tenha sido encontrado,
    'verificamos o número desse aluno. Esse número
    'será utilizado posteriormente para apresentar
    'os dados desse aluno na tela e preservar a
    'possibilidade de navegação.
    Registro = Alunos(0)

    'Atualizamos os campos na tela.
    Atualiza_Campos
    
Else

    Resultado = MsgBox("Nome não encontrado.", vbInformation)
    
End If



  
'Montamos o mesmo relacionamento
'feito no Form Load.
Relacionamento = "SELECT * " _
                + "FROM Nomes, Notas " _
                + "WHERE  Nomes.Numero = Notas.Numero;"


'Remontamos o Recorset Alunos, para que a
'navegação pelos botões funcione normalmente.
Set Alunos = Arquivo.OpenRecordset(Relacionamento, dbOpenDynaset)


'Utilizamos o valor do registro para
'posicionar a tabela no registro encontrado
'ou no registro original (antes da pesquisa ser
'efetuada) caso o nome especificado não tenha
'sido encontrado. Nessa tabela, o aluno número 1
'possui registro 0, o aluno número 2 possui registro
'1 e assim por diante (os registro iniciam em 0
'enquanto o número dos alunos iniciam em 1). Com a
'operação mostrada a seguir, a partir do número
'do aluno, descobrimos o seu registro na tabela.
Registro = Registro - 1

'Posicionamos a tabela no registro correspondente
'ao nome encontrado ou no registro ativo antes
'da pesquisa, caso nenhhum nome tenha sido encontrado.
Alunos.Move Registro

'Atualizamos os campos.
Atualiza_Campos

End Sub

Private Sub Text1_Change()

End Sub

Private Sub Text5_Change()
'Faz a pesquisa por Nome no Banco de Dados
'utilizando SQL. Note que essa procedure é
'executada quando alguma alteração ocorre na
'caixa de texto (quando o usuário digita
'alguma coisa). O texto disponível nessa caixa
'de texto é utilizado na pesquisa SQL,
'verificando os nomes que começam com as letras
'digtadas. Os nomes encontrados são apresentados
'em um ListBox. Por exemplo, podemos pesquisar
'todos os nomes que começam com José ou com Jo .
'Nesse sgundo caso, serão apresentados nomes tais
'como José, João, Joana, etc. Ao clicar sobre um nome
'no ListBox, serão apresentados os dados referentes a
'ao aluno selecionado.

'Declaramos as variáveis utilizadas.
Dim Dado As String, Mensagem As String
Dim Consulta_SQL As String
Dim Resultado As String
Dim Contador As Integer, Total_encontrado As Integer
      
'"Zeramos" as variáveis utilizadas
'para colocar os nomes encontrados
'dentro do ListBox.
Contador = 0
Total_encontrado = 0
        
'Limpamos o ListBox.
List1.Clear

'O nome (ou o início dele) a ser
'pesquisado é atribído à variável Dado.
Dado = Text5.Text

'Monta o comando SQL e o armazena na String Consulta_SQL.
'Veja que após o nome pesquisado é colocado um asterístico
'Dado + "*'", para indicar que podem existir outras letras
'além das especificadas.
Consulta_SQL = "SELECT * " _
              + "FROM Nomes, Notas " _
              + "WHERE Nome LIKE '" _
              + Dado + "*'" _
              + "AND Nomes.Numero = Notas.Numero " _
              + "ORDER BY Nome;"
    
'A variável Alunos (definida como sendo do tipo Recordset
'em General - Declarations) recebe o resultado da pesquisa
'SQL montada em Consulta_SQL .
'
Set Alunos = Arquivo.OpenRecordset(Consulta_SQL, dbOpenSnapshot)

'Limpa as caixas de texto,
'executando a função a seguir.
Limpa_Campos

'Agora, testamos o valor da propriedade AbsolutePosition
'a qual nos indica o sucesso ou não da pesquisa, conforme
'comentado anteriormente.

'Verificamos o total de alunos encontrados.
Total_encontrado = Alunos.RecordCount

'Em seguida, apresentamos esse
'total na caixa de texto Text6.
Text6.Text = Total_encontrado

'Alteramos o ToolTip (aquela barra amarela
'com algum texto explicativo, a qual é
'apresentada quando passamos com o mouse sobre
'um objeto - botão, caixa de texto, listbox. etc.

If Total_encontrado > 1 Then
    'Caso tenha sido encontrado algum aluno,
    'ajustamos o seguinte ToolTip.
    List1.ToolTipText = "Clique em um dos nomes " + _
           "disponíveis para verificar dados completos."
Else
    'Entretanto, caso a pesquisa não encontre
    'pelo menos um aluno com o nome especificado,
    'alteramos o ToolTip para o seguinte texto:
    List1.ToolTipText = "Nenhum nome disponível."
End If
      

'O loop Do...Until, utilizado a seguir,
'coloca os nomes encontrado no ListBox.
Do
      'É feito um teste para verificar a posição
      'absoluta do registro que será mostrado.
      'Esse teste é apenas uma precaução para que
      'não se tente mostrar um registro inexistente.
      If Alunos.AbsolutePosition > -1 Then
                              
          'Adiciona o nome encontrado no ListBox.
          List1.AddItem (Alunos("nome"))
          
                    
          'A variável Contador (zerada no início desta
          'procedure) é incrementada. Ela está sendo
          'utilizada para contar o total de registros
          'apresentados aos usuários.
          Contador = Contador + 1
      
          'Como a pesquisa SQL foi ordenada por Nome
          '(veja o trecho final da instrução SQL ORDER BY Nome;)
          'agora vamos para o próximo registro,
          'utilizando a instrução MoveNext.
          Alunos.MoveNext
      
      
      End If
      
  
  'O loop Do...Loop Until é executado enquanto o
  'Contador for menor ou igual ao total de resgistros
  'encontrados (utilizando a variável Total_encontrado)
  Loop Until Contador >= Total_encontrado
  
  
'Vamos reajustar o Recordeset Alunos, para que
'a navegação pelos botoões novamente seja possível.
Relacionamento = "SELECT * " _
                + "FROM Nomes, Notas " _
                + "WHERE  Nomes.Numero = Notas.Numero;"


'Remontamos o Recorset Alunos, para que a
'navegação pelos botões funcione normalmente.
Set Alunos = Arquivo.OpenRecordset(Relacionamento, dbOpenDynaset)


'Finalmente, movemos a pesquisa Alunos para
'o primeiro registro válido.
Alunos.MoveFirst
  

Atualiza_Campos


End Sub


 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página