PESQUISA DADOS EM 3 CAMADAS

 Tópico anterior Próximo tópico Novo tópico

PESQUISA DADOS EM 3 CAMADAS

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#494450 - 31/07/2020 16:11:01

ALMIROLIVEIRA20
BRASILIA
Cadast. em:Março/2020


Pessoal bom dia
Adiantando que resolvi seguir alguns conselhos e iniciei um curso de programação orientada a objeto (POO) porem, um pouco mais difícil e mais avancada.
Pois bem
estou realizando um cadastro de clientes que está sendo desenvolvido em 3 camdas, sendo a camada de Dados, Lógica de Negócios e a camada de apresentacao,
todo o cadastro já foi feito e está funcionando perfeitamente, no entanto me passaram como exercicio a realizacao de uma pesquisa por nome de cliente digitado em um textbox. até ai sem problemas, pois eu já consigo preencher o DGV com os dados do banco de dados. porem a pesquisa se tornou um pouco mais complexa e não estou conseguindo,
já tentei de todas as formas possíveis, mas sei que há algo errado, só não sei onde, se alguem puder me ajudar sem criticar, visto que estou aprendendo, fico grato. Segue os codigos
Código da camada de dados: ClienteDAO
Public Function PesquisarCliente(nome As String) As DataTable
        Dim leer As OleDbDataReader
        Dim tabela As DataTable = New DataTable
        Dim comando As OleDbCommand = New OleDbCommand
        Using connection = GetConnection()
            connection.Open()
            comando.Connection = connection
            comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)
            comando.CommandType = CommandType.Text
            leer = comando.ExecuteReader
            tabela.Load(leer)
            Return tabela
        End Using
    End Function

Codigo da camada de Negocios ClienteNEG: que eu penso estar errado, uma vez que uso este mesmo codigo para reencher o Grid com os dados completo dos clientes
Public Function Pesqcliente(nome As String) As DataTable
        Try
            Dim tabela As DataTable = New DataTable
            tabela = ClienteDAO.PesquisarAtendente(nome)
            Return tabela
        Catch ex As Exception
            Throw ex
        End Try
    End Function

Codio da camada Apresentação: ClienteAPP...
Aqui é que eu não consigo desenvolver.
Se fosse para apenas preencher o GRID com os dados, usaria apenas o DataSoure do GRID buscando a camada de Negõcios ClienteNeg
Ficaria assim para preencher o grid:
dgvClientes.Datasource = clienteNEG.PesqCliente
Mas como exercício, eu devo informar apenas o digitado no textBox: txtPesqCliente.text e carregar o DataGrid apenas com os nomes localizados de cordo com as letras digitadas no textbox.

Alguem poderia ajudar sem criticar o nivel de dificuldade em que eu fui me meter??
Obrigado.



#494451 - 31/07/2020 17:34:52

JABA
CABO FRIO
Cadast. em:Agosto/2005


comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)


Será que não é por que você declarou um parâmetro com letra minúscula e o outro com maiúscula? Corrija isso e veja se funciona.

_______________________________________________________________________________________________

Se a alma ou esprito so imateriais, como eles fazem para se localizar quando o corpo est em movimento?



#494452 - 31/07/2020 18:25:21

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 31/07/2020 18:32:51 por NOWLIGHTS

  dgvClientes.Datasource = clienteNEG.PesqCliente(txtPesqCliente.text)


Seria isso? no caso do método PesqCliente precisa de um parâmetro de entrada que no caso é o txtPesqCliente.text

Outra coisa, procure sobre List<t>, para preenche-lo ao invés de uma DataTable


__________________________________
- Everyone has a chance


#494453 - 01/08/2020 08:33:55

ALMIROLIVEIRA20
BRASILIA
Cadast. em:Março/2020


Citação:
:
comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)


Será que não é por que você declarou um parâmetro com letra minúscula e o outro com maiúscula? Corrija isso e veja se funciona.

Corrigi e não funcionou



#494454 - 01/08/2020 08:43:26

ALMIROLIVEIRA20
BRASILIA
Cadast. em:Março/2020


Citação:
:
  dgvClientes.Datasource = clienteNEG.PesqCliente(txtPesqCliente.text)


Seria isso? no caso do método PesqCliente precisa de um parâmetro de entrada que no caso é o txtPesqCliente.text

