Então imaginem o comando/fonte:
:cSql := "SELECT ENDERECO, NUMERO, BAIRRO, CIDADE, UF FROM JPCADASTRO"
:Execute()
cTexto := :String( "ENDERECO" ) + " " + :String( "NUMERO" ) + " " + :String( "BAIRRO" ) + " " + :String( "CIDADE" ) + " " + :String( "UF" )
Muito chato, muitas variáveis, parece trabalhoso.
Mas, pra que trazer vários campos e juntar depois?
Mais prático trazer pronto.
:cSql := "SELECT CONCAT( ENDERECO, ' ', NUMERO, ' ', BAIRRO, ' ', CIDADE, ' ', UF ) AS ENDENT FROM JPCADASTRO"
:Execute()
cTexto := :String( "ENDENT" )
Ao invés de vários campos, foi reduzido a um único através do SQL, veio pronto pra uso.
Comparando com DBF:
SET ALTERNATE TO LIST.TXT
SET ALTERNATE ON
LIST Trim( Endereco ) + " " + Trim( Numero ) + " " + Trim( Bairro ) + " " + Trim( cidade ) + " " + Trim( UF )
SET ALTERNATE OFF
SET ALTERNATE TO
Como eu já disse, é como se o SQL fosse um dBase evoluído pra ser usado também pelo aplicativo.
É como acima, executado o comando, fica tudo no LIST.TXT, o aplicativo vai trabalhar com esse resultado.