Clipper On Line • Ver Tópico - Refresh() no dbedit ?

Refresh() no dbedit ?

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

Moderador: Moderadores

 

Refresh() no dbedit ?

Mensagempor paiva_dbdc » 30 Mai 2020 09:26

Teria como atualizar o dbedit ?!

com o dbedit apresento as informações na tela OK

ai abro uma tela para pedir uma informação tipo um código de barras

ao informar o código somo um na quantidade la na base do arquivo que esta sendo exibido no dbedit

como fazer para o dbedit atualizar a informação SEM que eu precise fechar a tela e voltar para o dbedit ?

ou seja cada vez que EU alterasse a base de dados faria tipo um Refresh() la no dbedit

até pensei em criar uma variavel ai para ar o refresh eu setava essa variavel, encavalava varias teclas e voltava para o dbedit com return(2)

ai com as teclas em fila daria um jeito de voltar onde estava rs complicado

desde já agradeço pela ajuda

Paiva
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 342
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Refresh() no dbedit ?

Mensagempor Vlademiro » 30 Mai 2020 10:31

Rapaz, já faz muitos anos que não uso dbedit. Sempre uso o tbrowse. Com tbrowse da pra fazer isso, mas como a pergunta envolve dbedit, vou dizer como eu fiz. Lembro que da última vez, eu botei o dbedit dentro de um laço. Atribuí uma tecla para fazer a rotina desejada e na função de usuário da dbedit eu saia dela ao chamar a função. Após a saída eu testava com lastkey, se fosse esc eu saia do laço, se fosse minha atualização dava loop.

Exemplo
Do while .t.
   
    Bla bla
    Dbedit ()
    If lastkey = esc
        Sai
   
    Endif
Enddo
   



Posso sair da dbedit com esc ou através da função definida pelo usuário.

Fica feio mas não me recordo de ter conseguido atualizar sem sair da dbedit e voltar de novo.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Refresh() no dbedit ?

Mensagempor JoséQuintas » 30 Mai 2020 13:00

O melhor seria o tbrowse, mas talvez algo parecido com isto.

lSair := .F.
DO WHILE .T.
   dbEdit()
   IF lSair
      EXIT
   ENDIF
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

Refresh() no dbedit ?

Mensagempor Itamar M. Lins Jr. » 30 Mai 2020 14:35

Ola!
Já viram o código da função DbEdit() no harbour ?
FUNCTION dbEdit( nTop, nLeft, nBottom, nRight, ;
      acColumns, xUserFunc, ;
      xColumnSayPictures, xColumnHeaders, ;
      xHeadingSeparators, xColumnSeparators, ;
      xFootingSeparators, xColumnFootings )
...
   oBrowse := TBrowseDB( nTop, nLeft, nBottom, nRight )

Copiar (dbedit.prg) do \src\rtl\dbedit.prg e colar ai no seu programa com o nome MyDbEdit() por exemplo e seja feliz!

Sauda
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6944
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 505 vezes

Refresh() no dbedit ?

Mensagempor Itamar M. Lins Jr. » 30 Mai 2020 14:54

Ola!
Parece que nem precisa.
...&xUserFunc( nMode, oBrowse:colPos )

A função do usuário do dbedit vem com dois parâmetros ?
Basta pedir o refresh() pela função.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6944
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 505 vezes

Refresh() no dbedit ?

Mensagempor ANDRIL » 30 Mai 2020 19:05

paiva_dbdc escreveu:Teria como atualizar o dbedit ?!

Uso bastante DbEdit nos meus sistemas, faço a busca pelo produto e insiro no pedido em seguida:
GO BOTTOM
keyb chr(255)
return 2


O item aparece na ultima linha do Dbedit normalmente não preciso sair dele com return 0 e entrar novamente.
Agora se este Dbedit estiver exibindo algo montado com um índice temporário, terá que sair e reconstruí-lo para que o novo
registro faça parte dele.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1271
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Refresh() no dbedit ?

Mensagempor JoséQuintas » 30 Mai 2020 19:30