Outra coisa, procure sobre List<t>, para preenche-lo ao invés de uma DataTable


Refiz o codigo na camada de Apresentacao da seginte forma:

1
Private Sub PesquisaCliente()
dgvClientes.DataSource = clienteNEG.PesqCliente(nome:txtPesqCliente.text)

2
Private Sub PesquisaCliente()
dgvClientes.DataSource = clienteNEG.PesqCliente(txtPesqCliente.text)

3
Private Sub PesquisaCliente(nome as string)
dgvClientes.DataSource = clienteNEG.PesqCliente(nome)

ao chamar
1
PesquisaCliente()

2
PesquisaCliente()

3
PesquisaCliente(txtPesqCliente.text)

nenhuma das formas ele preencheu o grid com os dados digitado no textbox. na verdade ao digitar qqr coisa ele está limpando o grid.
Há algo que não estou conseguindo.

Sobre o list se tiver algum exemplo pra que eu possa ver como funciona, ficarei grato.






#494455 - 01/08/2020 09:51:33

COQUITO
BELO HORIZONTE
Cadast. em:Junho/2014


Citação:
:
Pessoal bom dia
Adiantando que resolvi seguir alguns conselhos e iniciei um curso de programação orientada a objeto (POO) porem, um pouco mais difícil e mais avancada.
Pois bem
estou realizando um cadastro de clientes que está sendo desenvolvido em 3 camdas, sendo a camada de Dados, Lógica de Negócios e a camada de apresentacao,
todo o cadastro já foi feito e está funcionando perfeitamente, no entanto me passaram como exercicio a realizacao de uma pesquisa por nome de cliente digitado em um textbox. até ai sem problemas, pois eu já consigo preencher o DGV com os dados do banco de dados. porem a pesquisa se tornou um pouco mais complexa e não estou conseguindo,
já tentei de todas as formas possíveis, mas sei que há algo errado, só não sei onde, se alguem puder me ajudar sem criticar, visto que estou aprendendo, fico grato. Segue os codigos
Código da camada de dados: ClienteDAO
Public Function PesquisarCliente(nome As String) As DataTable
        Dim leer As OleDbDataReader
        Dim tabela As DataTable = New DataTable
        Dim comando As OleDbCommand = New OleDbCommand
        Using connection = GetConnection()
            connection.Open()
            comando.Connection = connection
            comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)
            comando.CommandType = CommandType.Text
            leer = comando.ExecuteReader
            tabela.Load(leer)
            Return tabela
        End Using
    End Function

Codigo da camada de Negocios ClienteNEG: que eu penso estar errado, uma vez que uso este mesmo codigo para reencher o Grid com os dados completo dos clientes
Public Function Pesqcliente(nome As String) As DataTable
        Try
            Dim tabela As DataTable = New DataTable
            tabela = ClienteDAO.PesquisarAtendente(nome)
            Return tabela
        Catch ex As Exception
            Throw ex
        End Try
    End Function

Codio da camada Apresentação: ClienteAPP...
Aqui é que eu não consigo desenvolver.
Se fosse para apenas preencher o GRID com os dados, usaria apenas o DataSoure do GRID buscando a camada de Negõcios ClienteNeg
Ficaria assim para preencher o grid:
dgvClientes.Datasource = clienteNEG.PesqCliente
Mas como exercício, eu devo informar apenas o digitado no textBox: txtPesqCliente.text e carregar o DataGrid apenas com os nomes localizados de cordo com as letras digitadas no textbox.

Alguem poderia ajudar sem criticar o nivel de dificuldade em que eu fui me meter??
Obrigado.


Tudo o que vc faz na camada cliente, não precisa repetir na camada negócio, apenas na camada negócio faça um returno
É desde a camada apresentação chamada a camada negócio

Deus melhor amigo meu...


#494456 - 01/08/2020 10:13:11

COQUITO
BELO HORIZONTE
Cadast. em:Junho/2014


