Jump to content
joaomachacas

Pesquisar Clientes por dois critérios

Recommended Posts

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

http://img850.imageshack.us/img850/1600/clientea.png

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

Share this post


Link to post
Share on other 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

Edited by acao

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by acao

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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]

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.