CRIAR UM TXT APARTIR DE UMA TABELA DO SQL SERVER

 Tópico anterior Próximo tópico Novo tópico

CRIAR UM TXT APARTIR DE UMA TABELA DO SQL SERVER

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#495208 - 30/09/2020 23:26:32

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Boa noite pessoal,

Possuo a tabela PRODUTOS que possui vários registros.

com os campos COD_BARRA, DESCRICAO e VENDA (esse campo vem de outra tabela)

segue consulta:
SELECT COD_BARRA, DESCRICAO,  (SELECT  TOP (1) VALOR_VV FROM  Produtos_Precos WHERE (COD_PRODUTO = produtos.CODIGO) ORDER BY CODIGO DESC) AS venda
FROM  produtos


Recentemente um cliente comprou um leitor de codigo de barra com visor.... precisamos criar um arquivo txt com essas informações da tabela produtos e enviar um txt diariamente para atualizar esse leitor....

achei muito exemplos na net, porem fiquei meio perdido... algo do tipo:
CREATE PROCEDURE sp_escrevenoarquivo (@Caminho SYSNAME, @TXT VARCHAR(8000) )
AS

BEGIN

DECLARE @FSO INT, @RES int, @FID int

EXECUTE @RES = sp_OACreate ´Scripting.FileSystemObject´, @FSO OUT

-- Abertura do Arquivo
EXECUTE @RES = sp_OAMethod @FSO, ´OpenTextFile´, @FID OUT, @Caminho, 8, 1

-- Escrita para o arquivo
EXECUTE @RES = sp_OAMethod @FID, ´WriteLine´, Null, @TXT
EXECUTE @RES = sp_OAMethod @FID, ´close´, Null
EXECUTE @RES = sp_OADestroy @FID
EXECUTE @RES = sp_OADestroy @FSO
END


Uso vb6 e sql express 2008
Precisava gerar um arquivo txt de uma tabela do SQL, tipo assim:

7891234567890 | arroz tio joao | 27,40
7891234567123 | café santa clara | 4,65
7891234567890 | Margarina Cremor | 3,86


obs: precisa ter essa barra '|' entre os campos

Alguém tem alguma ideia.



#495209 - 30/09/2020 23:52:39

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Tem várias alternativas. Algumas delas
Você pode fazer um loop(mais demorado)
Você pode usar o método GetString do recordset. Use os parâmetros da maneira que quiser. No seu caso, você quer o delimitador de coluna. Fica mais ou menos assim:

dim rs = new adodb.recordset
set rs = cn.Open('sua query aqui')
dim texto = rs.GetString(,,'|')

Open 'c:\pasta\arquivo.txt' for output as #1
Print #1, texto
Close #1



_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#495210 - 30/09/2020 23:53:02

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Eita! Que houve ali em cima??

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#495211 - 01/10/2020 07:39:06

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
Tem várias alternativas. Algumas delas
Você pode fazer um loop(mais demorado)
Você pode usar o método GetString do recordset. Use os parâmetros da maneira que quiser. No seu caso, você quer o delimitador de coluna. Fica mais ou menos assim:

dim rs = new adodb.recordset
set rs = cn.Open('sua query aqui')
dim texto = rs.GetString(,,'|')

Open 'c:pastaarquivo.txt' for output as #1
Print #1, texto
Close #1



Grande mestre KERPLUNK, obg por responder

Modifiquei assim:
Dim sSQL As String
Dim r As ADODB.Recordset
Dim Texto As String

sSQL = 'SELECT COD_BARRA, DESCRICAO,  (SELECT  TOP (1) VALOR_VV FROM  Produtos_Precos WHERE (COD_PRODUTO = produtos.CODIGO) ORDER BY CODIGO DESC) AS venda FROM  produtos'
Set r = dbData.OpenRecordset(sSQL)

Texto = r.GetString(, , '|')

Open 'D:\Sistemas\Projetos\sistemaNFCe 4.0_MDFe\arquivo.txt' For Output As #1

Print #1, Texto
Close #1


Deu certo... ele criou adicionou no arquivo todos os produtos

Porem ele não fez a quebra de linha para cada produto

Eu queria que ficassim assim:

7891234567890 | arroz tio joao | 27,40
7891234567123 | café santa clara | 4,65
7891234567890 | Margarina Cremor | 3,86


e ficou assim:

7891234567890 | arroz tio joao | 27,407891234567123 | café santa clara | 4,657891234567890 | Margarina Cremor | 3,86

Como eu faria para ele quebrar a linha apos o valor de venda?




#495212 - 01/10/2020 08:41:19

FUTURA
.
Cadast. em:Maio/2004


joga  o recordset dentro de um while, e printa linha por linha no txt..

while not rs.eof
print rs!meutexto
rs.movenext
wend




#495213 - 01/10/2020 08:45:33

LUIS2014
CURITIBA
Cadast. em:Agosto/2014


WEBIER, qual modelo desse leitor? É daqueles para consulta de preço?



#495214 - 01/10/2020 09:43:37

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Você olhou a documentação do método no link? Lá tem os parâmetros certinho... Essa tá facinho, vou deixar você tentar ver o que está faltando.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#495216 - 01/10/2020 13:42:17

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
joga  o recordset dentro de um while, e printa linha por linha no txt..

while not rs.eof
print rs!meutexto
rs.movenext
wend


Sua dica de loop foi usada... obg

Do While Not r.EOF
    Texto = r.GetString(, 1, '|')
    Print #1, Texto
   If Not r.EOF Then r.MoveNext
Loop





#495217 - 01/10/2020 13:44:12

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
WEBIER, qual modelo desse leitor? É daqueles para consulta de preço?

Na verdade amigo é um terminal de leitura de preço da elgin

Nele vem um leitor de codigo de barra com visor... cliente passa o produto a aparece o preço.
https://www.automacao.elgin.com.br/produto/terminal-de-consulta-precos



#495218 - 01/10/2020 13:46:10

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Citação:
:
Você olhou a documentação do método no link? Lá tem os parâmetros certinho... Essa tá facinho, vou deixar você tentar ver o que está faltando.


Se capitei vossa dica corretamente, seria colocar o '1' nos paramentos, assim:

Dim sSQL As String
Dim r As ADODB.Recordset
Dim Texto As String

sSQL = 'SELECT COD_BARRA, DESCRICAO,  (SELECT  TOP (1) VALOR_VV FROM  Produtos_Precos WHERE (COD_PRODUTO = produtos.CODIGO) ORDER BY CODIGO DESC) AS venda FROM  produtos'
Set r = dbData.OpenRecordset(sSQL)

Texto = ''

Open 'D:\Sistemas\Projetos\sistemaNFCe 4.0_MDFe\arquivo.txt' For Output As #1

Do While Not r.EOF
    Texto = r.GetString(, 1, '|')
    Print #1, Texto
   If Not r.EOF Then r.MoveNext
Loop

Close #1




#495219 - 01/10/2020 13:49:39

WEBIER
URUCUI
Cadast. em:Dezembro/2003


Pessoal, aproveitando o post (e sendo abusado mesmo rsrsrs)

Como faria para limpar o arquivo .txt antes de inserir os dados?
outra coisa, alguns preço nao sao formatados da forma correnta no txt... tipo assim: 4,5 ou 3,8... como faria para no txt eles aparecessem formatados tipo 4,50 e 3,80

pois vi que dessa forma que eu fiz só seleciono os arquivos e 'insiro' no txt



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por WEBIER em 07/10/2020 13:20:43