Objeto Grid, seek, refresh
Moderador: Moderadores
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Objeto Grid, seek, refresh
Alô pessoal!
Espero que tenham curtido bem o carnaval. Pra "abrir o ano" (dizem que o ano realmente começa depois do carnaval) uma dúvida:
Fiz um GRID de uma tabela indexada, e quando faço um SEEK nessa tabela dou o REFRESH no GRID mas nada acontece, ele permanece como se no topo da tabela. Fiz um teste e o seek está funcionando, no caso com uma busca por data. Devia ser simples, pois no BROWSE isso é molinho. Usei o GRID nesse caso como aprendizado e não está dando certo apesar de ver os exemplos do HMG e o guia fornecido pelos colegas aqui.
Se alguem já passou por isso e quiser me dar uma luz, desde já agradeço.
Saudações,
Mario.
Espero que tenham curtido bem o carnaval. Pra "abrir o ano" (dizem que o ano realmente começa depois do carnaval) uma dúvida:
Fiz um GRID de uma tabela indexada, e quando faço um SEEK nessa tabela dou o REFRESH no GRID mas nada acontece, ele permanece como se no topo da tabela. Fiz um teste e o seek está funcionando, no caso com uma busca por data. Devia ser simples, pois no BROWSE isso é molinho. Usei o GRID nesse caso como aprendizado e não está dando certo apesar de ver os exemplos do HMG e o guia fornecido pelos colegas aqui.
Se alguem já passou por isso e quiser me dar uma luz, desde já agradeço.
Saudações,
Mario.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Objeto Grid, seek, refresh
Mario, poderia postar o código onde faz o seek ? Eu assignaria o valor do RECNO ao grid, tipo:
Form_1.Grid_1.RecNo := <numero do registro encontrado pelo SEEK>
Form_1.Grid_1.RecNo := <numero do registro encontrado pelo SEEK>
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Oi Pablo!
Eu tentei, mas não deu certo...
Dá um erro em tempo de execução:
GRID: SET RECNO PROPERTY NOT ALLOWED FOR FILTRED/CONDITIONAL INDEXED TABLES
Imagino que seja o SET DELETED ON que sempre uso. É necessário nos programas que faço.
Dizem que o GRID é mais avançado que o BROWSE, mas ele não dá essa zica não...
Abraço,
Mario.
Eu tentei, mas não deu certo...
Código: Selecionar todos
FUNCTION BuscaOperac()
DBSELECTAR("OPERFIRM")
DBSETORDER(1)
IF ! DBSEEK(DTOS(Frm_Operacao.DatePicker.Value))
MSGINFO("DATA NÃO LOCALIZADA")
DBGOBOTTOM()
ENDIF
Frm_Operacao.Grid_1.Recno := OPERFIRM->(RECNO())
Frm_Operacao.Grid_1.refresh
RETURN .T.
GRID: SET RECNO PROPERTY NOT ALLOWED FOR FILTRED/CONDITIONAL INDEXED TABLES
Imagino que seja o SET DELETED ON que sempre uso. É necessário nos programas que faço.
Dizem que o GRID é mais avançado que o BROWSE, mas ele não dá essa zica não...
Abraço,
Mario.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Objeto Grid, seek, refresh
No Browse eu faço assim: SetProperty( "Win_Edit", "Browse_1", "Value", (cArea)->( RecNo() ) )
Mas antes coloco:
DoMethod("Win_Edit","Browse_1","SetFocus")
DoMethod("Win_Edit","Browse_1","Refresh")
Mas antes coloco:
DoMethod("Win_Edit","Browse_1","SetFocus")
DoMethod("Win_Edit","Browse_1","Refresh")
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Objeto Grid, seek, refresh
Mário, tenta assim:
Abraços,
Código: Selecionar todos
Frm_Operacao.Grid_1.Value := OPERFIRM->(RECNO())Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Fabio, valeu as dicas. Em verdade para o BROWSE não precisei fazer nada de especial, o form principal do programa gerencia uma tabela com direito a inclusão, alteração e exclusão com o BROWSE. Tudo simples e direto.
Toledo, não funcionou. O GRID fica parado no inicio da tabela, mesmo com o REFRESH, após um bem sucedido SEEK. Vai entender... Vou insistir, pois é como aprendemos a lidar com a ferramenta. Se não tiver jeito, vou pro BROWSE, fazer o que?
Obrigado, gente!
Sds,
Mario.
Toledo, não funcionou. O GRID fica parado no inicio da tabela, mesmo com o REFRESH, após um bem sucedido SEEK. Vai entender... Vou insistir, pois é como aprendemos a lidar com a ferramenta. Se não tiver jeito, vou pro BROWSE, fazer o que?
Obrigado, gente!
Sds,
Mario.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Objeto Grid, seek, refresh
Mário, faz um teste com este código:
Abraços,
Código: Selecionar todos
#include "hmg.ch"
Function Main
Set Date to British
Private aCampos := { {"DATA","D",8,0}, {"CAMPO1","C",30,0}, ;
{"CAMPO2","C",30,0}, {"CAMPO3","N",10,0},;
{"CAMPO4","L",1,0}, {"CAMPO5","M",10,0} }
If !File( "TESTE.DBF" )
DBcreate( "TESTE", aCampos )
EndIF
aCtrl_1 := {'DATEPICKER','UPDOWN'}
aCtrl_2 := {'TEXTBOX','CHARACTER'}
aCtrl_3 := {'TEXTBOX','CHARACTER'}
aCtrl_4 := {'TEXTBOX','NUMERIC','9999999999'}
aCtrl_5 := { 'CHECKBOX' , 'Sim' , 'Nao' }
aCtrl_6 := { 'EDITBOX' }
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 800 ;
HEIGHT 510 ;
TITLE 'Busca em Grid' ;
MAIN
DEFINE MAIN MENU
POPUP 'Fazer Busca'
ITEM 'Busca 1 - Recno' ACTION BuscaOperac(1)
ITEM 'Busca 2 - Value' ACTION BuscaOperac(2)
END POPUP
END MENU
USE TESTE
If Lastrec()==0
For i=(date()-180) to date()
Append Blank
TESTE->data:=i
TESTE->Campo1:="Nome "+STR(RECNO())
TESTE->Campo2:="Endereco "+STR(RECNO())
TESTE->Campo3:=RECNO()
TESTE->Campo4:=(RECNO()/2)=INT(RECNO()/2)
Next
INDEX ON DTOS(data) TO TESTE
Endif
SET INDEX TO TESTE
GO TOP
@ 10,10 GRID Grid_1 ;
WIDTH 770 ;
HEIGHT 440 ;
HEADERS {'Coluna 1','Coluna 2','Coluna 3','Coluna 4','Coluna 5','Coluna 6'} ;
WIDTHS {100,140,140,140,100,100};
VALUE { 1 , 1 } ;
EDIT ;
COLUMNCONTROLS { aCtrl_1 , aCtrl_2 , aCtrl_3 , aCtrl_4 , aCtrl_5 , aCtrl_6 } ;
ROWSOURCE "Teste" ;
COLUMNFIELDS { 'Data' , 'Campo1' , 'Campo2' , 'Campo3' , 'Campo4' , 'Campo5' } ;
ALLOWAPPEND ;
ALLOWDELETE
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
FUNCTION BuscaOperac(vQual)
Local vData, Title , aLabels , aInitValues , aFormats , aResults
IF vQual==1
Title:='Seleciona usando Recno'
ELSE
Title:='Seleciona usando Value'
ENDIF
aLabels := { 'Informe a Data:' }
aInitValues := { Date() }
aFormats := { Nil }
aResults := InputWindow ( Title , aLabels , aInitValues , aFormats )
If aResults [1] == Nil
MsgInfo ('Não foi informado uma data','Cancelado')
Retu Nil
Else
vData := aResults [1]
Endif
If ! DBSEEK(DTOS(vData))
MSGINFO("DATA NÃO LOCALIZADA")
DBGOBOTTOM()
ENDIF
IF vQual==1
Form_1.Grid_1.Recno := OrdKeyNo()
ELSE
Form_1.Grid_1.Value := {OrdKeyNo(),1}
ENDIF
RETURN .T.Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Toledo, rodei o codigo que vc mandou e funcionou. Tentei colar o OrdKeyNo() na minha função e não atualiza. Imagino que tenho quer configurar a propriedade VALUE com um valor inicial ou algo assim. Vou fuçar e dou noticias.
Como sempre, obrigado...
sds,
Mario.
Como sempre, obrigado...
sds,
Mario.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Objeto Grid, seek, refresh
Mário, observe que no meu código eu não estou usando o Refresh.
Abraços,
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Toledo, eu notei. E faz diferença. Com ele não acha, vai pro topo do GRID.
Uma coisa: Rodei seu programa com SET DELETED ON e deu pau no RECNO(). Erro que comentei acima. Fica a dica pros que lerem. Como é um tipo de filtro, zica o GRID. Isso é ruim pois restringe o uso em tabelas pequenas, de pouca importância, pois em um cadastro de clientes, por exemplo, quendo se deleta, tem que sumir com o cabra. E não se pode dar PACK numa tabela a qualquer hora...
Em tese, pro meu programa o VALUE do GRID devia resolver com o OrdKeyNo(), mas não está funcionando bem. O SEEK acha o registro, o OrdKeyNo() informa corretamente, mas não para no registro correto. Minha tabela está com quatro indices, usando CDX. Verifiquei SET SOFT (está OFF), SET CENT (ON), SET EPOC (1964). Não é SEEK. É o GRID. Alguma coisa está provocando falha no seu ponteiramento interno.
A luta continua. Insisto pois calculo que o GRID será util no futuro, então vamos lá...
Abraço,
Mario.
Uma coisa: Rodei seu programa com SET DELETED ON e deu pau no RECNO(). Erro que comentei acima. Fica a dica pros que lerem. Como é um tipo de filtro, zica o GRID. Isso é ruim pois restringe o uso em tabelas pequenas, de pouca importância, pois em um cadastro de clientes, por exemplo, quendo se deleta, tem que sumir com o cabra. E não se pode dar PACK numa tabela a qualquer hora...
Em tese, pro meu programa o VALUE do GRID devia resolver com o OrdKeyNo(), mas não está funcionando bem. O SEEK acha o registro, o OrdKeyNo() informa corretamente, mas não para no registro correto. Minha tabela está com quatro indices, usando CDX. Verifiquei SET SOFT (está OFF), SET CENT (ON), SET EPOC (1964). Não é SEEK. É o GRID. Alguma coisa está provocando falha no seu ponteiramento interno.
A luta continua. Insisto pois calculo que o GRID será util no futuro, então vamos lá...
Abraço,
Mario.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Objeto Grid, seek, refresh
Olá Mário, notei que com o Refresh acontece isto mesmo, retorna para o primeiro registro. Então, por este motivo retirei o Refresh neste meu exemplo.
Bom, estou usando a MiniGui oficial, versão HMG 3.0.35 (http://www.hmgforum.com/site).
Abraços,
Fiz a mesma coisa aqui, coloquei o SET DELETED ON neste meu exemplo e depois exclui dois registros no arquivo TESTE.DBF, foram o registro número 10 (Nome 10) e 20 (Nome 20). Não usei o pack, e funcionou sem erro algum, mas só é posiciona certinho na data escolhida com o RECNO, já o VALUE posiciona duas datas pra frente.Mario Mesquita escreveu:Rodei seu programa com SET DELETED ON e deu pau no RECNO()
Bom, estou usando a MiniGui oficial, versão HMG 3.0.35 (http://www.hmgforum.com/site).
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Bom tarde a todos.
Toledo, estou usando a 3.0.27 e me parece estável, mas sabe-se lá... Tô tentando até agora e fiquei num beco sem saída, aparentemente. Penso que algo no ambiente do programa esteja emperrando o GRID. Mistério...
Tenho medo de atualizar e "desandar a maionese" aqui. Estou com prazo pra entregar um trabalho e temo ter que perder muito tempo acertando setups para usar a nova versão. Mas claro, é melhor atualizar, vai que tem um bug e já tá ok?
Valeu a força. Qualquer avanço, aviso a voce. Obrigado de novo.
Sds,
Mario.
Toledo, estou usando a 3.0.27 e me parece estável, mas sabe-se lá... Tô tentando até agora e fiquei num beco sem saída, aparentemente. Penso que algo no ambiente do programa esteja emperrando o GRID. Mistério...
Tenho medo de atualizar e "desandar a maionese" aqui. Estou com prazo pra entregar um trabalho e temo ter que perder muito tempo acertando setups para usar a nova versão. Mas claro, é melhor atualizar, vai que tem um bug e já tá ok?
Valeu a força. Qualquer avanço, aviso a voce. Obrigado de novo.
Sds,
Mario.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Alô, vcs, voltei.
Toledo, algo estranho acontece.
Baixei a 3.0.35 e compilei o programa. funcionou. Só que de repente, recompilo ou rodo de novo e o erro acontece de novo. Deleto o .EXE e funciona. Recompilo e não funciona.
E agora? Não é estranho? Pelo que li no histórico de atualizações, o GRID tinha bugs a rodo... Será que numa rotina simples ele vai bem, mas dentro de uma sistema um pouco mais complexo, ele falha??
Abraço,
Mario.
Toledo, algo estranho acontece.
Baixei a 3.0.35 e compilei o programa. funcionou. Só que de repente, recompilo ou rodo de novo e o erro acontece de novo. Deleto o .EXE e funciona. Recompilo e não funciona.
E agora? Não é estranho? Pelo que li no histórico de atualizações, o GRID tinha bugs a rodo... Será que numa rotina simples ele vai bem, mas dentro de uma sistema um pouco mais complexo, ele falha??
Abraço,
Mario.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Ultima forma: Está funcionando corretamente. Por que? Não sei. Fechei a IDE, abri de novo, deletei o .EXE, recompilei, funcionou.
Estou tentando forçar erro nele. Aviso o resultado.
Sds,
Mario.
Estou tentando forçar erro nele. Aviso o resultado.
Sds,
Mario.
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Re: Objeto Grid, seek, refresh
Olá, pessoal. Boa tarde a todos.
Volto no post para relatar um comportamento estranho do GRID. Testando meu programa, tem eventos que quando abro a tabela e a edito, o GRID não mostra a mesma, ficando todo preto. Os dados estão lá, posso editá-los, mas o GRID não faz o display. Percebi que isso ocorre em momentos específicos, quando abro e fecho a tabela. Na rotina em questão, o GRID está ok. Saio da rotina e fecho a tabela. Vou em outra rotina, a tabela é aberta de novo. Saio desta e fecha-se a tabela. Volto na rotina do GRID, e aí acontece. Ela aparece toda preta, sem exibir as celulas. Elas estão lá, pode ser editadas, mas não as vejo.
Deve ser alguma coisa que estou fazendo errado ou deixando de fazer. Mas o fato é que com BROWSE, tudo roda beleza, sem sustos. O GRID parece mais manhoso. Ou tem falhas ainda não corrigidas. Não tenho como atestar isso, dada minha pouca experiencia com as ferramentas, logo se voces viram algo sobre isso e quiserem comentar, fiquem a vontade.
Obrigado a todos,
Mario.
Volto no post para relatar um comportamento estranho do GRID. Testando meu programa, tem eventos que quando abro a tabela e a edito, o GRID não mostra a mesma, ficando todo preto. Os dados estão lá, posso editá-los, mas o GRID não faz o display. Percebi que isso ocorre em momentos específicos, quando abro e fecho a tabela. Na rotina em questão, o GRID está ok. Saio da rotina e fecho a tabela. Vou em outra rotina, a tabela é aberta de novo. Saio desta e fecha-se a tabela. Volto na rotina do GRID, e aí acontece. Ela aparece toda preta, sem exibir as celulas. Elas estão lá, pode ser editadas, mas não as vejo.
Deve ser alguma coisa que estou fazendo errado ou deixando de fazer. Mas o fato é que com BROWSE, tudo roda beleza, sem sustos. O GRID parece mais manhoso. Ou tem falhas ainda não corrigidas. Não tenho como atestar isso, dada minha pouca experiencia com as ferramentas, logo se voces viram algo sobre isso e quiserem comentar, fiquem a vontade.
Obrigado a todos,
Mario.