DICA COM ARQUIVO TXT
Olá
Pessoal estou usando a seguinte sub ,onde gero um arquivo txt com informações do estoque atual.
Onde tenho as seguintes informações
CODIGO PROD | QUANTIDADE |DESCRIÇÃO | VALOR UNITARIO
Private Sub Gerar_Estoque(ByVal strFilename As String, ByRef Grade As MSFlexGrid)
Const SEPARATOR_CHAR As String = [Ô]|[Ô]
Dim intFreeFile As Integer
Dim strLine As String
Dim r As Integer
Dim C As Integer
intFreeFile = FreeFile
Open strFilename For Output As #intFreeFile
With Grade
For r = 1 To .Rows - 1
strLine = [Ô][Ô]
For C = 0 To .Cols - 1
strLine = strLine & IIf(C = 0, [Ô][Ô], SEPARATOR_CHAR) & .TextMatrix(r, C)
Next C
Print #intFreeFile, strLine
Next r
End With
Close #intFreeFile
End Sub
Gostaria de saber como poderia já na inclusão caso haja um produto com o mesmo código , atualizar a quantidade.
Pessoal estou usando a seguinte sub ,onde gero um arquivo txt com informações do estoque atual.
Onde tenho as seguintes informações
CODIGO PROD | QUANTIDADE |DESCRIÇÃO | VALOR UNITARIO
Private Sub Gerar_Estoque(ByVal strFilename As String, ByRef Grade As MSFlexGrid)
Const SEPARATOR_CHAR As String = [Ô]|[Ô]
Dim intFreeFile As Integer
Dim strLine As String
Dim r As Integer
Dim C As Integer
intFreeFile = FreeFile
Open strFilename For Output As #intFreeFile
With Grade
For r = 1 To .Rows - 1
strLine = [Ô][Ô]
For C = 0 To .Cols - 1
strLine = strLine & IIf(C = 0, [Ô][Ô], SEPARATOR_CHAR) & .TextMatrix(r, C)
Next C
Print #intFreeFile, strLine
Next r
End With
Close #intFreeFile
End Sub
Gostaria de saber como poderia já na inclusão caso haja um produto com o mesmo código , atualizar a quantidade.
Esses dados você obtém de uma tabela ou consulta, certo?
Estes dados eu importo de uma nfe para uma flexgrid dai gero txt.
O grande negócio é SEMPRE saber diferenciar dados e visualizações/renderizações deles. O que eu faria:
- Criar um ou mais objeto recordset conforme necessários, nem que seja DAO
- Colocar os dados nesses recordset(s)
- Fazer a seleção deles(incluindo somas de dados repetidos conforme o caso) e depois gerar o TXT
Uma analogia do que você está querendo:
Você tem uma padaria onde as pessoas compram [Ô]no caderno[Ô], ou seja, fiado. Você não organiza muito bem esse caderno e quer somar tudo que cada um cliente deve. Você pega o caderno e coloca em uma caixa. Dentro da caixa, você foleia as páginas e vai rasgando pedacinhos e colando os pedaços que são dos mesmo clientes, tudo dentro da caixa. Não seria muito mais fácil [Ô]passar à limpo[Ô] o caderno em outras folhas e depois colocar os dados consolidados na caixa?
- Criar um ou mais objeto recordset conforme necessários, nem que seja DAO
- Colocar os dados nesses recordset(s)
- Fazer a seleção deles(incluindo somas de dados repetidos conforme o caso) e depois gerar o TXT
Uma analogia do que você está querendo:
Você tem uma padaria onde as pessoas compram [Ô]no caderno[Ô], ou seja, fiado. Você não organiza muito bem esse caderno e quer somar tudo que cada um cliente deve. Você pega o caderno e coloca em uma caixa. Dentro da caixa, você foleia as páginas e vai rasgando pedacinhos e colando os pedaços que são dos mesmo clientes, tudo dentro da caixa. Não seria muito mais fácil [Ô]passar à limpo[Ô] o caderno em outras folhas e depois colocar os dados consolidados na caixa?
Obrigado pela dica ,
Mais na verdade eu só queria fazer algo fácil , para um cliente , ele vai precisar emitir nfce em janeiro , é uma empresa que só possui 80 itens para venda , e compra umas 10 notas por mês , então pensei em fazer algo bem pratico onde todo o processo é importar os produtos pelas notas de entradas e gerar um banco em txt mesmo , e dai fazer as vendas, sem precisar usar banco de dados ou muitos forms ou cadastros , feijão com arroz pratico e eficiente, sem ocx ou dlls a mais.
Mais eu entendo o que você quis dizer , devo tentar trabalhar estes dados antes de colocar na flegrid.
Mais na verdade eu só queria fazer algo fácil , para um cliente , ele vai precisar emitir nfce em janeiro , é uma empresa que só possui 80 itens para venda , e compra umas 10 notas por mês , então pensei em fazer algo bem pratico onde todo o processo é importar os produtos pelas notas de entradas e gerar um banco em txt mesmo , e dai fazer as vendas, sem precisar usar banco de dados ou muitos forms ou cadastros , feijão com arroz pratico e eficiente, sem ocx ou dlls a mais.
Mais eu entendo o que você quis dizer , devo tentar trabalhar estes dados antes de colocar na flegrid.
Então faça um banco de dados em arquivos CSV. Sempre tente fazer uso das melhores alternativas possÃveis e JAMAIS pensando [Ô]é só para esse cliente[Ô], [Ô]nenhum outro vai ter isso[Ô]. Sempre pense que uma mesma solução pode e deve ser aplicada em casos semelhantes.
Ok
Quanto ao salvar como csv , eu posso fazer , mais não estou conseguindo fazer a seguinte logica :
With Grade
For r = 1 To .Rows - 1
strLine = [Ô][Ô]
For C = 0 To .Cols - 1
strLine = strLine & IIf(C = 0, [Ô][Ô], SEPARATOR_CHAR) & .TextMatrix(r, C)
Next C
codigoprod = Left(strLine, 8)
[ô]pesquisa no txt linha por linha , se tiver o codigo igual dai altera o pipe quantidade somando o que tem com o que vai ser incluido
Print #intFreeFile, strLine
Next r
End With
Quanto ao salvar como csv , eu posso fazer , mais não estou conseguindo fazer a seguinte logica :
With Grade
For r = 1 To .Rows - 1
strLine = [Ô][Ô]
For C = 0 To .Cols - 1
strLine = strLine & IIf(C = 0, [Ô][Ô], SEPARATOR_CHAR) & .TextMatrix(r, C)
Next C
codigoprod = Left(strLine, 8)
[ô]pesquisa no txt linha por linha , se tiver o codigo igual dai altera o pipe quantidade somando o que tem com o que vai ser incluido
Print #intFreeFile, strLine
Next r
End With
KERPLUNK , me diz uma coisa ?
Não poderia trabalhar com recordset temporário , tipo carregar do txt para o recordset ,fazer as alterações dai gerar o txt novamente?
Não poderia trabalhar com recordset temporário , tipo carregar do txt para o recordset ,fazer as alterações dai gerar o txt novamente?
Citação::
KERPLUNK , me diz uma coisa ?
Não poderia trabalhar com recordset temporário , tipo carregar do txt para o recordset ,fazer as alterações dai gerar o txt novamente?
é o que eu já disse antes. Acho que você não tinha entendido.
Um arquivo CSV, é em essência um banco de dados que você pode abrir usando um OleDb com a engine Jet. é bastante simples, veja um exemplo. Você pode inclusive especificar qual o delimitador de campos/valores na connection string e ele pode ser seu caracter [Ô]|[Ô] se quiser. Assim, você abre o arquivo como um banco de dados normal, pode inclusive fazer insert, update, delete e select, enfim, todas as operações básicas de um banco de dados normal.
O exemplo que passei, está em .NET, mas a idéia é a mesma, usar a connectionstring da mesma maneira.
E não confunda [Ô]mas[Ô], com [Ô]mais[Ô]
KERPLUNK , fis conforme sua dica ,
Agora como faço para trabalhar com as seleções deles
Selecionar só os itens repetidos e já efetuar a soma das quantidades.
Filtrar pelo código , descrição etc.
Pesquisar um determinado produto .
Dai imagino que para editar e salvar é só gerar um novo print
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 = [Ô]C:\ADM365\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
Do While Not rs.EOF
Grade.Rows = Grade.Rows + 1
Grade.TextMatrix(Grade.Rows - 1, 0) = rs(0)
Grade.TextMatrix(Grade.Rows - 1, 1) = rs(1)
Grade.TextMatrix(Grade.Rows - 1, 2) = rs(2)
Grade.TextMatrix(Grade.Rows - 1, 3) = rs(3)
rs.MoveNext
Loop
cnn.Close
Set cnn = Nothing
Agora como faço para trabalhar com as seleções deles
Selecionar só os itens repetidos e já efetuar a soma das quantidades.
Filtrar pelo código , descrição etc.
Pesquisar um determinado produto .
Dai imagino que para editar e salvar é só gerar um novo print
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 = [Ô]C:\ADM365\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
Do While Not rs.EOF
Grade.Rows = Grade.Rows + 1
Grade.TextMatrix(Grade.Rows - 1, 0) = rs(0)
Grade.TextMatrix(Grade.Rows - 1, 1) = rs(1)
Grade.TextMatrix(Grade.Rows - 1, 2) = rs(2)
Grade.TextMatrix(Grade.Rows - 1, 3) = rs(3)
rs.MoveNext
Loop
cnn.Close
Set cnn = Nothing
Você percebeu que está usando uma query para acessar o arquivo? Da mesma maneira que você faz seleção de registros em qualquer banco, é como você vai fazer. Usando cláusulas WHERE, ORDER BY, GROUP BY enfim, qualquer coisa que você use em outros bancos você pode usar com a engine JET:
rs.Open [Ô]Select * from estoque.txt where CAMPO1 = [ô]valor1[ô] AND CAMPO2 = [ô]valor2[ô] ORDER BY CAMPO3[Ô], cnn
Tópico encerrado , respostas não são mais permitidas