Notifications
Clear all

Erro Query SQL - String VBA

5 Posts
3 Usuários
0 Reactions
1,213 Visualizações
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Bom dia a todos.

Estou tentando fazer uma QUERY para trazer alguns dados de uma conexão que fiz. Porém está dando erro na sintaxe do comando SQL da minha string. Já vi e revi e não consigo encontrar o erro.
O problema está na condição WHERE D_E_L_E_T_ = '' pois, quando eu tiro a condição o código funciona normalmente. O estranho é que testei e se eu utilizar esta mesma condição em outra QUERY funciona tranquilo, somente nesta que estou precisando que não vai. :?
Alguém sabe o que pode ser?

Segue a string que está sendo utilizada:

SELECT RTRIM(D1_COD) AS Produto, RTRIM(B1_DESC) AS Descricao, D1_TES AS Tipo_Entrada, D1_CF AS CFOP, D1_QUANT AS Quantidade, D1_VUNIT AS Vr_Unit, D1_TOTAL AS Vr_Total, (SUM(D1_TOTAL + D1_VALFRE + D1_SEGURO + D1_DESPESA - D1_DESC - D1_VALDESC)) AS VR_CONT, D1_DESC AS Desc_Item, D1_FORNECE AS Forn_Cli, D1_DOC AS Documento, SUBSTRING(D1_EMISSAO, 7, 2) + '/' + SUBSTRING(D1_EMISSAO, 5, 2) + '/' + SUBSTRING(D1_EMISSAO, 1, 4) Dt_Emissao, SUBSTRING(D1_DTDIGIT, 7, 2) + '/' + SUBSTRING(D1_DTDIGIT, 5, 2) + '/' + SUBSTRING(D1_DTDIGIT, 1, 4) Dt_Digitacao, D1_VALDESC AS Desconto, D1_II AS II, D1_CUSTO AS Custo, D1_BASIMP5 AS Base_COFINS, D1_BASIMP6 AS Base_PIS, D1_VALIMP5 AS Valor_COFINS, D1_VALIMP6 AS Valor_PIS, D1_ALQIMP5 AS Aliq_COFINS, D1_ALQIMP6 AS Aliq_PIS, D1_VALFRE as Frete, D1_SEGURO as Seguro, D1_DESPESA AS Desp_Ac, D1_VALCMAJ AS COFINS_MAJ FROM SD1010 INNER JOIN SB1010 ON B1_COD = D1_COD WHERE D_E_L_E_T_ = '' AND D1_DTDIGIT >= '20180301' AND D1_DTDIGIT <='20180331' AND D1_FILIAL = '01'  AND D1_TES NOT IN ('050', '052') GROUP BY D1_COD, B1_DESC, D1_TES, D1_CF, D1_QUANT, D1_VUNIT, D1_TOTAL, D1_DESC, D1_FORNECE, D1_DOC, D1_EMISSAO, D1_DTDIGIT, D1_VALDESC, D1_II, D1_CUSTO, D1_BASIMP5, D1_BASIMP6, D1_VALIMP5, D1_VALIMP6, D1_ALQIMP5, D1_ALQIMP6, D1_VALFRE, D1_SEGURO, D1_DESPESA, D1_VALCMAJ
 
Postado : 17/05/2018 8:53 am
(@klarc28)
Posts: 0
New Member
 

Já tentou procurar fórum sobre SQL?

 
Postado : 17/05/2018 9:00 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Já procurei muito em vários fóruns, e o código está correto (pelo menos eu já revisei umas 10x e não encontrei erro) porém por algum motivo o excel está retornando o erro no comando. E é justamente no D_E_L_E_T_. Pensei ser o underline do final do campo mas esse D_E_L_E_T_ funciona em outras QUERYs sem nenhum problema.

 
Postado : 17/05/2018 9:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fica um tanto dificil tentar "ver" onde se encontra o erro, e por motivos obvios não podemos testar seu sql; sendo de uma query fica mais complicado ainda.
Essa conexão (creio que ODBC) e com Access? ou outro banco.
Nem sempre o erro se encontra no ponto de interrupção, muitas vezes está antes. a função Substring não está presente no Excel, se não me engano deve ser reconhecida no Access, mas são consideradas funções escalares de ODBC; pode ate ser ai que resida o problema
Do help Access:

Referência do Desenvolvedor do Access 
Funções escalares ODBC 

O Microsoft® Access SQL fornece suporte ao uso da sintaxe definida ODBC para funções escalares. Por exemplo, a consulta:

SELECT DAILYCLOSE, DAILYCHANGE FROM DAILYQUOTE WHERE {fn ABS(DAILYCHANGE)} > 5

retorna todas as linhas em que o valor absoluto da alteração no preço de uma ação foi maior que cinco.

Um subconjunto de funções escalares definidas por ODBC é aceito. A tabela a seguir lista as funções aceitas.

Para obter uma descrição dos argumentos e uma explicação completa da sintaxe de eliminação para a inclusão de funções em uma instrução SQL, consulte a documentação do ODBC.

Funções de sequência
ASCII LENGTH RTRIM 
CHAR LOCATE SPACE 
CONCAT LTRIM SUBSTRING 
LCASE RIGHT UCASE 
LEFT     

Funções numéricas
ABS FLOOR SIN 
ATAN LOG SQRT 
CEILING POWER TAN 
COS RAND MOD 
EXP SIGN   

Funções de hora e data
CURDATE DAYOFYEAR MONTH 
CURTIME YEAR WEEK 
NOW HOUR QUARTER 
DAYOFMONTH MINUTE MONTHNAME 
DAYOFWEEK SECOND DAYNAME 

Conversão de tipo de dados
CONVERT Os literais de sequência podem ser convertidos para os seguintes tipos de dados: SQL_FLOAT, SQL_DOUBLE, SQL_NUMERIC, SQL_INTEGER, SQL_REAL, SQL_SMALLINT, SQL_VARCHAR e SQL_DATETIME. 

Uma boa alternativa para tentar encontras esse erro é, abrir o banco de dados onde as tabelas estão e copiar/colar seu sql em uma consulta lá
Assim e indicado um "erro" na sequencia SUBSTRING; no meu entender falta o operador As para definir o nome do campo;ou ainda a virgula para separação de campo
Tlvez>
SUBSTRING(D1_EMISSAO, 7, 2) + '/' + SUBSTRING(D1_EMISSAO, 5, 2) + '/' + SUBSTRING(D1_EMISSAO, 1, 4) as Dt_Emissao, _
SUBSTRING(D1_DTDIGIT, 7, 2) + '/' + SUBSTRING(D1_DTDIGIT, 5, 2) + '/' + SUBSTRING(D1_DTDIGIT, 1, 4) as Dt_Digitacao, _

 
Postado : 18/05/2018 11:35 am
(@rafaelp)
Posts: 0
New Member
Topic starter
 

Boa tarde.

Reinaldo, muito obrigado pela resposta.
Consegui resolver e o problema era o INNER JOIN.. ambas as tabelas tinham o campo D_E_L_E_T_ e por este motivo estava dando ambiguidade (não sei se é esta a palavra :lol: )
Mas deu tudo certo, valeu!

 
Postado : 18/05/2018 1:36 pm