Felipe Tadeu Cucick - Analista de Tecnologia - Contatos: Orkut, Linkedin, Twitter, Messenger
segunda-feira, 13 de outubro de 2008
Pesquisa simples com função AUTO-COMPLETAR
Comece o Banco de dados com tabela do Access com pelo menos um cadastro.
General declarations
Dim db As Database
Dim tb As Recordset
Os nomes, tb, db, Tcadastro, são apenas nomes fictícios, pode colocar os nomes que desejar, desde que, saiba organisá-los.
O nome que estiver declarado como Database, deverá estar relacionado com:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
O nome que estiver declarado como Recordset, deverá estar relacionado com:
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
Declare as referencias e vamos começar o Form_load:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
Abre o banco de dados
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
Seleciona a tabela a ser usada, gravada, e alterada pelo programa.
While tb.EOF = False
Serve para enquanto a tabela declarada estiver com o ( End of File = False ) ou seja, enquanto o arquivo da tabela estiver aberto, fazer a função que estiver escrita abaixo.
cbopesq.AddItem tb("nome")
adciona o campo da tabela expecificado à lista do combobox, o que nos ajudara no comando AUTO – COMPLETAR
DICA: Sempre o campo que for receber dados à esquerda, ou seja:
Receptor Doador
Tb.MoveNext, é como se fosse para descer um degrau no banco de dados, è o botão “Próximo” no programa da padaria, porém, funcionando automaticamente.
Portanto, o código do Form_load() deve ficar assim:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
While tb.EOF = False
cbopesq.AddItem tb("nome")
cbopesq.AddItem tb("cnpj")
lstn.AddItem tb("nome")
tb.MoveNext
Wend
Adicionando um ComboBox com a função de “AUTO - COMPLETAR”:
Ao darmos um duplo clique no ComboBox, vemos a seguinte linha de código:
Private Sub cbopesq_Change()
End sub
( Change, seria como uma mudança no combo, ou seja, a sua função normal )
Para fazer a função de AUTO – COMPLETAR você deve alterar o modo Change para
Private Sub cbopesq_KeyPress()
End sub
( KeyPress, dignifica que ele entra em ação, quando alguma tecla é pressionada )
Agora, teremos que criar uma Função no VB, 1º um exemplo prático do que é uma função:
_________________________________________________________________________
Function Limpeza()
Txt1 = “”
Txt2 = “”
End Function
Cmdlimpar_Click()
Limpeza
End sub
O que aconteceu ai ??
Ao declarar a função “Limpeza” todas as vezes que algo tiver escrito “Limpeza” em sua linha de código, como é o caso deste botão limpar, ele ira executar a função, não precisando digitar todas as txts todas as vezes.
Criaremos uma função para o AUTO – COMPLETAR
Detalhe: o código abaixo, você copia e cola, não é necessário alterar nada nem entender :D
Public Function Combo_AutoCompletar(xCombo As ComboBox, ByVal xKeyAscii As Long, Optional ByVal xUpperCase As Boolean = True) As Long
Dim lngFind As Long, intPos As Long, intLength As Long, tStr As String
With xCombo
If xKeyAscii = 8 Then
If .SelStart = 0 Then Exit Function
.SelStart = .SelStart - 1
.SelLength = Len(.Text)
.SelText = vbNullString
Else
intPos = .SelStart
tStr = .Text
.SelText = (Chr$(xKeyAscii))
' .SelText = IIf(xUpperCase, _
' UCase$(Chr$(xKeyAscii)), _
' LCase$(Chr$(xKeyAscii)))
End If
lngFind = SendMessage(.Hwnd, CB_FINDSTRING, 0, ByVal .Text)
If lngFind = -1 Then
.Text = tStr
.SelStart = intPos
.SelLength = (Len(.Text) - intPos)
Combo_AutoCompletar = xKeyAscii
Else
intPos = .SelStart
intLength = Len(.List(lngFind)) - Len(.Text)
.SelText = .SelText & Right$(.List(lngFind), intLength)
.SelStart = intPos
.SelLength = intLength
End If
End With
End Function
Podemos ver nesta função, que no final da segunda linha, esta escrito ou melhor, declarado a variável Keyascii as long
Então, em nosso combobox que estava:
Private Sub cbopesq_KeyPress()
End sub
Deve ficar:
Private Sub cbopesq_KeyPress(KeyAscii As Integer)
KeyAscii = Combo_AutoCompletar(cbopesq, KeyAscii)
End Sub
Modo de uso do programa:
Funciona da seguinte dorma:
Possui os botões: Pesquisar, Alterar, Excluir, Adicionar, Confirmar, Cancelar e OK.
Comandos básicos:
Alterar:
Tb.edit
Excluir:
tb.delete
Adicionar:
Tb.addnew
Simulação de uso:
O usuário digita um nome no combobox de pesquisa e clica em PESQUISAR, todos os dados são preenchidos. Ao preencher os dados, ele tem as seguintes opções:
ALTERAR: altera os dados.
EXCLUIR: exclui os dados.
Ok: Apaga todos os campos da tela, para uma nova pesquisa
Caso clique no botão ALTERAR ou EXCLUIR, terá as seguintes opções:
CONFIRMAR: faz a ação desejada.
CANCELAR: cancela a ação, e apaga todos os campos da tela, para uma nova pesquisa.
Caso ele clique em ADICIONAR, terá as seguintes opções:
CONFIRMAR: faz a ação desejada.
CANCELAR: cancela a ação, e apaga todos os campos da tela, para uma nova pesquisa.
Linha de Código:
Como você pode perceber, vários botões tem a função de alterar dados na tabela, e apagar os dados dos campos, por isso criei funções como inserir e limpe:
Function inserir()
tb("nome") = txtnome.Text
tb("endereco") = txtender.Text
tb("cidade") = txtcid.Text
End Function
Function limpe()
txtnome.Text = ""
txtender.Text = ""
txtcid.Text = ""
End function
A Criação de funções, facilita na organização, diminui a quantidade de linhas de código, e evita com que haja demora ao executar determinada tarefa no programa.
Vamos aos botões:
Digamos que o botão confirmar, é como se fosse um “chaveador”, um “divisor de funções ” entre os botões.
Exemplo. Se você clicar no alterar, ele deve ter a função de gravar os dados na tabela, o mesmo com o inserir. E o excluir ele deleta os dados da tabela.
Para isso, criei a variável que deve ser declarada Dim btn As single.
Detalhe: Na maioria dos meus botões tem a função escrever, ( txtnome tb(“Nome”) ), que serve pra o usuário ter uma maior agilidade e é sempre bom ter programas pra vários tipos de jeitos de pessoas. Ex:
Você pode clicar no PESQUISAR e depois ALTERAR, que seria o normal. Ou, desse jeito, você também tem a opção de clicar direto no ALTERAR q faz a mesma função. Vai de gosto.
UCase : Transforma os dados para maiúsculo, ou seja, não faz diferença se pesquisar Marina, marina ou MaRiNa.
Pesquisar:
tb.MoveFirst Move para o primeiro da do da tabela
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then Tansforma tudo para maiúsculo
escrever
Exit Sub
End If
Tb.MoveNext Move para o próximo para continuar a pesquisa
Alterar:
tb.MoveFirst
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then
txtnome.SetFocus
escrever
confi1.Visible = True
can1.Visible = True
ok1.Visible = False bloqueia o botão OK
tb.Edit
btn = 2 Adiciona o valor 2 na variável btn ( veremos o motivo no confirmar)
Exit Sub
End If
tb.MoveNext
Wend
Excluir:
tb.MoveFirst
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then
escrever
btn = 3
confi1.Visible = True
can1.Visible = True
ok1.Visible = False
Exit Sub
End If
tb.MoveNext
Wend
Cadastrar
tb.AddNew
btn = 1
Ok:
Limpe
Confirmar:
If btn = 1 Then Se for atribuido o valor 1 (clicando no botão cadastrar) faça:
inserir
tb.Update
limpe
End If
If btn = 2 Then Se for atribuido o valor 2 (clicando no botão alterar) faça:
inserir
tb.Update
limpe
End If
If btn = 3 Then Se for atribuido o valor 3 (clicando no botão excluir) faça:
tb.Delete
limpe
End If
Cancelar:
limpe
General declarations
Dim db As Database
Dim tb As Recordset
Os nomes, tb, db, Tcadastro, são apenas nomes fictícios, pode colocar os nomes que desejar, desde que, saiba organisá-los.
O nome que estiver declarado como Database, deverá estar relacionado com:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
O nome que estiver declarado como Recordset, deverá estar relacionado com:
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
Declare as referencias e vamos começar o Form_load:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
Abre o banco de dados
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
Seleciona a tabela a ser usada, gravada, e alterada pelo programa.
While tb.EOF = False
Serve para enquanto a tabela declarada estiver com o ( End of File = False ) ou seja, enquanto o arquivo da tabela estiver aberto, fazer a função que estiver escrita abaixo.
cbopesq.AddItem tb("nome")
adciona o campo da tabela expecificado à lista do combobox, o que nos ajudara no comando AUTO – COMPLETAR
DICA: Sempre o campo que for receber dados à esquerda, ou seja:
Receptor Doador
Tb.MoveNext, é como se fosse para descer um degrau no banco de dados, è o botão “Próximo” no programa da padaria, porém, funcionando automaticamente.
Portanto, o código do Form_load() deve ficar assim:
Set db = OpenDatabase(App.Path + "/agenda.mdb")
Set tb = db.OpenRecordset("dados", dbOpenDynaset)
While tb.EOF = False
cbopesq.AddItem tb("nome")
cbopesq.AddItem tb("cnpj")
lstn.AddItem tb("nome")
tb.MoveNext
Wend
Adicionando um ComboBox com a função de “AUTO - COMPLETAR”:
Ao darmos um duplo clique no ComboBox, vemos a seguinte linha de código:
Private Sub cbopesq_Change()
End sub
( Change, seria como uma mudança no combo, ou seja, a sua função normal )
Para fazer a função de AUTO – COMPLETAR você deve alterar o modo Change para
Private Sub cbopesq_KeyPress()
End sub
( KeyPress, dignifica que ele entra em ação, quando alguma tecla é pressionada )
Agora, teremos que criar uma Função no VB, 1º um exemplo prático do que é uma função:
_________________________________________________________________________
Function Limpeza()
Txt1 = “”
Txt2 = “”
End Function
Cmdlimpar_Click()
Limpeza
End sub
O que aconteceu ai ??
Ao declarar a função “Limpeza” todas as vezes que algo tiver escrito “Limpeza” em sua linha de código, como é o caso deste botão limpar, ele ira executar a função, não precisando digitar todas as txts todas as vezes.
Criaremos uma função para o AUTO – COMPLETAR
Detalhe: o código abaixo, você copia e cola, não é necessário alterar nada nem entender :D
Public Function Combo_AutoCompletar(xCombo As ComboBox, ByVal xKeyAscii As Long, Optional ByVal xUpperCase As Boolean = True) As Long
Dim lngFind As Long, intPos As Long, intLength As Long, tStr As String
With xCombo
If xKeyAscii = 8 Then
If .SelStart = 0 Then Exit Function
.SelStart = .SelStart - 1
.SelLength = Len(.Text)
.SelText = vbNullString
Else
intPos = .SelStart
tStr = .Text
.SelText = (Chr$(xKeyAscii))
' .SelText = IIf(xUpperCase, _
' UCase$(Chr$(xKeyAscii)), _
' LCase$(Chr$(xKeyAscii)))
End If
lngFind = SendMessage(.Hwnd, CB_FINDSTRING, 0, ByVal .Text)
If lngFind = -1 Then
.Text = tStr
.SelStart = intPos
.SelLength = (Len(.Text) - intPos)
Combo_AutoCompletar = xKeyAscii
Else
intPos = .SelStart
intLength = Len(.List(lngFind)) - Len(.Text)
.SelText = .SelText & Right$(.List(lngFind), intLength)
.SelStart = intPos
.SelLength = intLength
End If
End With
End Function
Podemos ver nesta função, que no final da segunda linha, esta escrito ou melhor, declarado a variável Keyascii as long
Então, em nosso combobox que estava:
Private Sub cbopesq_KeyPress()
End sub
Deve ficar:
Private Sub cbopesq_KeyPress(KeyAscii As Integer)
KeyAscii = Combo_AutoCompletar(cbopesq, KeyAscii)
End Sub
Modo de uso do programa:
Funciona da seguinte dorma:
Possui os botões: Pesquisar, Alterar, Excluir, Adicionar, Confirmar, Cancelar e OK.
Comandos básicos:
Alterar:
Tb.edit
Excluir:
tb.delete
Adicionar:
Tb.addnew
Simulação de uso:
O usuário digita um nome no combobox de pesquisa e clica em PESQUISAR, todos os dados são preenchidos. Ao preencher os dados, ele tem as seguintes opções:
ALTERAR: altera os dados.
EXCLUIR: exclui os dados.
Ok: Apaga todos os campos da tela, para uma nova pesquisa
Caso clique no botão ALTERAR ou EXCLUIR, terá as seguintes opções:
CONFIRMAR: faz a ação desejada.
CANCELAR: cancela a ação, e apaga todos os campos da tela, para uma nova pesquisa.
Caso ele clique em ADICIONAR, terá as seguintes opções:
CONFIRMAR: faz a ação desejada.
CANCELAR: cancela a ação, e apaga todos os campos da tela, para uma nova pesquisa.
Linha de Código:
Como você pode perceber, vários botões tem a função de alterar dados na tabela, e apagar os dados dos campos, por isso criei funções como inserir e limpe:
Function inserir()
tb("nome") = txtnome.Text
tb("endereco") = txtender.Text
tb("cidade") = txtcid.Text
End Function
Function limpe()
txtnome.Text = ""
txtender.Text = ""
txtcid.Text = ""
End function
A Criação de funções, facilita na organização, diminui a quantidade de linhas de código, e evita com que haja demora ao executar determinada tarefa no programa.
Vamos aos botões:
Digamos que o botão confirmar, é como se fosse um “chaveador”, um “divisor de funções ” entre os botões.
Exemplo. Se você clicar no alterar, ele deve ter a função de gravar os dados na tabela, o mesmo com o inserir. E o excluir ele deleta os dados da tabela.
Para isso, criei a variável que deve ser declarada Dim btn As single.
Detalhe: Na maioria dos meus botões tem a função escrever, ( txtnome tb(“Nome”) ), que serve pra o usuário ter uma maior agilidade e é sempre bom ter programas pra vários tipos de jeitos de pessoas. Ex:
Você pode clicar no PESQUISAR e depois ALTERAR, que seria o normal. Ou, desse jeito, você também tem a opção de clicar direto no ALTERAR q faz a mesma função. Vai de gosto.
UCase : Transforma os dados para maiúsculo, ou seja, não faz diferença se pesquisar Marina, marina ou MaRiNa.
Pesquisar:
tb.MoveFirst Move para o primeiro da do da tabela
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then Tansforma tudo para maiúsculo
escrever
Exit Sub
End If
Tb.MoveNext Move para o próximo para continuar a pesquisa
Alterar:
tb.MoveFirst
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then
txtnome.SetFocus
escrever
confi1.Visible = True
can1.Visible = True
ok1.Visible = False bloqueia o botão OK
tb.Edit
btn = 2 Adiciona o valor 2 na variável btn ( veremos o motivo no confirmar)
Exit Sub
End If
tb.MoveNext
Wend
Excluir:
tb.MoveFirst
While tb.EOF = False
If UCase(tb("nome")) = UCase(cbopesq) Then
escrever
btn = 3
confi1.Visible = True
can1.Visible = True
ok1.Visible = False
Exit Sub
End If
tb.MoveNext
Wend
Cadastrar
tb.AddNew
btn = 1
Ok:
Limpe
Confirmar:
If btn = 1 Then Se for atribuido o valor 1 (clicando no botão cadastrar) faça:
inserir
tb.Update
limpe
End If
If btn = 2 Then Se for atribuido o valor 2 (clicando no botão alterar) faça:
inserir
tb.Update
limpe
End If
If btn = 3 Then Se for atribuido o valor 3 (clicando no botão excluir) faça:
tb.Delete
limpe
End If
Cancelar:
limpe
Brush in Mustang
Marcadores:
Brush in Mustang,
Felipe Tadeu,
Mustang GT 500 Kr,
Photoshop,
Speedy Paint
Assinar:
Postagens (Atom)