Tbrowse com ADO: não exibir um campo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: não exibir um campo

Mensagem por cjp »

Alguém sabe me dizer se tem como não exibir um determinado campo num Tbrowse usando ADO?

Preciso incluir esse campo no select, porque vou usá-lo para algumas funções.

Mas preciso que o campo não apareça no Tbrowse.

É possível suprimi-lo do Tbrowse? Como faço isso?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tbrowse com ADO: não exibir um campo

Mensagem por JoséQuintas »

O array do tbrowse contém título e conteúdo, de cada coluna que vai ser mostrada.
Está usando aquela rotina automática, que acrescenta TODOS os campos.
Altere pra rotina receber o array por parâmetro, e só criar o array se o parâmetro estiver vazio.

Apenas exemplo de como se faz isso:

Código: Selecionar todos

FUNCTION teste( p1, p2, p3 )

   IF p1 == NIL
      // rotina atual de criar o array p1
   endif
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: não exibir um campo

Mensagem por cjp »

Desculpe, mas não te entendi bem.

Sim, estou usando o padrão que venho usando, herdado deste post: https://pctoledo.org/forum/viewto ... se+com+ado.

Nesse post eu até já tinha questionado algo parecido, e vc respondeu
Caso não tenha percebido, o browse deste post é pra isso.
Eu não entendi e deixei pra lá na época.

Voltei a pesquisar esse post agora, e continuo não entendendo.

Entendi que o browse pode passar os campos como parâmetros e daí eu poderia tratar os campos. Mas não entendi como fazer isso.

Poderia me explicar mais detalhadamente, por favor?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tbrowse com ADO: não exibir um campo

Mensagem por JoséQuintas »

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tbrowse com ADO: não exibir um campo

Mensagem por JoséQuintas »

Aproveitando e mostrando o link que indicou.

Código: Selecionar todos

 oConexao := ConexaoMySql()
 oConexao:Open()
 oTemporario := oConexao:Execute( "SELECT CODIGO, NOME, ENDERECO FROM CLIENTES ORDER BY NOME" )
 oTBrowse := { ;
   { "CODIGO", { || Pad( oTemporario:Fields( "CODIGO" ):Value, 10 ) } }, ;
   { "NOME",  { || Pad( oTemporario:Fields( "NOME" ):Value, 30 ) } }, ;
   { "ENDERECO", { || Pad( oTemporario:Fields( "ENDERECO" ):Value, 30 ) } } }
 BrowseADO( oTemporario, oTBrowse )
Tá exatamente como mostrei aqui.
A lista em OTBrowse é o que vai mostrar, não é obrigatório que seja igual ao SELECT.
Mas lógico... o que usa na lista precisa existir, no SELECT ou em algum lugar.

Código: Selecionar todos

 oConexao := ConexaoMySql()
 oConexao:Open()
 oTemporario := oConexao:Execute( "SELECT CODIGO, NOME, ENDERECO FROM CLIENTES ORDER BY NOME" )
 oTBrowse := { ;
   { "NOME",  { || Pad( oTemporario:Fields( "NOME" ):Value, 30 ) } } }
 BrowseADO( oTemporario, oTBrowse )
Pronto, agora só vai mostrar o nome, não importa que o SELECT tem mais coisas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Tbrowse com ADO: não exibir um campo

Mensagem por cjp »

Entendi. Muito obrigado. Resolvido.
Inacio de Carvalho Neto
Responder