Olá !
para corrigir essa do loop cria uma função static com o Pergunte ou qualquer outra função que esta dando esse erro dentro.
Assim ele para de dar erro(Solução qeu a própria TOTVS usa no fonte danfeii.prw).
static Function ValAtrib(atributo) Return (type(atributo) )
ja para acesso as tabelas SX?, vai depender do seu uso, se for consulta vc pode usar as funções que o Daniel mandou, ou fazer por beginSQL
Se for uma tela de Cadastro, precisa ser feita pela FWTemporaryTable
oTemp := FWTemporaryTable():New( aliasSX5 ) // - Criação do objeto
oTemp:SetFields( {{"DESCRI" ,"C",055,0},{"CHAVE" ,"C",006,0}} ) // - Atribuição dos campos
oTemp:AddIndex("01", {"CHAVE","DESCRI"} ) // - Criar indices
oTemp:Create()
/*
Insere Dados na Tabela Temporaria
*/
cQuery := "INSERT INTO "+ oTemp:GetRealName() +" (DESCRI,CHAVE) "
cQuery += " SELECT X5_DESCRI, X5_CHAVE FROM SX5010 SX5 WHERE X5_TABELA = '96' AND X5_FILIAL = '01' AND SX5.D_E_L_E_T_ = ''"
//Envia o insert into para o banco de dados
if TCSqlExec(cQuery) < 0
LogMsg('', 0, 14, 1, '', '',"1-O comando SQL gerou erro:" + TCSqlError())
else
aliasSX5 := oTemp:GetAlias()
(aliasSX5)->(DBGoTop())
endif
oBrowse := FwMBrowse():New()
oBrowse:SetAlias((aliasSX5))