Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

joaomachacas

Pesquisar Clientes por dois critérios

Mensagens Recomendadas

joaomachacas

Bom dia.

Estou a desenvolver um projecto para avaliação em Access.

O projecto consiste num sistema de gestão (faturação) para um restaurante.

Eu queria implementar uma funcionalidade que me permitisse pesquisar um cliente pelo NIF e/ou pelo nome.

Se for para pesquisar só pelo nome consigo fazer criando assistente de pesquisa, mas depois não consigo pesquisar pelo NIF de forma a dar-me os dados do cliente correspondente.

Esta é a estrutura da tabela Clientes

clientea.png

Alguém sabe alguma forma de resolver esta situação?

Editado por joaomachacas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

pode ser com formulário desvinculado? vba?

já agora:

os campos contacto e nif deveriam ser numero

sugestão: derivado a confusão de nomes dos campos eu costumo utilizar idêntico ao IdClientes, não é obrigatório mas sei sempre a que tabela o campo pertence ex:« NomeCliente ».

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

sabes alguma coisa de vba ou queres um exemplo completo?

logo que me seja possível e de acordo com a tua resposta coloco aqui a ajuda.

cumps

acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
joaomachacas

boas

sabes alguma coisa de vba ou queres um exemplo completo?

logo que me seja possível e de acordo com a tua resposta coloco aqui a ajuda.

cumps

acao

Pesco muito pouco de vba. E tudo o que sei foram códigos que fui ver como se faziam.

Se me deres um exemplo completo eu estudo-o e adapto

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
acao

boas

para utilizar este código tem que adicionar a referencia <Microsoft ActiveX data objects 6.1 Library» a referencia com o maior valor no meu caso e a 6.1.

va à aba TOOLS, selecione referencias e escolha a indicada.

Private Sub cmdConsultarPorNomeOuNif_Click()
Dim vNome, vNif As String
txtNomeCliente.SetFocus
vNome = txtNomeCliente.Text
txtNifCliente.SetFocus
vNif = txtNifCliente.Text
If Trim(vNome) <> "" And Trim(vNif) <> "" Then
MsgBox ("os campos nomecliente e nifCliente ambos tem dados," & vbCrLf & "apague os dados num dos campos")
ElseIf Trim(vNome) = "" And Trim(vNif) = "" Then
MsgBox ("Preencha o campo NomeCliente ou NifCliente")
Else
Dim Comd As New ADODB.Command
Dim rst As New ADODB.Recordset
Comd.ActiveConnection = CurrentProject.Connection
If Trim(vNome) <> "" And Trim(vNif) = "" Then
	Comd.CommandText = "SELECT *FROM Clientes where NomeCliente = '" & vNome & "';"
ElseIf Trim(vNome) = "" And Trim(vNif) <> "" Then
	Comd.CommandText = "SELECT *FROM Clientes where NifCliente = " & vNif & ";"
End If
Comd.CommandType = adCmdText: Set rst = Comd.Execute
With rst
If .EOF And .BOF Then
	'Se o recordset está vazio, não retornou registro com esse código:
	'LimparDados
	MsgBox ("não Há registo com os parametros inseridos" & vbCrLf & _
	"NomeCliente = " & vNome & vbCrLf & _
	"NifCliente = " & vNif)
Else
	txtNomeCliente.SetFocus
	txtNomeCliente.Text = Empty & !NomeCliente 'o empty serve para eliminar o erro se o valor for nulo.
	txtContactoCliente.SetFocus
	txtContactoCliente.Text = Empty & !ContactoCliente ' senão utilizassemos o comando With seria assim « txtContactoCliente.Text = Empty & rst!ContactoCliente»
	txtMoradaCliente.SetFocus
	txtMoradaCliente.Text = Empty & !MoradaCliente
	txtNifCliente.SetFocus
	txtNifCliente.Text = Empty & !NifCliente
End If
End With
Comd.Cancel
Set rst = Nothing
Set Comd = Nothing
End If
End Sub

cumps

acao

Editado por acao

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
joaomachacas

boas

para utilizar este código tem que adicionar a referencia <Microsoft ActiveX data objects 6.1 Library» a referencia com o maior valor no meu caso e a 6.1.

va à aba TOOLS, selecione referencias e escolha a indicada.

Private Sub cmdConsultarPorNomeOuNif_Click()
Dim vNome, vNif As String
txtNomeCliente.SetFocus
vNome = txtNomeCliente.Text
txtNifCliente.SetFocus
vNif = txtNifCliente.Text
If Trim(vNome) <> "" And Trim(vNif) <> "" Then
MsgBox ("os campos nomecliente e nifCliente ambos tem dados," & vbCrLf & "apague os dados num dos campos")
ElseIf Trim(vNome) = "" And Trim(vNif) = "" Then
MsgBox ("Preencha o campo NomeCliente ou NifCliente")
Else
Dim Comd As New ADODB.Command
Dim rst As New ADODB.Recordset
Comd.ActiveConnection = CurrentProject.Connection
If Trim(vNome) <> "" And Trim(vNif) = "" Then
	Comd.CommandText = "SELECT *FROM Clientes where NomeCliente = '" & vNome & "';"
ElseIf Trim(vNome) = "" And Trim(vNif) <> "" Then
	Comd.CommandText = "SELECT *FROM Clientes where NifCliente = " & vNif & ";"
End If
Comd.CommandType = adCmdText: Set rst = Comd.Execute
With rst
If .EOF And .BOF Then
	'Se o recordset está vazio, não retornou registro com esse código:
	'LimparDados
	MsgBox ("não Há registo com os parametros inseridos" & vbCrLf & _
	"NomeCliente = " & vNome & vbCrLf & _
	"NifCliente = " & vNif)
Else
	txtNomeCliente.SetFocus
	txtNomeCliente.Text = Empty & !NomeCliente 'o empty serve para eliminar o erro se o valor for nulo.
	txtContactoCliente.SetFocus
	txtContactoCliente.Text = Empty & !ContactoCliente ' senão utilizassemos o comando With seria assim « txtContactoCliente.Text = Empty & rst!ContactoCliente»
	txtMoradaCliente.SetFocus
	txtMoradaCliente.Text = Empty & !MoradaCliente
	txtNifCliente.SetFocus
	txtNifCliente.Text = Empty & !NifCliente
End If
End With
Comd.Cancel
Set rst = Nothing
Set Comd = Nothing
End If
End Sub

cumps

acao

Após as adaptações necessárias, funcionou! :)

Obrigado pela ajuda :thumbsup:

Abraços,

joaomachacas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ccc

Para pesquisar os dados do cliente fazendo a busca por numero de contribuinte, acho que poderas ir para o registo desse cliente assim:

- Cria controlo desvinculato onde vais inserir o numero de contribuinte (txtMeuControlo)

- no evento after Update do controlo

Me.RecordsetClone.FindFirst "[Contribuinte] = " & Me![txtMeuControlo]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.