Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Limite de caracteres por linha em sentença SQL no Vba
-
- 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
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!
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!
- Reinaldo
- 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
Fonte: https://docs.microsoft.com/pt-br/office ... nt-error-5
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
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.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.
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
-
- 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
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
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
-
- 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
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.
Se ficar maior do que isto a macro gera o erro que falei, porque a variável fica implicitamente grande.
- Reinaldo
- 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
"...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
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
-
- 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
Mais uma vez, muito obrigado Reinaldo!
Baseado na sua idéia fiz algumas modificações e felizmente agora deu tudo certo.
Grande abraço!
Baseado na sua idéia fiz algumas modificações e felizmente agora deu tudo certo.
Grande abraço!