Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Limite de caracteres por linha em sentença SQL no Vba

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
cparreiras
Acabou de chegar
Acabou de chegar
Mensagens: 7
Registrado em: Seg Mai 27, 2019 9:40 am

Limite de caracteres por linha em sentença SQL no Vba

Mensagem por cparreiras »

Quando insiro uma sentença SQL em um código Vba, parece que há um limite de caracteres por linha.
Quando esta linha fica mais longa ocorre um erro:
Erro em tempo de execução '5':
Argumento ou chamada de procedimento inválida


Acontece que na cláusula "Where" tenho uma variável que acumula códigos e, às vezes podem ser muitos, como no exemplo:
...Where COD in (variável) - esta variável pode ser apenas um número ou mais de 100, separados por vírgula.

Quando são poucos códigos (parece que até uns 35) a macro é executada sem problemas, mas dependendo da quantidade dá o erro acima.
A solução seria fazer uma quebra de linha a cada 35 códigos, mas isso complica minha instrução "For...next", que acumula os códigos.
Existe uma maneira melhor de contornar isso?
Obrigado!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Limite de caracteres por linha em sentença SQL no Vba

Mensagem por Reinaldo »

Fonte: https://docs.microsoft.com/pt-br/office ... nt-error-5
Argumento ou chamada de procedimento inválida (Erro 5)

Alguma parte da chamadanão pode ser concluída. Veja a seguir as possíveis causas e soluções para este erro:
Um argumento provavelmente excedeu o intervalo de valores permitidos. Por exemplo, a função Sin pode aceitar somente valores dentro de um determinado intervalo. Argumentos positivos menores que 2.147.483.648 são aceitos, enquanto valores maiores que 2.147.483.648 geram este erro.
Consulte os intervalos permitidos para argumentos.
Não presenciei nada assim até o momento; porem assim como o Excel o Access e SQL também tem alguns limites, pode ser que esse seja um deles.
Por Exemplo a quantidade de caracteres em uma string SQL e aproximadamente 64.000
https://support.office.com/en-us/articl ... c1025bb47c

Agora convenhamos, essa quantidade de ("...ou mais de 100...") argumentos e algo meio desproporcional.
Uma possibilidade (talvez), para simplificar a extração de dados; seria ter/montar uma tabela no mesmo banco da tabela base, e na consulta sql manipular a ligação (relacionamento) entre as tabelas InnerJoin
veja em https://docs.microsoft.com/pt-br/office ... access-sql


cparreiras
Acabou de chegar
Acabou de chegar
Mensagens: 7
Registrado em: Seg Mai 27, 2019 9:40 am

Re: Limite de caracteres por linha em sentença SQL no Vba

Mensagem por cparreiras »

Reinaldo, agradeço muito pela resposta.
O meu problema é um pouco complicado porque tenho dois bancos de dados: um em SQL Server e outro em Firebird.
Nos dois eu tenho informações de naturezas diferentes, relativas a animais. Nos dois bancos cada animal é identificado pelo mesmo código.
Estou montando um relatório em Excel que preciso fazer uma consulta no banco SQL Server que vai me gerar uma tabela no Excel com a relação dos códigos dos animais que atendem a determinadas condições.
Então, de posse desses códigos, preciso buscar outras informações que estão no banco Firebird, que sejam relativas a esse grupo de animais, que podem ser poucos ou muitos, como falei. Utilizo ODBC nas duas conexões.
Bem complicado, né! Rsrsrsrs


cparreiras
Acabou de chegar
Acabou de chegar
Mensagens: 7
Registrado em: Seg Mai 27, 2019 9:40 am

Re: Limite de caracteres por linha em sentença SQL no Vba

Mensagem por cparreiras »

Tudo funciona perfeitamente se esta quantidade de códigos de animais não passa de uns 35.
Se ficar maior do que isto a macro gera o erro que falei, porque a variável fica implicitamente grande.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Limite de caracteres por linha em sentença SQL no Vba

Mensagem por Reinaldo »

"...Existe uma maneira melhor de contornar isso..."
A melhor maneira seria, creio eu, criar a tabela auxiliar.
Assim sua primeira consulta ao invés de criar a tabela no excel (ou mesmo em paralelo), alimentaria/recriaria essa tabela no Firebird; mas sendo inviável essa a criação/utilização, pelo que sei; resta efetuar sua consulta por "pedaços".
"...uma quebra de linha a cada 35 códigos, mas isso complica minha instrução ..."

Algo +/- assim:
Crie normalmente seu For..Next para a string que recebe os codigos.
Crie um novo For..Next.. para instrução sql, bem como nova variavel

Código: Selecionar todos

Sub tt()
Dim x As Integer, y As Integer
Dim strConteudo As String, strNova As String, sQl As String
y = 92
For x = 2 To y
    If x <= y Then strConteudo = strConteudo & Cells(x, 1).Value & ","
    If x = y Then strConteudo = strConteudo & Cells(x, 1).Value
Next

For x = 1 To Len(strConteudo) Step 140 'Considerando codigo com 3 caractere mais virgulas
strNova = Mid(strConteudo, x, 139)
sQl = "SELECT Codigo, Nome, Sexo FROM TabelaSQL WHERE Código IN (" & strNova & ")"
Next
End Sub


cparreiras
Acabou de chegar
Acabou de chegar
Mensagens: 7
Registrado em: Seg Mai 27, 2019 9:40 am

Re: Limite de caracteres por linha em sentença SQL no Vba

Mensagem por cparreiras »

Mais uma vez, muito obrigado Reinaldo!
Baseado na sua idéia fiz algumas modificações e felizmente agora deu tudo certo.
Grande abraço!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder