Campos Tabela TBROWSEDB()

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

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Campos Tabela TBROWSEDB()

Mensagem por jelias »

Amiguinhos,

Faço uso do TbrowseDB() em meus sistemas e sempre que preciso mostrar um campo que não está no DBF eu crio o mesmo. Há alguma forma de buscar este campo em outra tabela e disponibilizar na tabela ativa, evitando assim criar mais campo no banco de dados.

- Exemplo: Faço um TbrowseDB() em uma tabela de pedidos de vendas e neste banco contém o campo codcli que é o código do cliente, entretanto se preciso disponibilizar o nome do cliente, atualmente eu crio este campo no DBF. O que gostaria é de buscar esta informação no banco de clientes e apenas apresentar durante o TbrowseDB(), evitando assim criar mais campos.

Saudações,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campos Tabela TBROWSEDB()

Mensagem por Itamar M. Lins Jr. »

Tem como, mas isso depende... esse é um dilema do DBF.
Porque em SQL vem da forma que quisermos, eu acho melhor criar o campo nos DBF´s
No seu caso é possível usar codblock no field.
oBro:addcolumn(tbcolumnnew("Nome Cliente" ,{||funcaoretornanomecliente()}))
ou se usar set relation
oBro:addcolumn(tbcolumnnew("Nome Cliente" ,{||cliente->nome}))

Funcaoretornanomecliente()
Local cStr := "Não localizado"
if cl->(DbSeek(codcli))
cStr := cliente->nome
Endif
Return cStr

Obs.: Pelo tamanho dos HDs e velocidade das CPUs acho que não compensa mais isso.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Campos Tabela TBROWSEDB()

Mensagem por alxsts »

Olá!

Nestes casos, tudo fica fácil usando-se as "aliased expressions" disponíveis tanto no Clipper quanto no [x]Harbour. Com isso, você pode especificar várias ações para um alias. O resultado final será sempre o da última expressão.

Para atender a tua necessidade atual, pode usar:

Código: Selecionar todos

oBro:addColumn( tbColumnNew("Nome Cliente", { || Cliente->( DbSeek( CustId), CustName ) } ) )
Se quiser sofisticar, pode usar:

Código: Selecionar todos

oBro:addColumn( tbColumnNew("Nome Cliente", { || If( Empty( Cliente->( DbSeek( CustId ), CustName ) ), "Não cadastrado", CustName ) } ) )
(Editado para ajustar sintaxe do código exemplo)
[]´s
Alexandre Santos (AlxSts)
Responder