Tem razão, era só olhar os códigos de retorno da função de usuário.

  DBEDIT() User Function Return Values
     ------------------------------------------------------------------------
     Value   Dbedit.ch      Description
     ------------------------------------------------------------------------
     0       DE_ABORT       Abort DBEDIT()
     1       DE_CONT        Continue DBEDIT()
     2       DE_REFRESH     Force reread/repaint and continue; after repaint,
                            process keys and go to idle
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

Refresh() no dbedit ?

Mensagempor Vlademiro » 31 Mai 2020 12:37

Bom saber. Tem coisa do tempo do Clipper que eu desconheço.
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Refresh() no dbedit ?

Mensagempor paiva_dbdc » 31 Mai 2020 21:32

BOA noite
não entendi muito bem rs.

dentro do dbedit eu controlo as teclas com a tecla / (47) faço um get e somo 1 na base de dados.

se retorno (2) o dbedit faz o refrash la na exibicao OK +++++ ele para no dbedit

ai teria que apertar / para poder pedir o get denovo
mesmo que eu force uma tecla 47 o DBedit NAo respeita tipo ele limpa o buffers de teclas rs

tambem tentei com o retorno (0) encerrar o dbedit e forçando depois o / antes de chamar o dbedit de novo no loop

nao consegui

TAMBEM tentei SEM loop apos o get forcei a tecla / e fiz o return(2) a seguir

ele faz o refrash la no dbedit ++++ nao ativa a tecla /

se tivesse uma forma dele aceitar a tecla / chr(47) resolveria rs

na realidade sao tipo CAPA e itens na caba uso o tbrowser e os itens o dbedit (NAO consegui usar o browser nos itens uma vez por isso uso o dbedit nos itens)

como sera o refrash se usar o browser ?



_fim_dbedit = .f.
do while .t.
dbedit(li,ci,lf,cf,vetor1,"_craitec_critec_ok",,cabec1,"Ä","³","Ä")
if _fim_dbedit = .t.
exit
else
keyboard chr(47) && forca tecla INS
endif
enddo

function _craitec_critec_ok && funcao p/ auxiliar a funcao ccabped_nome()
parameters modo

do case
case _lastkey == 27 && esc
clear typeahead && limpa buffer do teclado
return(0) && encerrar dbedit()

case _lastkey == 47

@ lf-1,02 clear to lf-1,78
save screen
tfornecc = space(tlenfornecc)
@ lf-1,02 say "Codigo Barras:"
@ lf-1,17 get tfornecc pict '@K!'
Wread(Njanela)
if lastkey() == 27
restore screen
else
clear gets
keyboard chr(47) && forca tecla INS
endif
return(2)
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 342
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Refresh() no dbedit ?

Mensagempor ANDRIL » 01 Jun 2020 01:08

Tente assim:

nKey=0
dbedit(li,ci,lf,cf,vetor1,"_craitec_critec_ok",,cabec1,"Ä","³","Ä")

function _craitec_critec_ok && funcao p/ auxiliar a funcao ccabped_nome()
parameters modo

do case
case _lastkey == 27 && esc
clear typeahead && limpa buffer do teclado
return(0) && encerrar dbedit()

case _lastkey == 47 .or. nKey=47

@ lf-1,02 clear to lf-1,78
save screen
tfornecc = space(tlenfornecc)
@ lf-1,02 say "Codigo Barras:"
@ lf-1,17 get tfornecc pict '@K!'
Wread(Njanela)
if lastkey() == 27
nKey=0
restore screen
else
clear gets
keyboard chr(47) && forca tecla INS
nKey=47
endif
return(2)
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1271
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Refresh() no dbedit ?

Mensagempor paiva_dbdc » 01 Jun 2020 08:55

BOM dia
com o dbedit NAO consegui.

entao testei com o tbrowser e funcionou ai troquei o dbedit por uma funcao que emula o tbrowser

*dbedit(li+1,ci+1,lf-2,cf-1,vetor1,"_craitec_critec_ok",,cabec1,"Ä","³","Ä")
oadbedit(li+1,ci+1,lf-2,cf-1,vetor1,"_craitec_critec_ok",,cabec1,"Ä","³","Ä")

case _lastkey == 47
tfornecc = space(tlenfornecc)
@ lf-1,02 say "Codigo Barras:"
@ lf-1,17 get tfornecc pict '@K!' valid _crapedc_crapedc_co(@tfornecc ,lf-1,17,"tfornecc")
Wread(Njanela)
set cursor off
if lastkey() == 27
restore screen
else
clear typeahead
clear gets
keyboard chr(47) && forca tecla /
endif

select critec
return(2)

Obrigado a todos

PAiva
paiva_dbdc
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 342
Data de registro: 12 Nov 2012 08:58
Cidade/Estado: uberlandia mg
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Refresh() no dbedit ?

Mensagempor jmsilva » 03 Jun 2020 13:55

Segue um exemplo que acho interessante sobre o DBEdit()
#INCLUDE "DBEDIT.CH"
#INCLUDE "INKEY.CH"

REQUEST HB_GT_WIN_DEFAULT
Function Main()
   //Local aCols := {{"PadR(AllTrim(FIRST)+' '+AllTrim(LAST),30)", {|x| IIf(FIELD->SALARY<10000, {3,2}, IIf(FIELD->SALARY<100000,{1,2},{4,5}))}},;
   //             "CITY",;
   //             "SALARY"}
   Local aCols:={"name","city","salary"}
   Local aVet := {{"name",'c',30,0},{"city",'c',20,0},{"salary",'n',12,2}}
   SetMode(25,80)
   set scoreboard off

   HB_DbCreateTemp("test",aVet,'DBFNTX')
   DBAppend()
   test->name := "John"
   test->city := "New York"
   test->salary := 5000

   @ maxrow(),0 say "<Ctrl-Down/Up>-Toggle columns  <Space bar>-Edit cell"
   DBEdit(02,01,20,78, aCols, "TstFnc",,{"Name", "City", "Salary"})
   DBCloseArea()

Return Nil

Function TstFnc(nMode, nCol, oTBR)
LOCAL GetList := {},xValue
Local nRet := DE_CONT

  Do Case
   Case nMode == DE_INIT // EXTENSION: Initialization mode
      SET DELETE ON
      oTBR:colorSpec := "n/bg,w/b,r/bg,w+/bg,w+/gr"
      oTBR:getColumn(1):heading := "Nome"
      oTBR:getColumn(2):heading := "Cidade"
      oTBR:getColumn(3):heading := "Salario"
      /* coloque aqui todas as config do Tbrowse que precisar */
    Case nMode == DE_HITTOP
      Keyboard Chr(K_CTRL_PGDN)
    Case nMode == DE_HITBOTTOM
      Keyboard Chr(K_CTRL_PGUP)
    Case LastKey() == K_ESC
      SET DELETE OFF
      nRet := DE_ABORT
    Case LastKey() == K_SPACE //.And. oTBR:getColumn(nCol):heading != "Name"
      SetCursor(1)
      xValue := Eval(oTBR:getColumn(nCol):block)
      @ Row(), Col() Get xValue //&(oTBR:getColumn(nCol):HeadIng)
      Read
      SetCursor(0)
      test->(FieldPut(nCol,xValue))
      Clear TypeAhead
      oTBR:RefreshAll()  //ou pode forçar
   Case LastKey() == K_INS
      DBAppend()
      DBGoTop()
      nRet := DE_REFRESH
      //oTBR:RefreshAll()  //ou pode forçar
   Case LastKey() == K_DEL    //SET DELETE ON
      DBDelete()
      nRet := DE_REFRESH
      //oTBR:RefreshAll()  //ou pode forçar
  End

Return nRet

jmsilva
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 5
Data de registro: 29 Mar 2019 14:28
Cidade/Estado: Caraguatatuba/sp
Curtiu: 0 vez
Mens.Curtidas: 2 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro