AJUDA COM BANCO DE DADOS

RICOCARDOZO 22/06/2017 17:09:23
#474672
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 .


RICOCARDOZO 22/06/2017 17:11:21
#474673
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

RICOCARDOZO 23/06/2017 13:03:41
#474689
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.


RICOCARDOZO 26/06/2017 14:59:13
#474748
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
RICOCARDOZO 27/06/2017 11:12:41
#474773
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

Tópico encerrado , respostas não são mais permitidas