Dúvida na criação de uma função de busca
Enviado: 10 Jun 2016 10:12
Olá, pessoal. Estou desenvolvendo um sistema em hmg e estou criando uma função genérica para retornar o resultado de uma busca para um campo. A ideia é a seguinte: o usuário clica no botão de pesquisa e a janela retorna o código e a descrição. O Daniel fez um exemplo mais completo, no qual ele preenche o formulário totalmente https://youtu.be/rVIBwcHITJU?list=PLJtq ... 5mnO&t=358.
Mas não é isso que eu estou tentando fazer, é algo parecido. O meu objetivo é ter uma função genérica que retorne somente o nome e a descrição (somente, por enquanto). Eu criei o grid usando a HMG IDE e um prg associado. Mas na minha função genérica eu preciso de alguns dados (parâmetros), são eles :
( 1 ) O select que fará a consulta. Isso é fácil. Eu estou passando parâmetro.
( 2 ) O nome dos campos no formulário que receberão o código e a descrição. Esses eu posso deduzir a partir do nome dos campos do select.
( 2 ) O nome da janela que contém o formulário. O nome dessa janela eu posso também passar como parâmetro, mas eu não queria fazer assim. Tem como conseguir o nome da janela que contém o formulário automaticamente ?
Desculpem se eu estou detalhando muito. Se alguém tiver alguma dica sobre como fazer essa função por favor poste a ideia geral.
Segue a minha função principal (o trecho principal)
O trecho que retorna os dados é ...
Bom... é isso.
Não sei se fui claro o suficiente, eu cheguei a usar a Minigui mas já tem muitos anos. Me considero um iniciante. Se alguém tiver uma solução melhor e quiser compartilhar ajudaria muito!
:xau
Mas não é isso que eu estou tentando fazer, é algo parecido. O meu objetivo é ter uma função genérica que retorne somente o nome e a descrição (somente, por enquanto). Eu criei o grid usando a HMG IDE e um prg associado. Mas na minha função genérica eu preciso de alguns dados (parâmetros), são eles :
( 1 ) O select que fará a consulta. Isso é fácil. Eu estou passando parâmetro.
( 2 ) O nome dos campos no formulário que receberão o código e a descrição. Esses eu posso deduzir a partir do nome dos campos do select.
( 2 ) O nome da janela que contém o formulário. O nome dessa janela eu posso também passar como parâmetro, mas eu não queria fazer assim. Tem como conseguir o nome da janela que contém o formulário automaticamente ?
Desculpem se eu estou detalhando muito. Se alguém tiver alguma dica sobre como fazer essa função por favor poste a ideia geral.
Segue a minha função principal (o trecho principal)
Código: Selecionar todos
/****m* Grupos/busca_generica
*
* NAME
* busca_generica
*
* DESCRIPTION
* Consulta de grupos.
* Rotina que abre a janela principal responsável pelo grid de consultas
*
* SOURCE
*/
FUNCTION busca_generica( cSelect )
scFormularioOrigem := "cadastro_produtos" // <====== AQUI! Como conseguir automaticamente ?
oSQL := TVladSQL():New()
IF .NOT. oSQL:IsOpen()
MsgBox("Erro durante a conexão com o banco de dados")
RETURN NIL
ENDIF
oSQL:SetLimit( 7 )
oSQL:SetQuery( cSelect )
IF IsWindowActive( busca_generica )
doMethod( "busca_generica" , "MINIMIZE" )
doMethod( "busca_generica" , "RESTORE" )
doMethod( "busca_generica" , "SETFOCUS" )
ELSE
Load window busca_generica
busca_generica.Center
RefreshGrid()
busca_generica.Activate
ENDIF
oSQL:Close()
RETURN NIL
/*******/
Código: Selecionar todos
/****m* Grupos/cadastro_grupos_on_dbl_click
*
* NAME
* cadastro_grupos_on_dbl_click
*
* DESCRIPTION
*
* Duplo click sobre o grid retorna dados para o formulário anterior
*
* SOURCE
*/
***
* Pré-Alteração
****
Function busca_generica_on_dbl_click()
Local nPos
Local aData
nPos := GetProperty( "busca_generica" , "Grid_data" , "value" )
IF nPos <> 0
aData := GetProperty( "busca_generica" , "Grid_data" , "item" , nPos )
IF LEN( aData ) > 0
// scFormularioOrigem foi passada na chamada da função. Ela é uma variável estática, por isso eu posso vê-la aqui.
SetProperty( scFormularioOrigem , "Text_" + oSQL:FieldName( 1 ) , "value" , aData[ 1 ])
SetProperty( scFormularioOrigem , "Text_nome_" + oSQL:FieldName( 2 ) , "value" , aData[ 2 ])
ENDIF
ENDIF
Return
/*******/
Não sei se fui claro o suficiente, eu cheguei a usar a Minigui mas já tem muitos anos. Me considero um iniciante. Se alguém tiver uma solução melhor e quiser compartilhar ajudaria muito!
:xau