SOMA EM FORMULARIO

DOUGLASGARCIA 05/12/2011 11:28:42
#390603
bom dia

to enfrentando o seguinte problema:

estou contruindo um sistema par controle de estoque no vb 6 com banco de dados em access e cheguei na parte em que presizo fazer calculos, tenho que fazer as seguintes somas nos dados abaixo:

codigo descrição nescessidade estoque lote saldo lotes total
50 porta 1700x295x15 marfim 100 50 40 -50 2 80

o calculo seria: nescessidade-estoque/lote +aredondamento

esse calculo tem que aparecer num formulario com msflexgrid ou listviem

fiz o calculo no proprio banco de dados mas tive que usar a formula NZ só que dai não aparece os dados no vb 6


qual seria a solução, tem como fazer o calculo no msflexgrid ou tirar este erro causado pela formula nz?

CHARLESTON10 05/12/2011 12:34:26
#390610
Como você preenche o ListView ?

Uma solução interessante é no momento que você preencher o listview, você já faz essa calculo puxando em uma rotina;

Exemplo:

Ultiliza uma variavel Private ao formulario declarada no General
Ela vai servir para guardar o resultado do calculo.

Dim Resultado As Currency


[ô]-> Agora eu crio um método para fazer o cálculo

Private Sub Calcular()
[ô]Abre tabela
sSQL = [Ô]SELECT * FROM suaTabela WHERE = 50 [Ô]
Tabela.Open sSQL, Conexao, adOpenDynamic, adLockOptimistic

[ô]A variavel resultado recebe o valor do calculo de acordo com os campos da sua tabela
With Tabela
Resultado = (!nescessidade - !Estoque) / (!Lote + !Arrendondamento)
End with

[ô]Fecha tabela
Tabela.Close
End Sub


Okey - Até o calculo já foi feito
Agora iremos mostrar esse resultado numa lista

 
Private Sub Listar()

[ô]Chama método para calcular
Call Calcular

[ô]Listar no listview
With Tabela
Set lst = Lista.ListItems.Add(, , .Fields([Ô]Codigo[Ô]))
lst.SubItems(1) = .Fields([Ô]Descricao[Ô])
lst.SubItems(2) = .Fields([Ô]Necessidade[Ô])
lst.SubItems(3) = .Fields([Ô]Estoque[Ô])
lst.SubItems(4) = .Fields([Ô]Lote[Ô])
lst.SubItems(5) = .Fields([Ô]Saldo[Ô])
lst.SubItems(6) = .Fields([Ô]Lotes[Ô])
lst.SubItems(7) = .Fields([Ô]Total[Ô])
lst.SubItems(8) = Resultado [ô]<- Na coluna 9 da lista aparece o resultado do calculo
End With
End Sub


Uma outra solução é fazer o cálculo já no preenchimento da Lista

[ô]-> Recomendo fazer essa abaixo.

Private sub Listar()
[ô]Abre tabela
sSQL = [Ô]SELECT * FROM suaTabela[Ô]
Tabela.Open sSQL, Conexao, adOpenDynamic, adLockOptimistic

[ô]Função que lista todos os registros cadastrado na lista
With Tabela
Do While Not .EOF
[ô]Listar
Set lst = Lista.ListItems.Add(, , .Fields([Ô]Codigo[Ô]))
lst.SubItems(1) = .Fields([Ô]Descricao[Ô])
lst.SubItems(2) = .Fields([Ô]Necessidade[Ô])
lst.SubItems(3) = .Fields([Ô]Estoque[Ô])
lst.SubItems(4) = .Fields([Ô]Lote[Ô])
lst.SubItems(5) = .Fields([Ô]Saldo[Ô])
lst.SubItems(6) = .Fields([Ô]Lotes[Ô])
lst.SubItems(7) = .Fields([Ô]Total[Ô])
lst.SubItems(8) = (!nescessidade - !Estoque) / (!Lote + !Arrendondamento) [ô]<- Na coluna 9 da lista aparece o resultado do calculo
.MoveNext
Loop
End With

Tabela.Close
End Sub



Espero ter ajudado
DOUGLASGARCIA 05/12/2011 16:41:49
#390645
fiz o seguinte codigo:

Private Sub Listar()
[ô]Abre tabela
cnSQL = [Ô]SELECT * FROM SALDO_GERAL[Ô]
nesc.Open cnSQL, roteiro, adOpenDynamic, adLockOptimistic

[ô]Função que lista todos os registros cadastrado na lista
With nesc
Do While Not .EOF
[ô]Listar
Set ListView1 = lista.ListItems.Add(, , .Fields([Ô]Coditem[Ô]))
ListView1.SubItems(1) = .Fields([Ô]Descricao[Ô])
ListView1.SubItems(2) = .Fields([Ô]situação[Ô])
ListView1.SubItems(3) = .Fields([Ô]TOTAL_MOVIMENTOS[Ô])

.MoveNext
Loop
End With

nesc.Close
End Sub


