TCQuery

Executa SQL direto via DBAccess, criando um alias temporario. Sempre filtre D_E_L_E_T_ e use RetSqlName pra resolver nome fisico.

Assinatura: TCQuery cSQL NEW ALIAS cAliasTemp

Retorna: void

TCQuery executa SQL nativo no banco (MSSQL, Oracle, etc.), criando um alias temporario navegavel como uma area DBF. Bem mais rapido que filtros AdvPL pra relatorios.

Sintaxe

cQuery := "SELECT campos FROM tabela WHERE ..."
cAlias := GetNextAlias()
TCQuery cQuery New Alias (cAlias)

While !(cAlias)->(EOF())
    // (cAlias)->CAMPO acessa cada linha
    (cAlias)->(DBSkip())
End
(cAlias)->(DBCloseArea())

Exemplo completo

cQuery := "SELECT A1_COD, A1_NOME, A1_CGC "
cQuery += "  FROM " + RetSqlName("SA1") + " SA1 "
cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' "
cQuery += "   AND A1_MSBLQL <> '1' "
cQuery += "   AND D_E_L_E_T_ = ' ' "
cQuery += " ORDER BY A1_COD                  "

cAlias := GetNextAlias()
TCQuery cQuery New Alias (cAlias)

While !(cAlias)->(EOF())
    aAdd(aResult, { ;
        (cAlias)->A1_COD, ;
        AllTrim((cAlias)->A1_NOME) ;
    })
    (cAlias)->(DBSkip())
End
(cAlias)->(DBCloseArea())

Pegadinhas obrigatorias

TCQuery vs MpSysOpenQuery

MpSysOpenQuery e versao mais nova com suporte a parametros (evita SQL injection). Em codigo novo, prefira MpSysOpenQuery.

Parâmetros

NomeTipoObrigatórioDescrição
cSQLCharactersimQuery SQL
cAliasCharactersimNome do alias temporario (use GetNextAlias)

Exemplos

Lista clientes nao bloqueados

cQuery := "SELECT A1_COD FROM " + RetSqlName("SA1") + " WHERE A1_FILIAL='" + xFilial("SA1") + "' AND D_E_L_E_T_=' '"

Veja também