Usuário com melhor resposta
Valores não retornam ao Form após calculo numa Sub em um Módulo

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
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:
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
-
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
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
-
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
-
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:
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
-