iMasters Fóruns: Tá complicado!!! Como desenvolvo sistema de BUSCA??? - iMasters Fóruns

Ir para

Página 1 de 1
  • Novo tópico
  • Responder

Tá complicado!!! Como desenvolvo sistema de BUSCA???

#1 Membro offline   andrea n. zorzeto Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 3
  • Cadastrado: 13-março 07

Ícone  Postou 13 março 2007 - 16:39

:upset: Criei um BD com "n" itens, que é o meu cadastro principal. Deste existe um cadastro resumido (BD2), apenas com os itens mais importantes e apenas leitura.
Agora preciso criar um sistema de BUSCA por "nome" e "apelido" utilizando o BD2.
Alguém pode me ajudar, por favor... :unsure:

Obrigada!

Andrea

#2 Membro offline   Spiritwalker Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 100
  • Cadastrado: 25-janeiro 07

Postou 14 março 2007 - 02:03

Prezada Andrea:

Para ser sincero, eu nunca havia efetuado uma conexão Access/Access antes. Parece-me que a maneira mais simples é seguir o roteiro abaixo:

1) Estando o seu BD2 aberto, clique no menu "Arquivo/Obter dados externos/Vincular tabelas";
2) Indique a localização do BD1 e o nome da tabela que contém o seu "cadastro principal" (para fins didáticos, estarei denominando-a de "tblNomes");
3) Ainda em seu BD2, crie um novo formulário contendo apenas uma caixa de texto (que chamarei de "txtNome") e, logo abaixo, uma caixa de listagem (denominada "lstNomes");
4) Acesse as "Propriedades" de sua caixa de listagem e indique a tabela "tblNomes" (que como sabemos encontra-se em BD1) como a "origem da linha" do componente em questão; especifique, também, o número de colunas e suas larguras de modo a exibir somente os campos que interessam aos usuários (com relativo destaque para o campo "Nome");
5) No evento "Change" da caixa de texto insira o código abaixo:

Dim db As Database
Dim qdf As QueryDef
Dim strSQL As String
Dim strNome As String

If IsNull(txtNome) Or txtNome = "" Then
Exit Sub
Else
Set db = CurrentDb
db.QueryDefs.Refresh
For Each qdf In db.QueryDefs
If qdf.Name = "qry_TempNomes" Then
db.QueryDefs.Delete qdf.Name
End If
Next qdf
strNome = txtNome.Text & "*"
strSQL = "SELECT * FROM tblNomes WHERE Nome Like '" & strNome & "' ORDER BY Nome"
Set qdf = db.CreateQueryDef("qry_TempNomes", strSQL)
lstNomes.RowSource = "qry_TempNomes"
lstNomes.Requery
lstNomes = 0
qdf.Close
db.Close
End If

6) Como complemento, no evento "KeyDown" da "txtNome" insira:

If KeyCode = vbKeyEscape Then
txtNome = Null
lstNomes.RowSource = "tblContatos"
End If


Se tudo der certo, o usuário, ao digitar um único (ou um grupo de caracteres) irá "disparar" o código implementado no evento "Change", exibindo na listagem de "lstNomes" somente os nomes que iniciam-se pelo(s) caractere(s) digitado(s), com efeito similar ao arquivo de "Ajuda" do Windows e do próprio Access (do Office 97).
Não esqueça de adaptar o código para sua própria realidade, alterando os nomes dos componentes, campos, objetos, etc. do código acima e substituindo-os por aqueles que você está utilizando em seus BDs, do contrário ocorrerão erros.
Quanto a pesquisa por apelidos eu não me esqueci, mas primeiramente tente implementar essa solução; depois, se assim quiser, estabeleça novo contato para que eu revele a segunda parte da solução. Espero ter ajudado.

Abraços.

#3 Membro offline   andrea n. zorzeto Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 3
  • Cadastrado: 13-março 07

Postou 14 março 2007 - 09:50

Obrigada!,

vou tentar, te mantenho informado!

[]s

Andrea


Ver postSpiritwalker, em 14/03/2007 - 02:03, disse:

Prezada Andrea:

Para ser sincero, eu nunca havia efetuado uma conexão Access/Access antes. Parece-me que a maneira mais simples é seguir o roteiro abaixo:

1) Estando o seu BD2 aberto, clique no menu "Arquivo/Obter dados externos/Vincular tabelas";
2) Indique a localização do BD1 e o nome da tabela que contém o seu "cadastro principal" (para fins didáticos, estarei denominando-a de "tblNomes");
3) Ainda em seu BD2, crie um novo formulário contendo apenas uma caixa de texto (que chamarei de "txtNome") e, logo abaixo, uma caixa de listagem (denominada "lstNomes");
4) Acesse as "Propriedades" de sua caixa de listagem e indique a tabela "tblNomes" (que como sabemos encontra-se em BD1) como a "origem da linha" do componente em questão; especifique, também, o número de colunas e suas larguras de modo a exibir somente os campos que interessam aos usuários (com relativo destaque para o campo "Nome");
5) No evento "Change" da caixa de texto insira o código abaixo:

Dim db As Database
Dim qdf As QueryDef
Dim strSQL As String
Dim strNome As String

If IsNull(txtNome) Or txtNome = "" Then
Exit Sub
Else
Set db = CurrentDb
db.QueryDefs.Refresh
For Each qdf In db.QueryDefs
If qdf.Name = "qry_TempNomes" Then
db.QueryDefs.Delete qdf.Name
End If
Next qdf
strNome = txtNome.Text & "*"
strSQL = "SELECT * FROM tblNomes WHERE Nome Like '" & strNome & "' ORDER BY Nome"
Set qdf = db.CreateQueryDef("qry_TempNomes", strSQL)
lstNomes.RowSource = "qry_TempNomes"
lstNomes.Requery
lstNomes = 0
qdf.Close
db.Close
End If

6) Como complemento, no evento "KeyDown" da "txtNome" insira:

If KeyCode = vbKeyEscape Then
txtNome = Null
lstNomes.RowSource = "tblContatos"
End If


Se tudo der certo, o usuário, ao digitar um único (ou um grupo de caracteres) irá "disparar" o código implementado no evento "Change", exibindo na listagem de "lstNomes" somente os nomes que iniciam-se pelo(s) caractere(s) digitado(s), com efeito similar ao arquivo de "Ajuda" do Windows e do próprio Access (do Office 97).
Não esqueça de adaptar o código para sua própria realidade, alterando os nomes dos componentes, campos, objetos, etc. do código acima e substituindo-os por aqueles que você está utilizando em seus BDs, do contrário ocorrerão erros.
Quanto a pesquisa por apelidos eu não me esqueci, mas primeiramente tente implementar essa solução; depois, se assim quiser, estabeleça novo contato para que eu revele a segunda parte da solução. Espero ter ajudado.

Abraços.


#4 Membro offline   andrea n. zorzeto Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 3
  • Cadastrado: 13-março 07

Postou 15 março 2007 - 11:39

Amigo,

está dando erro "3075"

strSQL = "SELECT * FROM tblNomes WHERE Nome Like '" & strNome & "' ORDER BY Nome"
Set qdf = db.CreateQueryDef("qry_TempNomes", strSQL)

Pode me ajudar?

[]s

Andrea

#5 Membro offline   Spiritwalker Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 100
  • Cadastrado: 25-janeiro 07

Postou 15 março 2007 - 12:05

Prezada Andrea:

Além do CÓDIGO do erro (3075), qual a MENSAGEM do erro apresentada? É que não tenho a tabela dos códigos de erros e seus significados. Aguardo contato.

Abraços.

Página 1 de 1
  • Novo tópico
  • Responder

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)