Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ramos_ML

Conversão de VBA para SQL

Recommended Posts

Tenho um código em VBA e quero um equivalente no SQL. No VBA executo um open de alto nível em um arquivo TXT e seleciono parte de uma linha com registro do TIPO 0140 e capturo apenas o CNPJ daquela FILIAL, imprimindo posteriormente no arquivo #2 os registros TIPO 0200 (PRODUTOS) com o CNPJ da respectiva FILIAL... simples!


'*** leitura do #1 (efd contr)

Do While Not EOF(1)

Line Input #1, Linha

If Mid(Linha, 2, 4) = "0140" Then

Nivel1 = Mid(Linha, InStr(1, Replace(Linha, "|", "$", 1, 3), "|"), 15)

ElseIf Mid(Linha, 2, 4) = "0200" Then

'grava #2 produtos

Print #2, Nivel1 & Replace(Mid(Linha, 1, Len(Linha) - 1), ",", ".")

End If

Loop


Gostaria de trabalhar da mesma forma no SQL em nível de arquivos e leitura linha-a-linha, mas acho que não seja possível. Pelo menos já consegui jogar todo o arquivo TXT para uma tabela no SQL num Banco de Dados TESTE, tabela TEMPOR de apenas UMA COLUNA: LINHA (que é a linha do arquivo #1 TXT lido, óbvio!).


Com um exemplo, fica mais fácil! Abaixo um arquivo ORIGINAL e o RESULTADO desejado:


Arquivo ORIGINAL

...

|0140|11111111111111|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

|0200|cod01|desc01|...

|0200|cod02|desc02|...

|0200|cod03|desc03|...

|0200|cod04|desc04|...

|0140|22222222222222|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

|0200|cod01|desc01|...

|0200|cod02|desc02|...

|0200|cod03|desc03|...

|0200|cod04|desc04|...

|0140|33333333333333|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

|0200|cod01|desc01|...

|0200|cod02|desc02|...

|0200|cod03|desc03|...

|0200|cod04|desc04|...

...

RESULTADO DO SELECT ou ARQUIVO SAIDA

...

|11111111111111|0200|cod01|desc01|...

|11111111111111|0200|cod02|desc02|...

|11111111111111|0200|cod03|desc03|...

|11111111111111|0200|cod04|desc04|...

|22222222222222|0200|cod01|desc01|...

|22222222222222|0200|cod02|desc02|...

|22222222222222|0200|cod03|desc03|...

|22222222222222|0200|cod04|desc04|...

|33333333333333|0200|cod01|desc01|...

|33333333333333|0200|cod02|desc02|...

|33333333333333|0200|cod03|desc03|...

|33333333333333|0200|cod04|desc04|...

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala, Ramos! Tranquilo?

 

Segue um exemplo de como vc pode chegar nesse resultado.

 

set nocount on
go
declare @original table (texto varchar(250))
declare @resultado table (texto varchar(250))
insert into @original values ('|0140|11111111111111|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...')
,('|0200|cod01|desc01|...')
,('|0200|cod02|desc02|...')
,('|0200|cod03|desc03|...')
,('|0200|cod04|desc04|...')
,('|0140|22222222222222|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...')
,('|0200|cod01|desc01|...')
,('|0200|cod02|desc02|...')
,('|0200|cod03|desc03|...')
,('|0200|cod04|desc04|...')
,('|0140|33333333333333|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...')
,('|0200|cod01|desc01|...')
,('|0200|cod02|desc02|...')
,('|0200|cod03|desc03|...')
,('|0200|cod04|desc04|...')
declare @cnpj varchar(14), @texto varchar(250)
declare formataarquivo cursor for select texto from @original
open formataarquivo
fetch next from formataarquivo into @texto
while @@fetch_status = 0
begin
if substring(@texto,2,4) = 140
set @cnpj = substring(@texto,7,14)
else
insert into @resultado values ('|'+@cnpj+@texto)
fetch next from formataarquivo into @texto
end
close formataarquivo
deallocate formataarquivo
select * from @resultado
Qualquer coisa, só entrar em contato!
Abraço,
Diémerson S. Campos

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.