Citação:
:
Pessoal bom dia
Adiantando que resolvi seguir alguns conselhos e iniciei um curso de programação orientada a objeto (POO) porem, um pouco mais difícil e mais avancada.
Pois bem
estou realizando um cadastro de clientes que está sendo desenvolvido em 3 camdas, sendo a camada de Dados, Lógica de Negócios e a camada de apresentacao,
todo o cadastro já foi feito e está funcionando perfeitamente, no entanto me passaram como exercicio a realizacao de uma pesquisa por nome de cliente digitado em um textbox. até ai sem problemas, pois eu já consigo preencher o DGV com os dados do banco de dados. porem a pesquisa se tornou um pouco mais complexa e não estou conseguindo,
já tentei de todas as formas possíveis, mas sei que há algo errado, só não sei onde, se alguem puder me ajudar sem criticar, visto que estou aprendendo, fico grato. Segue os codigos
Código da camada de dados: ClienteDAO
Public Function PesquisarCliente(nome As String) As DataTable
        Dim leer As OleDbDataReader
        Dim tabela As DataTable = New DataTable
        Dim comando As OleDbCommand = New OleDbCommand
        Using connection = GetConnection()
            connection.Open()
            comando.Connection = connection
            comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)
            comando.CommandType = CommandType.Text
            leer = comando.ExecuteReader
            tabela.Load(leer)
            Return tabela
        End Using
    End Function

Codigo da camada de Negocios ClienteNEG: que eu penso estar errado, uma vez que uso este mesmo codigo para reencher o Grid com os dados completo dos clientes
Public Function Pesqcliente(nome As String) As DataTable
        Try
            Dim tabela As DataTable = New DataTable
            tabela = ClienteDAO.PesquisarAtendente(nome)
            Return tabela
        Catch ex As Exception
            Throw ex
        End Try
    End Function

Codio da camada Apresentação: ClienteAPP...
Aqui é que eu não consigo desenvolver.
Se fosse para apenas preencher o GRID com os dados, usaria apenas o DataSoure do GRID buscando a camada de Negõcios ClienteNeg
Ficaria assim para preencher o grid:
dgvClientes.Datasource = clienteNEG.PesqCliente
Mas como exercício, eu devo informar apenas o digitado no textBox: txtPesqCliente.text e carregar o DataGrid apenas com os nomes localizados de cordo com as letras digitadas no textbox.

Alguem poderia ajudar sem criticar o nivel de dificuldade em que eu fui me meter??
Obrigado.


Tudo o que vc faz na camada cliente, não precisa repetir na camada negócio, apenas na camada negócio faça um returno
É desde a camada apresentação chamada a camada negócio

Deus melhor amigo meu...


#494457 - 01/08/2020 13:53:49

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 01/08/2020 13:55:58 por NOWLIGHTS

Citação:
  Sobre o list se tiver algum exemplo pra que eu possa ver como funciona, ficarei grato.

https://projetoprogramacao.blogspot.com/2017/10/utilizar-pooprograma-orientado-objetos.html



Citação:
  1
Private Sub PesquisaCliente()
dgvClientes.DataSource = clienteNEG.PesqCliente(nome:txtPesqCliente.text)

2
Private Sub PesquisaCliente()
dgvClientes.DataSource = clienteNEG.PesqCliente(txtPesqCliente.text)

3
Private Sub PesquisaCliente(nome as string)
dgvClientes.DataSource = clienteNEG.PesqCliente(nome)


Neste caso, vc usou 3 métodos iguais...

Cada camada tem uma Função, um exemplo de como fazer atravéz de List<t>

Voce precisa, necessariamente, criar classes de Propriedades, ex.

Public Class Usuario(){
   Public int Id {get;set;}
   Public string Nome {get;set;}
}


Camada DAL (Data Acess Layer/Camada de acesso a dados)

  
Classe Usuario_DAL:
Public Function PesquisarCliente(nome As String) As List(Of Usuario)
        Dim leer As OleDbDataReader      
        Dim comando As OleDbCommand = New OleDbCommand
        Dim User As Usuario = New Usuario
        Using connection = GetConnection()
            connection.Open()
            comando.Connection = connection
            comando.CommandText = ('SELECT * From tab_Atendentes Where nome = @NomeCliente')
            comando.Parameters.AddWithValue('@nomeCliente', nome)
Using Ler As MySqlDataReader = comando.ExecuteReader()  
             While Ler.Read()  
                                  User.Add(New Usuario(Ler.Item('Id'), Ler.Item('Nome')))  
                          End While  
            Return User
          End Using
        End Using
    End Function

  



Camada BLL (Business Logic Layer/Camada de Negociação Lógica)
Classe Usuario_BLL

Public Function PesquisarCliente_BLL(nome As String) As List(Of Usuario)
      Dim getCliente_DAL As Usuario_DAL = New Usuario_DAL
      Return getCliente_DAL(nome)
End Function



Camada UI (User Interface/Interface do Usuário/Windows Forms)


Public Button1_Click(sender As Object, e As EventArgs)
    Dim getCliente_BLL As Usuario_BLL = New Usuario_BLL
    Dim BuscarLista As List(Of Usuario) = getCliente_BLL(txtPesqCli.text)

    For Each i As Usuario In BuscarLista ' Aqui percorremos a List<t> buscada
         DataGridView1.Rows.Add(i.Id, i.Nome)
    Next

End Sub



Eu fiz pelo VB aqui, só para ter uma noçao..... PS. Camada DAL não acesso a nenhuma outra camada principalmente com a UI.


__________________________________
- Everyone has a chance


#494460 - 01/08/2020 20:14:42

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Vendo seu código, não parece OOP mesmo, você simplesmente separou em camadas e ainda assim está bem bagunçado. Divisão de responsabilidades é o mínimo do mínimo que se espera de um desenvolvedor júnior.
Acho que você vai ter que voltar a esttudar melhor os conceitos do que está querendo. O NOWLIGHTS deu uma boa sugestão de algo simples mas funcional e realmente OOP.
Não sei qual o objetivo do que está fazendo, se para estudos ou para algo mais profissional(vendável). Mas esse trabalho todo de acesso à banco e mapeamento de objetos você pode delegar à um ORM como o Dapper ou Entity Framework. Assim você já teria essa parte de acesso à tabelas coberto e seria uma preocupação à menos.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#494466 - 02/08/2020 19:50:44

ALMIROLIVEIRA20
BRASILIA
Cadast. em:Março/2020


Desculpe, mas o intuito é realmente de aprendizagem e sim, o projeto está orientado a objeto, sendo o projeto de acesso a dados, projeto de negocios e projeto de apresentacao, são tres projetos distintos. como disse, o intuito é, por enquanto, de aprendizagem mesmo. Seguindo, inclusive, dicas e orientacoes de colegas aqui do forum.
o codigo do projeto de acesso a dados, ficou da seguinte forma funcionável também, pois analisei os codigos e conegui resolver, não parametrizando, mas usando a string SQL padrão tal como:
Projeto de Acesso a DAdos
Public Function PesquisarAtendentes(Valor As String) As DataTable
        Dim leer As OleDbDataReader
        Dim tabela As DataTable = New DataTable
        Dim comando As OleDbCommand = New OleDbCommand
        Using connection = GetConnection()
            connection.Open()
            comando.Connection = connection
            comando.CommandText = ('SELECT * From tab_Atendentes where nome like '%' & Valor & '%'')
            comando.CommandType = CommandType.Text
            leer = comando.ExecuteReader
            tabela.Load(leer)
            Return tabela
        End Using
    End Function

Projeto da Camada de Negócios ou Domínio, como queira:
Public Function PesqAtendente(Valor As String) As DataTable
        Try
            Dim tabela As DataTable = New DataTable
            tabela = AtendenteDao.PesquisarAtendentes(Valor)
            Return tabela
        Catch ex As Exception
            Throw ex
        End Try
    End Function

e
Projeto da Camada de apresentação, WindowsForm
Private Sub PesquisaAtendente()

        dgvAtendentes.DataSource = AtendenteModel.PesqAtendente(txtNomePesq.Text)
        'FormataDataGridView()

    End Sub

Os tres projetos distintos e funcionáveis, a parte que faltava para a pesquisa por nome digitado está funcionando da forma apresentada.

Mesmo assim, muito obrigado por sua orientação e se tiver material para que eu possa exercitar e puder disponibilizar, pois penso grande e não penso em desistir.
Por enquanto é realmente aprendizagem.






#494467 - 03/08/2020 07:23:48

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Tenho uma série de vídeos que fiz no youtube mostrando OOP, mais ou menos como você está fazendo. Mas tanto lá quanto aqui, deixo claro que projetos artesanais assim, não são uma boa alternativa é mais pelo aprendizado mesmo.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário