AJUDA COM BANCO DE DADOS
Olá a Todos ;
Estou retornando a este projeto e gostaria de uma dica :
anexei uma tela de como ficou o formulário de inclusão no estoque.
Estou trabalhando com banco em txt.
Eu já crio o txt e ja conseguo abrir o banco, so queria uma dica de atualizar o txt de acordo com a grade.
Ao clicar no envia para o estoque , fazer uma busca no txt e se tiver produto com o mesmo codigo , atualizar com a quantidade , caso não tenha o produto incluir como novo ,dai ao fechar o formulário já salvar o txt atualizado, ou seja como não posso editar direto no txt uso um recordset só para fazer as atualizações.
Outra coisa meu txt esta com delimitador (,) é possivel usar delimitador (|) pipe , para ficar mais bonito o txt.
Tentei achar uma maneira de usar direto na conexão do banco de dados , mais não consegui , so criando um schema.ini.
Obrigado .
Estou retornando a este projeto e gostaria de uma dica :
anexei uma tela de como ficou o formulário de inclusão no estoque.
Estou trabalhando com banco em txt.
Eu já crio o txt e ja conseguo abrir o banco, so queria uma dica de atualizar o txt de acordo com a grade.
Ao clicar no envia para o estoque , fazer uma busca no txt e se tiver produto com o mesmo codigo , atualizar com a quantidade , caso não tenha o produto incluir como novo ,dai ao fechar o formulário já salvar o txt atualizado, ou seja como não posso editar direto no txt uso um recordset só para fazer as atualizações.
Outra coisa meu txt esta com delimitador (,) é possivel usar delimitador (|) pipe , para ficar mais bonito o txt.
Tentei achar uma maneira de usar direto na conexão do banco de dados , mais não consegui , so criando um schema.ini.
Obrigado .
Esqueci do código:
Private Sub Form_Load()
formata_grade
Carrega_Produtos
End Sub
Private Sub Abre_banco()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Caminho As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Caminho = App.Path & [Ô]\Estoque[Ô]
cnn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & Caminho & [Ô];Extended Properties=[Ô][Ô]text;HDR=No;FMT=Delimited[Ô][Ô][Ô]
rs.CursorLocation = adUseClient
cnn.Close
Set cnn = Nothing
End Sub
Private Sub Carrega_Produtos()
On Error Resume Next
Dim linha As Integer
linha = 1
Dim numeronfe As String
Dim Arq As String
Arq = Dir(App.Path & [Ô]\Xml_Entradas\*.xml[Ô])
Do While Arq <> [Ô][Ô]
Dim XMLdoc As New DOMDocument
XMLdoc.Load App.Path & [Ô]\Xml_Entradas\[Ô] & Arq
Grade.Rows = Grade.Rows + XMLdoc.getElementsByTagName([Ô]infNFe/det[Ô]).length - 1
Dim nodeList As IXMLDOMNodeList
Dim node As IXMLDOMNode
Set nodeList = XMLdoc.selectNodes([Ô]nfeProc//NFe//*[Ô])
For Each node In nodeList
Select Case node.nodeName
Case [Ô]nNF[Ô]
numeronfe = Format(node.nodeTypedValue)
Grade.TextMatrix(linha, 0) = Format(node.nodeTypedValue)
Case [Ô]cProd[Ô]
Grade.TextMatrix(linha, 1) = Format(node.nodeTypedValue)
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]xProd[Ô]
Grade.TextMatrix(linha, 2) = node.nodeTypedValue
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]qCom[Ô]
Grade.TextMatrix(linha, 3) = Format(Val(node.nodeTypedValue), [Ô]00000[Ô])
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]vUnTrib[Ô]
Grade.TextMatrix(linha, 4) = Format(Val(node.nodeTypedValue), [Ô]0.00[Ô])
Grade.TextMatrix(linha, 0) = numeronfe
linha = linha + 1
End Select
Next node
Arq = Dir()
Loop
End Sub
Private Sub Form_Load()
formata_grade
Carrega_Produtos
End Sub
Private Sub Abre_banco()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Caminho As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Caminho = App.Path & [Ô]\Estoque[Ô]
cnn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & Caminho & [Ô];Extended Properties=[Ô][Ô]text;HDR=No;FMT=Delimited[Ô][Ô][Ô]
rs.CursorLocation = adUseClient
cnn.Close
Set cnn = Nothing
End Sub
Private Sub Carrega_Produtos()
On Error Resume Next
Dim linha As Integer
linha = 1
Dim numeronfe As String
Dim Arq As String
Arq = Dir(App.Path & [Ô]\Xml_Entradas\*.xml[Ô])
Do While Arq <> [Ô][Ô]
Dim XMLdoc As New DOMDocument
XMLdoc.Load App.Path & [Ô]\Xml_Entradas\[Ô] & Arq
Grade.Rows = Grade.Rows + XMLdoc.getElementsByTagName([Ô]infNFe/det[Ô]).length - 1
Dim nodeList As IXMLDOMNodeList
Dim node As IXMLDOMNode
Set nodeList = XMLdoc.selectNodes([Ô]nfeProc//NFe//*[Ô])
For Each node In nodeList
Select Case node.nodeName
Case [Ô]nNF[Ô]
numeronfe = Format(node.nodeTypedValue)
Grade.TextMatrix(linha, 0) = Format(node.nodeTypedValue)
Case [Ô]cProd[Ô]
Grade.TextMatrix(linha, 1) = Format(node.nodeTypedValue)
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]xProd[Ô]
Grade.TextMatrix(linha, 2) = node.nodeTypedValue
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]qCom[Ô]
Grade.TextMatrix(linha, 3) = Format(Val(node.nodeTypedValue), [Ô]00000[Ô])
Grade.TextMatrix(linha, 0) = numeronfe
Case [Ô]vUnTrib[Ô]
Grade.TextMatrix(linha, 4) = Format(Val(node.nodeTypedValue), [Ô]0.00[Ô])
Grade.TextMatrix(linha, 0) = numeronfe
linha = linha + 1
End Select
Next node
Arq = Dir()
Loop
End Sub
Olá a Todos ;
Acho que estou quase lá:
Private Sub Atulaizar_banco()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Caminho As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Caminho = App.Path & [Ô]\Estoque[Ô]
cnn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & Caminho & [Ô];Extended Properties=[Ô][Ô]text;HDR=No;FMT=Delimited[Ô][Ô][Ô]
rs.CursorLocation = adUseClient
rs.Open [Ô]Select * FROM estoque.txt[Ô], cnn, adOpenDynamic, adLockBatchOptimistic
While Not rs.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If rs(0) <> Grade.TextMatrix(i, 0) Then
If rs(1) = Grade.TextMatrix(i, 1) Then
quantprod = Val(rs(3)) + Val(Grade.TextMatrix(i, 3))
rs(3) = quantprod
rs.Update [ô]atualizando a quantidade
End If
End If
rs.MoveNext
Next i
Wend
cnn.Close
Set cnn = Nothing
End Sub
Só preciso saber como edito o registro atual , gero o txt com as informações da memória.
Acho que estou quase lá:
Private Sub Atulaizar_banco()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Caminho As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
Caminho = App.Path & [Ô]\Estoque[Ô]
cnn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & Caminho & [Ô];Extended Properties=[Ô][Ô]text;HDR=No;FMT=Delimited[Ô][Ô][Ô]
rs.CursorLocation = adUseClient
rs.Open [Ô]Select * FROM estoque.txt[Ô], cnn, adOpenDynamic, adLockBatchOptimistic
While Not rs.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If rs(0) <> Grade.TextMatrix(i, 0) Then
If rs(1) = Grade.TextMatrix(i, 1) Then
quantprod = Val(rs(3)) + Val(Grade.TextMatrix(i, 3))
rs(3) = quantprod
rs.Update [ô]atualizando a quantidade
End If
End If
rs.MoveNext
Next i
Wend
cnn.Close
Set cnn = Nothing
End Sub
Só preciso saber como edito o registro atual , gero o txt com as informações da memória.
Estou conseguindo fazer a atualização de acordo com a grade , só que está acontecendo o seguinte :
Eu carrego a grade com o xml e envio para o banco , ao clicar novamente em exibir estoque está aparecendo um erro :
O codigo atualizado que estou utilizando agora é o seguinte:
Private Sub estoque_atualizado()
Abre_Tabela
TB_ESTOQUE.LockType = adLockOptimistic [ô]travamento apenas leitura
TB_ESTOQUE.CursorType = adOpenStatic [ô]somente leitura
TB_ESTOQUE.CursorLocation = adUseServer
TB_ESTOQUE.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE
Do While Not TB_ESTOQUE.EOF
Grade.Rows = Grade.Rows + 1
Grade.TextMatrix(Grade.Rows - 1, 0) = TB_ESTOQUE(0).Value
Grade.TextMatrix(Grade.Rows - 1, 1) = TB_ESTOQUE(1).Value
Grade.TextMatrix(Grade.Rows - 1, 2) = TB_ESTOQUE(2).Value
Grade.TextMatrix(Grade.Rows - 1, 3) = TB_ESTOQUE(3).Value
Grade.TextMatrix(Grade.Rows - 1, 4) = Format(TB_ESTOQUE(4).Value, [Ô]currency[Ô])
TB_ESTOQUE.MoveNext
Loop
FechaTabela
End Sub
Private Sub Atualizar_estoque()
Abre_Tabela
TB_ESTOQUE.LockType = adLockBatchOptimistic
TB_ESTOQUE.CursorType = adOpenDynamic
TB_ESTOQUE.CursorLocation = adUseClient
TB_ESTOQUE.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE
While Not TB_ESTOQUE.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If TB_ESTOQUE(0) <> Grade.TextMatrix(i, 0) Then
If TB_ESTOQUE(1) = Grade.TextMatrix(i, 1) Then
quantprod = Val(TB_ESTOQUE(3)) + Val(Grade.TextMatrix(i, 3))
TB_ESTOQUE(3) = quantprod
TB_ESTOQUE.Update
End If
End If
TB_ESTOQUE.MoveNext
Next i
Wend
TB_ESTOQUE.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until TB_ESTOQUE.EOF
Print #1, TB_ESTOQUE(0) & [Ô],[Ô] & TB_ESTOQUE(1) & [Ô],[Ô] & TB_ESTOQUE(2) & [Ô],[Ô] & TB_ESTOQUE(3) & [Ô],[Ô] & TB_ESTOQUE(4)
TB_ESTOQUE.MoveNext
Loop
MsgBox [Ô]Banco de Dados - Estoque.txt - Atualizada com sucesso !![Ô]
FechaTabela
End Sub
Eu carrego a grade com o xml e envio para o banco , ao clicar novamente em exibir estoque está aparecendo um erro :
O codigo atualizado que estou utilizando agora é o seguinte:
Private Sub estoque_atualizado()
Abre_Tabela
TB_ESTOQUE.LockType = adLockOptimistic [ô]travamento apenas leitura
TB_ESTOQUE.CursorType = adOpenStatic [ô]somente leitura
TB_ESTOQUE.CursorLocation = adUseServer
TB_ESTOQUE.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE
Do While Not TB_ESTOQUE.EOF
Grade.Rows = Grade.Rows + 1
Grade.TextMatrix(Grade.Rows - 1, 0) = TB_ESTOQUE(0).Value
Grade.TextMatrix(Grade.Rows - 1, 1) = TB_ESTOQUE(1).Value
Grade.TextMatrix(Grade.Rows - 1, 2) = TB_ESTOQUE(2).Value
Grade.TextMatrix(Grade.Rows - 1, 3) = TB_ESTOQUE(3).Value
Grade.TextMatrix(Grade.Rows - 1, 4) = Format(TB_ESTOQUE(4).Value, [Ô]currency[Ô])
TB_ESTOQUE.MoveNext
Loop
FechaTabela
End Sub
Private Sub Atualizar_estoque()
Abre_Tabela
TB_ESTOQUE.LockType = adLockBatchOptimistic
TB_ESTOQUE.CursorType = adOpenDynamic
TB_ESTOQUE.CursorLocation = adUseClient
TB_ESTOQUE.Open [Ô]Select * FROM estoque.txt[Ô], BD_ESTOQUE
While Not TB_ESTOQUE.EOF
Dim i As Integer
Dim quantprod As Integer
Grade.Col = 1
For i = 1 To Grade.Rows - 1
If TB_ESTOQUE(0) <> Grade.TextMatrix(i, 0) Then
If TB_ESTOQUE(1) = Grade.TextMatrix(i, 1) Then
quantprod = Val(TB_ESTOQUE(3)) + Val(Grade.TextMatrix(i, 3))
TB_ESTOQUE(3) = quantprod
TB_ESTOQUE.Update
End If
End If
TB_ESTOQUE.MoveNext
Next i
Wend
TB_ESTOQUE.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until TB_ESTOQUE.EOF
Print #1, TB_ESTOQUE(0) & [Ô],[Ô] & TB_ESTOQUE(1) & [Ô],[Ô] & TB_ESTOQUE(2) & [Ô],[Ô] & TB_ESTOQUE(3) & [Ô],[Ô] & TB_ESTOQUE(4)
TB_ESTOQUE.MoveNext
Loop
MsgBox [Ô]Banco de Dados - Estoque.txt - Atualizada com sucesso !![Ô]
FechaTabela
End Sub
O erro esta nesta parte , ao gerar um novo txt com informações da tabela recordset será que é erro de cursor ?,
TB_ESTOQUE.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until TB_ESTOQUE.EOF
Print #1, TB_ESTOQUE(0) & [Ô],[Ô] & TB_ESTOQUE(1) & [Ô],[Ô] & TB_ESTOQUE(2) & [Ô],[Ô] & TB_ESTOQUE(3) & [Ô],[Ô] & TB_ESTOQUE(4)
TB_ESTOQUE.MoveNext
Loop
TB_ESTOQUE.MoveFirst
Open App.Path & [Ô]\Estoque\estoque.txt[Ô] For Output As #1
Do Until TB_ESTOQUE.EOF
Print #1, TB_ESTOQUE(0) & [Ô],[Ô] & TB_ESTOQUE(1) & [Ô],[Ô] & TB_ESTOQUE(2) & [Ô],[Ô] & TB_ESTOQUE(3) & [Ô],[Ô] & TB_ESTOQUE(4)
TB_ESTOQUE.MoveNext
Loop
Tópico encerrado , respostas não são mais permitidas