PROBLEMAS EM ATUALIZAR O MSFLEXGRID
Olá Pessoal Tudo bem, sou novo aqui no vbmania e tambem sou novato em vb, tenho um aplicativo para abertura de ordem de serviços, está tudo ok na hora de abrir a ordem de serviços, só tenho problemas na hora de incluir os produto, uso o componente msflexgrid e uso uma instrução sql pra preencher ele.
segue rotina de preenchimento
[txt-color=#0000f0]Public Sub MontarListaos()
Dim RS As New ADODB.Recordset
Dim SQL As String
Dim Criterio As String
Dim valor As Currency
grdpesquisa.TextMatrix(0, 0) = [Ô]Cod_Produto[Ô]
grdpesquisa.TextMatrix(0, 1) = [Ô]Cod Prod[Ô]
grdpesquisa.TextMatrix(0, 2) = [Ô]Produto[Ô]
grdpesquisa.TextMatrix(0, 3) = [Ô]V.Unitário[Ô]
grdpesquisa.TextMatrix(0, 4) = [Ô]Qtde[Ô]
grdpesquisa.TextMatrix(0, 5) = [Ô]Sub Total[Ô]
Limpaos
Criterio = Chr$(39) & txtcodos & Chr(39)
SQL = [Ô]SELECT CodCliente, Cod_Produto, Produto, Format (Valor_Venda, [ô]R$ ##,#0.00[ô]), Qtde, Format(valor_Total,[ô]R$ ##,#0.00[ô])FROM Os_Produto WHERE Os_Produto.Numero_Os Like [Ô] & Criterio & [Ô] ORDER BY Numero_Os[Ô]
On Error Resume Next
With RS
.Open SQL, cnSQL, adOpenForwardOnly, adLockReadOnly
If .EOF Then
Limpaos
grdpesquisa.TextMatrix(1, 1) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 2) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 3) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 4) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 5) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 6) = [Ô][Ô]
Else
Limpaos
Do Until .EOF
grdpesquisa.AddItem RS(0) & vbTab & RS(1) & vbTab & RS(2) & vbTab & RS(3) & vbTab & RS(4) & vbTab & RS(5)
.MoveNext
Loop
grdpesquisa.RemoveItem 1
End If
.Close
End With
End Sub[/txt-color]
--- Essa rotina eu uso no evento dblclick de outro msflexgrid que funciona bem.
só que quando vou adicionar os produtos eu uso outro form com essa rotina
[txt-color=#e80000]Private Sub cmdSalvar_Click()
GravaDados
somarflexgrid
cmdSalvar.Enabled = False
txtCodCliente.Text = [Ô][Ô]
txtdescricao.Text = [Ô][Ô]
txtvalordevenda.Text = [Ô][Ô]
txtqtde.Text = [Ô][Ô]
txttotal.Text = [Ô][Ô]
End Sub
Private Sub GravaDados()
Dim adCmdPaciente As New ADODB.Command
Dim CodCliente As Long
CodCliente = Val(txtcod.Text)
With adCmdPaciente
Set .ActiveConnection = cnSQL
.CommandType = adCmdText
.Prepared = True
If CodCliente > 0 Then
.CommandText = [Ô]UPDATE Os_Produto set Cod_Produto = ?, Numero_Os = ?, Produto = ?, Valor_Venda = ?, Qtde = ?, Valor_Total = ? Where CodCliente = [Ô] & CodCliente
.Parameters.Append .CreateParameter([Ô]Cod_Produto[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Numero_Os[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Produto[Ô], adVarChar, adParamInput, 80)
.Parameters.Append .CreateParameter([Ô]Valor_Venda[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Qtde[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Valor_Total[Ô], adVarChar, adParamInput, 10)
.Parameters([Ô]Cod_Produto[Ô]) = txtCodCliente.Text
.Parameters([Ô]Numero_Os[Ô]) = frmordemdeservico.txtcodos.Text
.Parameters([Ô]Produto[Ô]) = txtdescricao.Text
.Parameters([Ô]Valor_Venda[Ô]) = txtvalordevenda.Text
.Parameters([Ô]Qtde[Ô]) = txtqtde.Text
.Parameters([Ô]Valor_Total[Ô]) = txttotal.Text
.Execute
If Err.Number <> 0 Then
MostraErro
End If
Else
.CommandText = [Ô]INSERT INTO Os_Produto (Cod_Produto, Numero_Os, Produto, Valor_Venda, Qtde, Valor_Total) Values (?, ?, ?, ?, ?, ?)[Ô]
.Parameters.Append .CreateParameter([Ô]Cod_Produto[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Numero_Os[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Produto[Ô], adVarChar, adParamInput, 80)
.Parameters.Append .CreateParameter([Ô]Valor_Venda[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Qtde[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Valor_Total[Ô], adVarChar, adParamInput, 10)
.Parameters([Ô]Cod_Produto[Ô]) = txtCodCliente.Text
.Parameters([Ô]Numero_Os[Ô]) = frmordemdeservico.txtcodos.Text
.Parameters([Ô]Produto[Ô]) = txtdescricao.Text
.Parameters([Ô]Valor_Venda[Ô]) = txtvalordevenda.Text
.Parameters([Ô]Qtde[Ô]) = txtqtde.Text
.Parameters([Ô]Valor_Total[Ô]) = txttotal.Text
.Execute
If Err.Number <> 0 Then
MostraErro
End If
End If
End With
txtCodCliente.Text = [Ô][Ô]
txtdescricao.Text = [Ô][Ô]
txtvalordevenda.Text = [Ô][Ô]
txtqtde.Text = [Ô][Ô]
txttotal.Text = [Ô][Ô]
End Sub[/txt-color]
--- como vocês puderam ver eu gravo direto os dados no bd e depois chamos eles de volta para o msflexgrid, mais isso não acontece o comando msflexgrid.refresh não funciona, e se eu tentar carregar ele desse jeito de novo (função mostradadosos) ele repete um monte de registros.
ou alguem sabe um jeito de passar os dados do textbox para o msflexgrid? se souberem eu posso criar uma rotina pra ele grava depois.
socorro o que eu faço????
segue rotina de preenchimento
[txt-color=#0000f0]Public Sub MontarListaos()
Dim RS As New ADODB.Recordset
Dim SQL As String
Dim Criterio As String
Dim valor As Currency
grdpesquisa.TextMatrix(0, 0) = [Ô]Cod_Produto[Ô]
grdpesquisa.TextMatrix(0, 1) = [Ô]Cod Prod[Ô]
grdpesquisa.TextMatrix(0, 2) = [Ô]Produto[Ô]
grdpesquisa.TextMatrix(0, 3) = [Ô]V.Unitário[Ô]
grdpesquisa.TextMatrix(0, 4) = [Ô]Qtde[Ô]
grdpesquisa.TextMatrix(0, 5) = [Ô]Sub Total[Ô]
Limpaos
Criterio = Chr$(39) & txtcodos & Chr(39)
SQL = [Ô]SELECT CodCliente, Cod_Produto, Produto, Format (Valor_Venda, [ô]R$ ##,#0.00[ô]), Qtde, Format(valor_Total,[ô]R$ ##,#0.00[ô])FROM Os_Produto WHERE Os_Produto.Numero_Os Like [Ô] & Criterio & [Ô] ORDER BY Numero_Os[Ô]
On Error Resume Next
With RS
.Open SQL, cnSQL, adOpenForwardOnly, adLockReadOnly
If .EOF Then
Limpaos
grdpesquisa.TextMatrix(1, 1) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 2) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 3) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 4) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 5) = [Ô][Ô]
grdpesquisa.TextMatrix(1, 6) = [Ô][Ô]
Else
Limpaos
Do Until .EOF
grdpesquisa.AddItem RS(0) & vbTab & RS(1) & vbTab & RS(2) & vbTab & RS(3) & vbTab & RS(4) & vbTab & RS(5)
.MoveNext
Loop
grdpesquisa.RemoveItem 1
End If
.Close
End With
End Sub[/txt-color]
--- Essa rotina eu uso no evento dblclick de outro msflexgrid que funciona bem.
só que quando vou adicionar os produtos eu uso outro form com essa rotina
[txt-color=#e80000]Private Sub cmdSalvar_Click()
GravaDados
somarflexgrid
cmdSalvar.Enabled = False
txtCodCliente.Text = [Ô][Ô]
txtdescricao.Text = [Ô][Ô]
txtvalordevenda.Text = [Ô][Ô]
txtqtde.Text = [Ô][Ô]
txttotal.Text = [Ô][Ô]
End Sub
Private Sub GravaDados()
Dim adCmdPaciente As New ADODB.Command
Dim CodCliente As Long
CodCliente = Val(txtcod.Text)
With adCmdPaciente
Set .ActiveConnection = cnSQL
.CommandType = adCmdText
.Prepared = True
If CodCliente > 0 Then
.CommandText = [Ô]UPDATE Os_Produto set Cod_Produto = ?, Numero_Os = ?, Produto = ?, Valor_Venda = ?, Qtde = ?, Valor_Total = ? Where CodCliente = [Ô] & CodCliente
.Parameters.Append .CreateParameter([Ô]Cod_Produto[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Numero_Os[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Produto[Ô], adVarChar, adParamInput, 80)
.Parameters.Append .CreateParameter([Ô]Valor_Venda[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Qtde[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Valor_Total[Ô], adVarChar, adParamInput, 10)
.Parameters([Ô]Cod_Produto[Ô]) = txtCodCliente.Text
.Parameters([Ô]Numero_Os[Ô]) = frmordemdeservico.txtcodos.Text
.Parameters([Ô]Produto[Ô]) = txtdescricao.Text
.Parameters([Ô]Valor_Venda[Ô]) = txtvalordevenda.Text
.Parameters([Ô]Qtde[Ô]) = txtqtde.Text
.Parameters([Ô]Valor_Total[Ô]) = txttotal.Text
.Execute
If Err.Number <> 0 Then
MostraErro
End If
Else
.CommandText = [Ô]INSERT INTO Os_Produto (Cod_Produto, Numero_Os, Produto, Valor_Venda, Qtde, Valor_Total) Values (?, ?, ?, ?, ?, ?)[Ô]
.Parameters.Append .CreateParameter([Ô]Cod_Produto[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Numero_Os[Ô], adVarChar, adParamInput, 30)
.Parameters.Append .CreateParameter([Ô]Produto[Ô], adVarChar, adParamInput, 80)
.Parameters.Append .CreateParameter([Ô]Valor_Venda[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Qtde[Ô], adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter([Ô]Valor_Total[Ô], adVarChar, adParamInput, 10)
.Parameters([Ô]Cod_Produto[Ô]) = txtCodCliente.Text
.Parameters([Ô]Numero_Os[Ô]) = frmordemdeservico.txtcodos.Text
.Parameters([Ô]Produto[Ô]) = txtdescricao.Text
.Parameters([Ô]Valor_Venda[Ô]) = txtvalordevenda.Text
.Parameters([Ô]Qtde[Ô]) = txtqtde.Text
.Parameters([Ô]Valor_Total[Ô]) = txttotal.Text
.Execute
If Err.Number <> 0 Then
MostraErro
End If
End If
End With
txtCodCliente.Text = [Ô][Ô]
txtdescricao.Text = [Ô][Ô]
txtvalordevenda.Text = [Ô][Ô]
txtqtde.Text = [Ô][Ô]
txttotal.Text = [Ô][Ô]
End Sub[/txt-color]
--- como vocês puderam ver eu gravo direto os dados no bd e depois chamos eles de volta para o msflexgrid, mais isso não acontece o comando msflexgrid.refresh não funciona, e se eu tentar carregar ele desse jeito de novo (função mostradadosos) ele repete um monte de registros.
ou alguem sabe um jeito de passar os dados do textbox para o msflexgrid? se souberem eu posso criar uma rotina pra ele grava depois.
socorro o que eu faço????
Vc está limpando o grid antes de carregá-lo?
Olá ASHKATCHUP
[ô]grdpesquisa é o nome do meu msflexgrid
grdpesquisa.clear
ele apagou deixou as primeiras células em branco e continuou duplicando os registros
[ô]grdpesquisa é o nome do meu msflexgrid
grdpesquisa.clear
ele apagou deixou as primeiras células em branco e continuou duplicando os registros
Olá ASHKATCHUP
Consegui resolver, vou postar aqui por que se alguem tiver a mesma duvida pode usar
no form que eu adiciono os produtos, no botão incluir eu fiz isso
frmordemdeservico.grdpesquisa.Clear
frmordemdeservico.grdpesquisa.AddItem [Ô][Ô]
frmordemdeservico.grdpesquisa.Rows = 1
frmordemdeservico.MontarListaos
Valeu
Consegui resolver, vou postar aqui por que se alguem tiver a mesma duvida pode usar
no form que eu adiciono os produtos, no botão incluir eu fiz isso
frmordemdeservico.grdpesquisa.Clear
frmordemdeservico.grdpesquisa.AddItem [Ô][Ô]
frmordemdeservico.grdpesquisa.Rows = 1
frmordemdeservico.MontarListaos
Valeu
Tópico encerrado , respostas não são mais permitidas