DICA COM ARQUIVO TXT

RICOCARDOZO 22/11/2016 12:18:59
#469104
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.




KERPLUNK 22/11/2016 14:05:31
#469107
Resposta escolhida
Esses dados você obtém de uma tabela ou consulta, certo?
RICOCARDOZO 22/11/2016 14:30:31
#469112
Estes dados eu importo de uma nfe para uma flexgrid dai gero txt.
KERPLUNK 22/11/2016 14:44:32
#469113
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?
RICOCARDOZO 22/11/2016 15:40:22
#469119
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.


KERPLUNK 22/11/2016 16:03:28
#469121
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.
RICOCARDOZO 23/11/2016 13:24:27
#469154
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
RICOCARDOZO 23/11/2016 16:14:19
#469159
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?

KERPLUNK 23/11/2016 16:39:00
#469160
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[Ô]
RICOCARDOZO 02/12/2016 14:47:35
#469374
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



KERPLUNK 02/12/2016 22:38:00
#469381
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
Página 1 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas