Clipper On Line • Ver Tópico - Browse Ativo

Browse Ativo

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Browse Ativo

Mensagempor rcb2002 » 05 Mar 2013 09:40

Pessoal, bom dia! Estou de volta num novo projeto e espero que esse FÓRUM esteja tão vivo quanto das outras vezes que precisei!
Bom, dessa vez por sugestão e pesquisa, estou usando um Browse no lugar de um Grid pra exibir o banco de dados e suas particularidades - que besteira eu fiz, se fosse com o Grid já teria terminado. Tem 3 coisas fundamentais que precisava ter:
1) Quero classificar o Browse com o evento ON HEADCLICK (depois de muito suor e pesquisa eu consegui)
2) Preciso criar um filtro por campo (somente um por vez) e o browse vai ter que atualizar quando filtrado (ainda estou trabalhando nisso)
3) Agora, o motivo da minha pergunta: não consigo atualizar os controles da página principal do programa (TEXTBOXes, COMBOs, etc) quando navego pelo BROWSE com o ON CHANGE! Gostaria de navegar e ir atualizando. Deve ser alguma besteira, claro, mas alguém pode me dar uma luz???

Grato mais uma vez e no aguardo!
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor alxsts » 05 Mar 2013 12:49

Olá!

Meu caro, se você postar o trecho de código em questão será de grande valia para quem puder analisar e para você mesmo, pois agilizará a solução do problema.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2212
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 13 vezes
Mens.Curtidas: 153 vezes

Browse Ativo

Mensagempor rcb2002 » 12 Mar 2013 10:42

Amigão, consegui fazer. Bastou uma procura mais aprofundada aqui no Forum e encontrei exatamente como fazer. Obrigado. Agora uma outra dúvida, ainda dentro do mesmo projeto: tenho uns ComboBoxes que vão buscar os itens de banco de dados. Eu gostaria de inserir um item nesse bando e atualizar "ao vivo", sem sair do sistema, essas CB's. Imaginei algo como


main.CB_Modelo.Refresh



mas não funcionou. Tem algum outro jeito?
Obrigado!
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor Pablo César » 12 Mar 2013 11:10

rcb2002 escreveu:
alxsts escreveu:
rcb2002 escreveu:o motivo da minha pergunta: não consigo atualizar os controles da página principal do programa (TEXTBOXes, COMBOs, etc) quando navego pelo BROWSE com o ON CHANGE! Gostaria de navegar e ir atualizando.
se você postar o trecho de código em questão será de grande valia para quem puder analisar e para você mesmo


Amigão, consegui fazer. Bastou uma procura mais aprofundada aqui no Forum e encontrei exatamente como fazer. Obrigado. Agora uma outra dúvida
Puxa colega você pede ajuda, solicitamos para que poste seu código ou até mesmo podia ser um código exemplo. Você resolve por si e aí deixa a todos nós sem saber qual foi a solução ? Como vamos poder ajudá-lo sem saber o que você está fazendo ? Gostaria de contar com a sua compreensão e disponibilidade, pois os outros colegas podem passar pelo que você passou e a exposição de soluções sempre é bem vinda. Assim sem código, fica difícil entender e poder te ajudar, isto já é de conhecimento de todos. Sabe lá se você empregou uma solução viável para o próximo passo...
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

Browse Ativo

Mensagempor rcb2002 » 12 Mar 2013 15:25

Cara... um milhão de desculpas. Como eu encontrei a resposta aqui no Forum mesmo achei que fosse ser advertido por isso. Preferi sair pela tangente, agradecendo, mencionando a fonte e seguindo para a próxima dúvida. O link onde encontrei a resposta foi esse:

http://www.pctoledo.com.br/forum/viewtopic.php?f=45&t=13848&p=80548&hilit=browse#p80548

Eu não tinha atualizado o registro:

go top
main.browse_1.value := recno()
main.browse_1.refresh


Feito isso, o problema foi resolvido. Lamento e não vai acontecer novamente. Estou adimplente agora pra aguardar uma solução para a minha dúvida seguinte?

Obrigado Pablo
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor Pablo César » 12 Mar 2013 16:15

rcb2002 escreveu:Cara... um milhão de desculpas. Como eu encontrei a resposta aqui no Forum mesmo achei que fosse ser advertido por isso.
Agradeço o seu retorno e a sua explicação. Não pense que foi ma advertência, longe disso, apenas uma ressalva para que não vire hábito com os participantes daqui do fórum. Entenda que só podemos ficar fortes, não por responder e resolver o problema a uma única pessoa. Senão que toda experiência relatada, seja na dúvida como na solução, pode significar um grande aprendizado para aqueles que procuram os mesmo que outros relataram.

Feito isso, o problema foi resolvido. Lamento e não vai acontecer novamente. Estou adimplente agora pra aguardar uma solução para a minha dúvida seguinte?
Importante o seu relato, as vezes uma figura expressa mais que palavras. O mesmo acontece em programação. Não se trata de alguém tirar proveito copiando o programa de outros, também sei que não foi por isso que você não postou o seu código. Como já dizemos anteriormente, é importante visualizar o código em questão, não precisa copiar o programa todo. Pode ser simplificado em forma de exemplo para que possamos situar-nos na mesma base que o seu programa está sendo construído. E nada melhor de exemplificar ou expor o código para uma solução mais adequada.

Veja, recentemente tive um caso que refiz 3 vezes o meu exemplo, pois nós não conseguíamos entender ao certo o que o colega queria. Isso demanda tempo, paciência e atenção. Tudo podia ser sintetizado se TODOS colocassem o código fontes ou código exemplificando o caso. Como disse, o interesse é mais entender a questão. Se você mostrar algo outros terão menos dificuldade em visualizar a questão do que analisar palavras por palavra.

Veja como são as coisas (não criticando, apenas exemplificando), você pediu ajuda e pediu desculpas até de forma muito expressiva, o que eu aceito e reconheço. Mas mesmo assim, você deixou de postar o seu caso em forma de código fonte. Volto a dizer, não precisa postar o código todo do programa inteiro com todos os módulos, apenas coloque os elementos em questão e que estão em tal e tal situação. Ai poderão sugerir diversas formas de como fazer (pela quantidade de pessoas interessadas em ajudar) mas se ela pouco puderam entender do que está sendo exposto, fica dificil de chamar atenção ou até mesmo reconhecer o caso como já tendo experimentado. Colocando o código, alguns poderão contribuir com mais energia e maiores detalhes. Pense é para o seu bem e de todos.

rcb2002 escreveu:tenho uns ComboBoxes que vão buscar os itens de banco de dados. Eu gostaria de inserir um item nesse bando e atualizar "ao vivo", sem sair do sistema
Assim de palavra, eu posso te dizer que a única forma de "atualizar" os dados de um ComboBox em tempo de execução é deletando todos os itens e adicionando-os todos novamente. Senão me engano a função para deletar é Form_1.Combo_1.DeleteAllItems e para adicionar é Form_1.Combo_1.AddItem(aViewOptions[i]) para você ver em forma de exemplo, baixe o View_Build_Log daqui da seção de Downloads e veja o View_Build_Log.prg.

Espeor ter ajudado e também espero não ter sido rude e nem parecido exigente demais... apenas penso na herança que deixamos para os outros. Beleza ? :xau
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

Browse Ativo

Mensagempor rcb2002 » 13 Mar 2013 11:20

Não cara... e qual seria o objetivo de usarmos um Forum assim senão pra aprender? Inclusive sobre como devemos "nos portar". Se não houvesse essa disciplina, esse cuidado quase rígido, o fórum não teria durado tanto (já tem mais de 10 anos, não?). Portanto, corrija mesmo. Advirta. No pain, No Gain!. Vc está completamente certo.
Tendo compreendido, já incluí na segunda mensagem o código que usei e a fonte, que foi aqui do Forum mesmo. Espero que tenha sido suficiente. Agradeço também pela dica dos CBoxes, vou esvaziá-los e encher de novo sempre que houver alteração. Quero aproveitar pra te perguntar algo: tenho outras dúvidas dentro do mesmo projeto, são coisas às vezes tão básicas pra vocês que acho que não seria produtivo gerar um tópico para cada uma delas. Estou pensando certo ou devo abrir um pra cada um (o que tornaria mais fácil, sem dúvida, a busca por tópicos por quem quisesse pesquisar)?
Eis aqui um caso "básico":
LOCAL m_entrada := alltrim( InputBox( 'Insira AQUI o novo item:'+ x_campo , 'Inclusão de Item' ) )
   If &nAlias->(DBSeek(m_entrada))
      MsgExclamation("Este item já existe! Você não pode cadastrá-lo duas vezes!","Atenção..:")
   Else
     [....]
   EndIf


Meu banco tem um item chamado OPTIPLEX 370. Quando tento cadastrar OPTIPLEX (sem o numeral) o sistema me retorna que o item já existe. Como posso evitar isso?
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor Pablo César » 13 Mar 2013 11:42

Ei rcb2002, eu ainda não sei o seu nome. Fico satisfeito de você ter concordado com o meu exposto.
Sobre abrir novos tópicos, o importante é o título do tópico que condiz com o verdadeiro problema ou dificuldade. Claro isso facilita. Entendo que seja do mesmo projeto, mas o assunto em foco não trata do seu projeto e sim da dificuldade que você estaria enfrentando. Assim que é importante que abra tópicos na seção correta e com título que realmente sintetize a causa do problema. Evitar "Socorro", "Preciso ajuda", "Este é para fulano...". Tem de haver bom senso.

rcb2002 escreveu:Meu banco tem um item chamado OPTIPLEX 370. Quando tento cadastrar OPTIPLEX (sem o numeral) o sistema me retorna que o item já existe. Como posso evitar isso?
Entendi. Essa procura você faz pelo DBSEEK() ? Isso acontece porque o seek ou dbseek encontra a string "OPTIPLEX" mas se você não remover os espaços do GET ou TEXTBOX, isto é a string tendo o mesmo tamanho do que o tamanho do que a chave foi composta, daí irá procurar de forma exata. (eu tinha escrito antes sobre o lSoftSeek, esqueça. Foi erro meu, desconsidere.)
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

Browse Ativo

Mensagempor rcb2002 » 18 Mar 2013 15:28

Cara me desculpa, to quebrando a cabeça e ainda não consegui o que quero: No trecho do código anexado digo eu já removo os espaços com o ALLTRIM da variável m_entrada mas isso não resolveu. Como o campo no meu DB tinha 25 caracteres, aumentei o tamanho da variável com o PADR para 25 caracteres e só assim encontrou. Mas não acredito que esse seja o caminho correto.
E numa pergunta acima, o grande problema do 'refresh" nos ComboBoxes: veja que a sugestão do Form_1.Combo_1.DeleteAllItems atende mas não consigo reconstruí-los com a nova estrutura, já que não existe o Form_1.Combo_1.Refresh. Alguma idéia sobre como proceder?
Obrigado novamente!
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor rcb2002 » 28 Ago 2013 21:02

Pablo, boa noite!

Estava revendo as postagens e esta em especial ficou sem uma resposta: Meu nome é Ricardo César!
Obrigado mais uma vez!
rcb2002
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 19 Jan 2010 22:16
Cidade/Estado: Salvador
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Browse Ativo

Mensagempor Pablo César » 29 Ago 2013 08:11

Ahhh olá Ricardo, boa noite !

rcb2002 escreveu:Meu banco tem um item chamado OPTIPLEX 370. Quando tento cadastrar OPTIPLEX (sem o numeral) o sistema me retorna que o item já existe. Como posso evitar isso?
..//..
Como o campo no meu DB tinha 25 caracteres, aumentei o tamanho da variável com o PADR para 25 caracteres e só assim encontrou. Mas não acredito que esse seja o caminho correto.
Sim isto está correto, tanto em Harbour como em Clipper, pois você disse que no dbf tem "OPTIPLEX 370" cadastrado e quando você confirma "OPTIPLEX" já diz que existe. Pois entende-se que a condição é atendida ao encontrá-la. Pois você deveria então usar o dbSeek( m_entrada, .T.) em vermelho é o parâmetro lSoftSeek.

If the SOFTSEEK flag is on or if <lSoftSeek> is set to a logical true (.T.) the value of Found() will be a logical false and Eof() will be false if there is an item in the index key with a greater value than the key expression <expKey>; at this point the record pointer will position itself on that record. However, if there is no greater key in the index, Eof() will return a logical true (.T.) value. If <lSoftSeek> is not passed, the function will look to the internal status of SOFTSEEK before performing the operation. The default of <lSoftSeek> is a logical false (.F.)


rcb2002 escreveu:E numa pergunta acima, o grande problema do 'refresh" nos ComboBoxes: veja que a sugestão do Form_1.Combo_1.DeleteAllItems atende mas não consigo reconstruí-los com a nova estrutura, já que não existe o Form_1.Combo_1.Refresh. Alguma idéia sobre como proceder?
Exemplo:

Win_1.Combo_2.DeleteAllItems
Win_1.Combo_2.AddItem( <cada_item> )

aItem:={"item 1","ietm 3","item 4"}
For i=1 To Len(aItem)
     Win_1.Combo_2.AddItem( aItem[i] )
Next


Senão conseguir, poste parte do seu código que irei ajudar da forma mais adequada.
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro