none
Valores não retornam ao Form após calculo numa Sub em um Módulo RRS feed

  • Pergunta

  • Boa noite!

    Em Visual Studio 2010 sempre fiz conforme abaixo e sempre deu certo. Agora em VS 2013, nada retorna para o objeto no form. Acho que tem a ver com referência, mas não sei como fazer.        

            SqlConnMod.ConnectionString = "Data Source=" & Servidor & ";Initial Catalog=NomeBanco;User ID=sa;Password=123"
    
            SqlComMod.Connection = SqlConnMod
    
            SqlComMod.CommandText = "Select Sum(QUANT * PRECO_UNIT) As TotItens " _
                & "From VendaTemp Where VENDA_TEMP = 3"
    
            SqlDr = SqlComMod.ExecuteReader
    
            While SqlDr.Read
                With FrmVenda
                    If Not IsDBNull(SqlDr.Item("TotItens")) Then
                        .LblTotParcial.Text = Format(SqlDr.Item("TotItens"))
                    Else
                        .LblTotParcial.Text = "0,00"
                    End If
                End With
            End While
    
            SqlDr.Close()
    
            SqlConnMod.Close()
            SqlConnMod.Dispose()
            Return

    Explicando: O código acima fica dentro de uma Sub em um módulo. Ele pode ser chamado de vários forms. O resultado do Sum é inserido na label "LblTotParcial" que fica dentro do form FrmVenda.

    E é isso que não está funcionando. Nada retorna para a label.

    Agradeço a ajuda. 


    Pozzato


    • Editado Pozzato quinta-feira, 3 de dezembro de 2015 22:14
    quinta-feira, 3 de dezembro de 2015 22:13

Respostas

  • Pois então, Pozzato, programei muito pouco com VB.NET e nunca havia usado este "With FormX".

    Porém por padrão costumamos separar as camadas; o modelo de 3 camadas é bastante fácil de entender e bastante usado também; basicamente temos uma camada para acesso de dados (consultas ao banco de dados), uma camada para regras de negócio (lógica do sistema propriamente dito) e a camada de apresentação (form, webform, etc.).

    Aqui tem uns artigos sobre o assunto:

    LINK 1

    LINK 2

    LINK 3

    Edit: Aliás, é possível preencher um DataGridView saindo do método, sim.

    Instancie uma lista de objetos e use a propriedade "DataSource" da Grid com a lista de objetos/Datatable/etc..


    Att., Rafael Simor


    • Editado SimorC sexta-feira, 4 de dezembro de 2015 14:09
    • Marcado como Resposta Pozzato sexta-feira, 4 de dezembro de 2015 15:21
    sexta-feira, 4 de dezembro de 2015 14:07
  • Bom dia.

    Tente:

    SqlDr = SqlComMod.ExecuteReader()
    
    While SqlDr.Read()

    De qualquer forma, por que não jogar este total para uma variável e usá-la como valor de retorno do método?

    No próprio Form tu recebe o valor e muda a Label.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ sexta-feira, 4 de dezembro de 2015 13:33
    sexta-feira, 4 de dezembro de 2015 12:08

Todas as Respostas

  • Bom dia.

    Tente:

    SqlDr = SqlComMod.ExecuteReader()
    
    While SqlDr.Read()

    De qualquer forma, por que não jogar este total para uma variável e usá-la como valor de retorno do método?

    No próprio Form tu recebe o valor e muda a Label.


    Att., Rafael Simor

    • Marcado como Resposta Marcos SJ sexta-feira, 4 de dezembro de 2015 13:33
    sexta-feira, 4 de dezembro de 2015 12:08
  • Olá Rafael, bom dia!

    Obrigado pelo interesse em ajudar.

    Fiz a modificação que sugeriu (colocar os parênteses), mas não adiantou. Continuo sem receber o retorno.

    Sim, a solução da variável é viável, mas porque agora não funciona se sempre funcionou?

    Uso este método para fazer outras coisas também. Por exemplo, preencher um DataGridView.

    Da mesma forma que não coloca o valor na label, também não preenche o DataGridView. E neste caso, não tenho como usar variáveis.

    Muito estranho. Continuo achando que tem algo a ver com referência, mas não tenho muito conhecimento sobre isso.

    Inclusive, se souber de algum bom tutorial sobre o assunto, por favor, me indique.

    Obrigado!


    Pozzato

    sexta-feira, 4 de dezembro de 2015 13:57
  • Pois então, Pozzato, programei muito pouco com VB.NET e nunca havia usado este "With FormX".

    Porém por padrão costumamos separar as camadas; o modelo de 3 camadas é bastante fácil de entender e bastante usado também; basicamente temos uma camada para acesso de dados (consultas ao banco de dados), uma camada para regras de negócio (lógica do sistema propriamente dito) e a camada de apresentação (form, webform, etc.).

    Aqui tem uns artigos sobre o assunto:

    LINK 1

    LINK 2

    LINK 3

    Edit: Aliás, é possível preencher um DataGridView saindo do método, sim.

    Instancie uma lista de objetos e use a propriedade "DataSource" da Grid com a lista de objetos/Datatable/etc..


    Att., Rafael Simor


    • Editado SimorC sexta-feira, 4 de dezembro de 2015 14:09
    • Marcado como Resposta Pozzato sexta-feira, 4 de dezembro de 2015 15:21
    sexta-feira, 4 de dezembro de 2015 14:07
  • Muito obrigado Rafael!

    Vou estudar o assunto.

    Forte abraço!


    Pozzato

    sexta-feira, 4 de dezembro de 2015 15:17