Refresh() no dbedit ?

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

Moderador: Moderadores

paiva_dbdc
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 12 Nov 2012 09:58
Localização: uberlandia mg

Refresh() no dbedit ?

Mensagem por paiva_dbdc »

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
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Refresh() no dbedit ?

Mensagem por Vlademiro »

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

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Refresh() no dbedit ?

Mensagem por JoséQuintas »

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

Código: Selecionar todos

lSair := .F.
DO WHILE .T.
   dbEdit()
   IF lSair
      EXIT
   ENDIF
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Refresh() no dbedit ?

Mensagem por Itamar M. Lins Jr. »

Ola!
Já viram o código da função DbEdit() no harbour ?

Código: Selecionar todos

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
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Refresh() no dbedit ?

Mensagem por Itamar M. Lins Jr. »

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Refresh() no dbedit ?

Mensagem por ANDRIL »

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:

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Refresh() no dbedit ?

Mensagem por JoséQuintas »

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

Código: Selecionar todos

  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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Refresh() no dbedit ?

Mensagem por Vlademiro »

Bom saber. Tem coisa do tempo do Clipper que eu desconheço.
paiva_dbdc
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 12 Nov 2012 09:58
Localização: uberlandia mg

Refresh() no dbedit ?

Mensagem por paiva_dbdc »

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)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Refresh() no dbedit ?

Mensagem por ANDRIL »

Tente assim:

Código: Selecionar todos

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
paiva_dbdc
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 12 Nov 2012 09:58
Localização: uberlandia mg

Refresh() no dbedit ?

Mensagem por paiva_dbdc »

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
jmsilva
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 29 Mar 2019 14:28
Localização: Caraguatatuba/sp

Refresh() no dbedit ?

Mensagem por jmsilva »

Segue um exemplo que acho interessante sobre o DBEdit()

Código: Selecionar todos

#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


Responder