Jump to content

Recommended Posts

Posted

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?

Posted (edited)

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
Posted

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

Posted (edited)

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
Posted

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 👍

Abraços,

joaomachacas

  • 2 months later...
Posted

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]

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.