Árvore de páginas

Situação

Definir um filtro com duas condições com operador ".OR.", onde uma condição compara um nome de campo criado na tabela com mais de 10 caracteres.

Ocorrência reproduzida no ERP Protheus, ao fazer um filtro na tabela SYS_USR

Ocorrência

O filtro não deveria ser suportado, e ser tratado de forma transparente pelo TOTVS | Application Server, mas o TOTVS | DBAccess aceitava o filtro e gerava uma expressão SQL inválida, fazendo com que nenhum registro fosse retornado.

Trecho da mensagem de erro observada no cenário descrito:

Error : 102 (37000) (RC=-1) - [Microsoft][SQL Server Native Client 11.0][SQL Server]Sintaxe incorreta próxima a ')'.
Error : 102 (00000) (RC=-1) -  ( From tISAMFile::GoTop ) Thread ID [184]    User [XXXXX]    IO [2817]    Tables [49]    MaxTables [51]    Comment [CFGA510 - TCPIP - ThreadID(6112)]    SP [ ]    Traced [No]    SQLReplay [No]    InTran [No]    DBEnv [MSSQL/XXXXXXXX]    DBThread [(SPID 208,216)]    Started [24/06/2022 07:57:43]    IP [XXXXXXXX:XXXX]    IDLE [ ]    InTransact [ ]    Memory [0]    Running [ROP_FIRST for 0 s.]    RCV [69484]    SND [568401]    TCBuild [20210202-20220202]    TCVersion [21.1.1.1]    ARCH [64]    OS [WINDOWS]    BUILD [RELEASE]    
SELECT  TOP 250 R_E_C_N_O_ FROM dbo.SYS_USR WHERE D_E_L_E_T_ = ' ' AND (( USR_MSBLQL <> '1' ) OR ( ) ORDER BY USR_ID,R_E_C_N_O_
Correção

O tratamento de validação de filtro do TOTVS | DBAccess foi corrigido, para reportar adequadamente ao TOTVS | Application Server que o filtro não foi traduzido para o Banco de Dados, sem tentar emitir uma query sintaticamente inválida. 

Informações adicionais
  • Referente ao chamado: 14598655
  • Referente à ocorrência: TPGW-1180