O array tratado no browse é um array multidimensional, tem titulo e conteúdo.
Código: Selecionar todos
aList := { ;
{ "CODIGO", { || tabela->Codigo } }, ;
{ "NOME", { || tabela->Campo } }, ;
{ "ENDERECO", { || tabela->Endereco } } }
Se as colunas vão tratar DBF, ADO, ou Array, precisam rotinas adequadas.
O detalhe importante aqui é que trata-se de título e conteúdo.
Pra facilitar, em DBF o default é todo conteúdo do DBF.
No caso da sua rotina, que vém usando, é todo conteúdo do retorno do ADO.
Tem aí um FOR/NEXT que pega a lista de campos do ADO pra criar esse array, essa lista de títulos e conteúdos.
Então, o que precisa fazer é alterar a rotina pra poder receber a lista como parâmetro, e só criar a lista completa quando o parâmetro for vazio.
Lembrando que a lista do tbrowse usa certas conversões durante a montagem.
Eu adotei passar sempre um array desse jeito, e criar o array do tbrowse a partir daí.
Acaba tendo vantagens, porque pode criar formatações diferentes da automática.
Exemplos:
Código: Selecionar todos
aList := { ;
{ "CODIGO", { || Str( tabela->Codigo, 6 ) }, ;
{ "CODIGO", { || Transform( tabela->Codigo, "@E 999,999" ) } }, ;
{ "CODIGO", { || Str( tabela->Codigo / 1000, 7, 3 ) } }, ;
{ "NOME", { || Pad( tabela->texto, 1, 15 ) } } , ;
{ "STATUS", { || iif( tabela->Valor < 0, "NEGATIVO", "POSITIVO" ) } } }
Vai poder fazer o browse com informações formatadas diferentes do gravado, apenas parte das informações, ou até informação que nem existe na tabela original.
Isso deixa tudo bem flexível.