e deu o seguinte erro:
[Ô]method or data menber not foud[Ô]
CHARLESTON10 05/12/2011 17:30:25
#390650
O membro método ou dados que você tentou acessar não foi encontrada.
Algum campo que você tentou lista, não existe ou foi escrito incorretamente.

Posta os campos da sua tabela, aki[ô] pra gente verificar e ajustar

DOUGLASGARCIA 06/12/2011 08:36:28
#390671
modifiquei a forma de preencrer o listviem

ficou assim

Public Sub preenche_lista()

Lista.ListItems.Clear

If rs.RecordCount = 0 Then Exit Sub

While Not rs.EOF
Set lst = Lista.ListItems.Add(, , rs(0))

lst.SubItems(1) = rs([Ô]DescriÇÃO[Ô])
lst.SubItems(2) = rs([Ô]TOTAL_MOVIMENTOS[Ô])
lst.SubItems(3) = rs([Ô]lote_minimo[Ô])
lst.SubItems(4) = (!TOTAL_MOVIMENTOS + !lote_minimo)

rs.MoveNext
Wend

End Sub

esta aparecendo o seguinte erro:

[Ô]invalid or unqualified reference[Ô] no !TOTAL_MOVIMENTOS



CHARLESTON10 06/12/2011 09:02:59
#390672
Tente isso:



Public Sub preenche_lista()

Dim TMOvimento as Currency
Dim LoteMInimo as Currency

Lista.ListItems.Clear

If rs.RecordCount = 0 Then Exit Sub

While Not rs.EOF

TMOvimento = rs([Ô]TOTAL_MOVIMENTOS[Ô])
LoteMInimo = rs([Ô]lote_minimo[Ô])

Set lst = Lista.ListItems.Add(, , rs(0))
lst.SubItems(1) = rs([Ô]DescriÇÃO[Ô])
lst.SubItems(2) = rs([Ô]TOTAL_MOVIMENTOS[Ô])
lst.SubItems(3) = rs([Ô]lote_minimo[Ô])
lst.SubItems(4) = TMovimento - LoteMinimo
rs.MoveNext
Wend

End Sub


DOUGLASGARCIA 06/12/2011 14:09:05
#390695
beleza funcionou

mas tem outro probleminha

nem todos os campos tem valor, o campo que esta nulo dá erro

como prencher o listviem no lugar de nulo com 0 ?
CHARLESTON10 06/12/2011 19:44:28
#390738
Faz um tratamento de erro usando IF.
Se um dos campos da tabela estiver vazio atribui o valor de [ô]0[ô] nas variáveis

Public Sub preenche_lista()

Dim TMOvimento as Currency
Dim LoteMInimo as Currency

Lista.ListItems.Clear

If rs.RecordCount = 0 Then Exit Sub

While Not rs.EOF

TMOvimento = rs([Ô]TOTAL_MOVIMENTOS[Ô])
LoteMInimo = rs([Ô]lote_minimo[Ô])

[ô]-> tratamento de erro
If TMOvimento = Empty Then
TMOvimento = 0
End If
[ô]-> tratamento de erro
If LoteMInimo = Empty Then
LoteMInimo = 0
End If


Set lst = Lista.ListItems.Add(, , rs(0))
lst.SubItems(1) = rs([Ô]DescriÇÃO[Ô])
lst.SubItems(2) = rs([Ô]TOTAL_MOVIMENTOS[Ô])
lst.SubItems(3) = rs([Ô]lote_minimo[Ô])
lst.SubItems(4) = TMovimento - LoteMinimo
rs.MoveNext
Wend

End Sub
DOUGLASGARCIA 06/12/2011 19:58:31
#390741
deu erro aqui:

TMOvimento = rs([Ô]TOTAL_MOVIMENTOS[Ô])

invalid use of null
CHARLESTON10 06/12/2011 21:36:54
#390747
Teste isso...

Public Sub preenche_lista()

Dim TMOvimento as Currency
Dim LoteMInimo as Currency

Lista.ListItems.Clear

If rs.RecordCount = 0 Then Exit Sub

While Not rs.EOF

[ô]-> tratamento de erro
If rs([Ô]TOTAL_MOVIMENTOS[Ô]) = Empty Then
TMOvimento = 0
else
TMOvimento = rs([Ô]TOTAL_MOVIMENTOS[Ô])
End If

[ô]-> tratamento de erro
If rs([Ô]lote_minimo[Ô]) = Empty Then
LoteMInimo = 0
else
LoteMInimo = rs([Ô]lote_minimo[Ô])
End If


Set lst = Lista.ListItems.Add(, , rs(0))
lst.SubItems(1) = rs([Ô]DescriÇÃO[Ô])
lst.SubItems(2) = rs([Ô]TOTAL_MOVIMENTOS[Ô])
lst.SubItems(3) = rs([Ô]lote_minimo[Ô])
lst.SubItems(4) = TMovimento - LoteMinimo
rs.MoveNext
Wend

End Sub


DOUGLASGARCIA 07/12/2011 08:12:54
#390759
ainda da erro aqui:

else
TMOvimento = rs([Ô]TOTAL_MOVIMENTOS[Ô])
End If

invalid use of null
Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas