ATUALIZAR LISTVIEW

USUARIO.EXCLUIDOS 19/04/2007 12:35:06
#212729
Galera ja olhei dezenas de atualizações para listView mesmo assim não consigo atualizar a minha, desculpe me a persistencia no topico.

quando o último campo perde o foco ele deveria atualizar a listview. o que esta ocorrendo e que ele so atualiza na segunda tentativa, tipo lanço todos os dados e nada, quando acabo de lançar outro item ele atualiza o anterior. segue o código para melhor visualização:

Private Sub txtQtde_LostFocus()
Dim Total As Currency
Dim cnnComando As New ADODB.Command
Dim Time As Date

'On Error GoTo ErrSAlvar

Time = Date
'
Total = Format(Total, "###,##0.00")
Total = Me.txtPreco
Me.txtSubTotal = Me.txtQtde * Total
Me.txtSubTotal.Text = Format(Me.txtSubTotal, "###,##0.00")

Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnObjetivo
.CommandType = adCmdText
.CommandText = "Insert into tblVenda " & " (CodigoCliente, CodigoProduto, Qtde, Preco, Subtotal)Values('" & Me.txtCodigoCLiente.Text & "'," & "'" & Me.txtCodigoProduto.Text & "'," & "'" & Me.txtQtde.Text & "'," & "'" & Me.txtPreco.Text & "'," & "'" & Me.txtSubTotal.Text & "')"
.Execute
End With
Limpa
ListaVenda.ListItems.Clear
preenche_lista
ListaVenda.Refresh
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing


ErrSAlvar:
With Err
If .Number <> 0 Then
MsgBox " Produto e ou cliente inexistente, verifique.", , "Objetivo"
.Number = 0
GoTo Saida
End If
End With


End Sub



Desde já agradeço pela tempo concedido.
DANIELCPAETE 19/04/2007 12:41:27
#212732
Resposta escolhida
são muitos dados cara ?

tenta utilizar esta api

Private Declare Function LockWindowUpdate Lib "user32.dll" _
(ByVal hWndLock As Long) As Long


Private Sub txtQtde_LostFocus()
Dim Total As Currency
Dim cnnComando As New ADODB.Command
Dim Time As Date

'On Error GoTo ErrSAlvar

Time = Date
'
Total = Format(Total, "###,##0.00")
Total = Me.txtPreco
Me.txtSubTotal = Me.txtQtde * Total
Me.txtSubTotal.Text = Format(Me.txtSubTotal, "###,##0.00")

Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnObjetivo
.CommandType = adCmdText
.CommandText = "Insert into tblVenda " & " (CodigoCliente, CodigoProduto, Qtde, Preco, Subtotal)Values('" & Me.txtCodigoCLiente.Text & "'," & "'" & Me.txtCodigoProduto.Text & "'," & "'" & Me.txtQtde.Text & "'," & "'" & Me.txtPreco.Text & "'," & "'" & Me.txtSubTotal.Text & "')"
.Execute
End With
Limpa
ListaVenda.ListItems.Clear
LockWindowUpdate ListaVenda.hwnd
preenche_lista
ListaVenda.Refresh
LockWindowUpdate 0

Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing


ErrSAlvar:
With Err
If .Number <> 0 Then
MsgBox " Produto e ou cliente inexistente, verifique.", , "Objetivo"
.Number = 0
GoTo Saida
End If
End With


End Sub

USUARIO.EXCLUIDOS 19/04/2007 12:52:42
#212735
Daniel,
obrigado pela ajuda, mas eu não estou sabendo como usa-lo. poderia me informar mais sobre esta solução
DANIELCPAETE 19/04/2007 13:01:42
#212737
voce precisa declarar a api no inicio do projeto

esta api vai congelar o list e liberar ele somente depois do termino do processo
USUARIO.EXCLUIDOS 19/04/2007 13:27:42
#212741
Daniel,
Sou iniciante em programação e continuo ñ entendendo.
esta api e private logo devo coloca-la no frm que esta ativo. mas ela me retorna uma instrução de erro.
eu a declarei como public e a coloquei em um modulo.bas
e ela continuou com o mesmo problema supra citado "quando o último campo perde o foco ele deveria atualizar a listview. o que esta ocorrendo e que ele so atualiza na segunda tentativa, tipo lanço todos os dados e nada, quando acabo de lançar outro item ele atualiza o anterior"
DANIELCPAETE 19/04/2007 14:27:48
#212760
coloca a sua rotina de preenche_lista aqui pra dar uma olhada
USUARIO.EXCLUIDOS 19/04/2007 15:52:03
#212805
Private Sub preenche_lista()

vValor1 = 0
Me.ListaVenda.ListItems.Clear
scnn = cnnObjetivo
Set rst = New Recordset
rst.Open "Select *from tblVenda Where Fechado = 0 ", scnn, adOpenForwardOnly, adLockReadOnly
Do Until rst.EOF
Set NewList = ListaVenda.ListItems.Add(, " Key " & rst("Codigo"), rst("Codigo"))
NewList.SubItems(1) = "" & rst("CodigoCliente")
NewList.SubItems(2) = "" & rst("CodigoProduto")
NewList.SubItems(3) = "" & rst("Qtde")
NewList.SubItems(4) = "" & rst("Preco")
NewList.SubItems(5) = "" & rst("SubTotal")
'NewList.SubItems(4) = Format(!Preco, "Currency")
'NewList.SubItems(5) = Format(!Subtotal, "Currency")
vValor1 = (vValor1 + rst!Subtotal)
Me.txtTotal.Text = Format(vValor1, "Currency")
Me.txtTotal.Enabled = False
rst.MoveNext
Loop
rst.Requery 1
rst.Close
Set rst = Nothing
End Sub

Daniel esta e a rotina para preencher a lista lembrando que quando eu abro o frm eu preencho ela.
DANIELCPAETE 19/04/2007 17:44:39
#212837
bom faz assim cara adiciona um DoEvents logo após o Do Until e coloca essa na primeira linha do seu form_load coloca o codigo me.show no topo do projeto coloca essa declaração de API

Private Declare Function LockWindowUpdate Lib "user32.dll" (ByVal hWndLock As Long) As Long


e troca sua rotina do preenche lista para

Private Sub preenche_lista()
LockWindowUpdate ListaVenda.hwnd
vValor1 = 0
Me.ListaVenda.ListItems.Clear
scnn = cnnObjetivo
Set rst = New Recordset
rst.Open "Select *from tblVenda Where Fechado = 0 ", scnn, adOpenForwardOnly, adLockReadOnly
Do Until rst.EOF
Set NewList = ListaVenda.ListItems.Add(, " Key " & rst("Codigo"), rst("Codigo"))
NewList.SubItems(1) = "" & rst("CodigoCliente")
NewList.SubItems(2) = "" & rst("CodigoProduto")
NewList.SubItems(3) = "" & rst("Qtde")
NewList.SubItems(4) = "" & rst("Preco")
NewList.SubItems(5) = "" & rst("SubTotal")
'NewList.SubItems(4) = Format(!Preco, "Currency")
'NewList.SubItems(5) = Format(!Subtotal, "Currency")
vValor1 = (vValor1 + rst!Subtotal)
Me.txtTotal.Text = Format(vValor1, "Currency")
Me.txtTotal.Enabled = False
rst.MoveNext
Loop
rst.Requery 1
rst.Close
Set rst = Nothing
LockWindowUpdate 0
End Sub


USUARIO.EXCLUIDOS 20/04/2007 08:45:32
#212884
continua o mesmo problema.
USUARIO.EXCLUIDOS 20/04/2007 09:18:17
#212890
CHSTDRK, faz o seguinte, primeira pergunta, este campo fechado, quando vc insere ele realmente esta como 0 ?

segundo: tente usar while e na until , segue abaixo

while not rst.EOF
Set NewList = ListaVenda.ListItems.Add(, " Key " &
rst("Codigo"), rst("Codigo"))
NewList.SubItems(1) = "" & rst("CodigoCliente")
NewList.SubItems(2) = "" & rst("CodigoProduto")
NewList.SubItems(3) = "" & rst("Qtde")
NewList.SubItems(4) = "" & rst("Preco")
NewList.SubItems(5) = "" & rst("SubTotal")
vValor1 = (vValor1 + rst!Subtotal)
Me.txtTotal.Text = Format(vValor1, "Currency")
Me.txtTotal.Enabled = False
rst.MoveNext
wend


USUARIO.EXCLUIDOS 20/04/2007 09:21:40
#212891
outra coisa, se nao der certo tente a abrir o recordset assim:

rst.Open "Select *from tblVenda Where Fechado = 0", cn, adOpenStatic, adLockOptimistic

e nao assim

rst.Open "Select *from tblVenda Where Fechado = 0 ", scnn, adOpenForwardOnly, adLockReadOnly


Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas