joaomachacas Posted April 6, 2013 at 10:18 AM Report #501933 Posted April 6, 2013 at 10:18 AM 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?
acao Posted April 6, 2013 at 01:13 PM Report #501952 Posted April 6, 2013 at 01:13 PM (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 April 6, 2013 at 01:59 PM by acao
joaomachacas Posted April 6, 2013 at 01:48 PM Author Report #501955 Posted April 6, 2013 at 01:48 PM (edited) boas pode ser com formulário desvinculado? vba? cumps acao Sim pode. Já agora eu quero que a pesquisa seja aplicado neste formulário. Pode ser ao clicar num botão ou escrevendo o NIF no campo NIF. http://imageshack.us/a/img13/1282/formulariol.png Edited April 6, 2013 at 02:01 PM by joaomachacas
acao Posted April 6, 2013 at 02:04 PM Report #501956 Posted April 6, 2013 at 02:04 PM 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
joaomachacas Posted April 6, 2013 at 02:26 PM Author Report #501957 Posted April 6, 2013 at 02:26 PM 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
acao Posted April 6, 2013 at 06:27 PM Report #501984 Posted April 6, 2013 at 06:27 PM (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 April 6, 2013 at 06:33 PM by acao
joaomachacas Posted April 8, 2013 at 07:25 PM Author Report #502228 Posted April 8, 2013 at 07:25 PM 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
ccc Posted July 5, 2013 at 09:28 PM Report #517405 Posted July 5, 2013 at 09:28 PM 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]
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now