Página 1 de 1

Consulta pelo dbedit ou tbrowse

Enviado: 05 Abr 2011 23:25
por Antonio Matheus
Boa noite como fazer uma consulta usando dbedit ou tbrowse obrigado

Re: Consulta pelo dbedit ou tbrowse

Enviado: 06 Abr 2011 00:03
por alxsts
Olá!

Se você puder fornecer detalhes adicionais, os mesmos serão muito úteis na criação de uma solução que possa te atender.

Pessoalmente, prefiro utilizar a "classe" TBrowse, por entender que a mesma é mais flexivel que a função DBEdit().

Recomendo que você analise (estude) um programa (TBDemo.Prg) que veio com a instalação padrão do Clipper 5. Se você tiver instalada em sua máquina esta versão, a encontrará na pasta C:\Clipper5\Source\Sample. Se não tiver, poste que te informaremos onde encontrar.

Consulta pelo dbedit ou tbrowse

Enviado: 06 Abr 2011 12:15
por Pablo César
Isso mesmo, como o colega Alexandre falou: tente dominar o TBROWSE. O DBEDIT tem bem menos poder de recursos. E tanto no DBEDIT como no TBROWSE a pesquisa de registros você poderá fazer da mesma forma que você faz após um @ GET... através de um SEEK ou até mesmo LOCATE. Esses comandos ou funções você implementa dentro da função de controle de navegação tanto no TBROWSE como no DBEDIT.

Re: Consulta pelo dbedit ou tbrowse

Enviado: 06 Abr 2011 20:48
por Antonio Matheus
Boa noite segue o codigo de consulta que ja tenho

essa rotina e pelo codigo

Código: Selecionar todos

CLEAR 
@01,00 TO 03,79 DOUBLE
@04,00 TO 23,79 DOUBLE
@06,01 TO 06,78 DOUBLE
@21,01 TO 21,78 DOUBLE
@06,00 SAY CHR(204)
@21,00 SAY CHR(204)
@06,79 SAY CHR(185)
@21,79 SAY CHR(185)


SELECT 1
USE CLIENTE
IF (!FILE("CODIGO.NTX"))
   INDEX ON STR(CODIGO,5,0) TO CODIGO
ENDIF
SET INDEX TO CODIGO
DO WHILE .T.
   vCodigo:=0
   cSai:="N"

   @02,25 SAY "[ Consulta por Codigo ]"
   @22,63 SAY "< ESC Sair ! >"
   @05,01 SAY "Codigo...................:" GET vCodigo PICTURE "99999" VALID(vCodigo>0)
   READ
   IF LASTKEY()=27
      EXIT
   ENDIF
   GO TOP
   SEEK vCodigo
   IF FOUND()
      @ 07,01 SAY "Nome................:" +NOME
      @ 08,01 SAY "Endereco............:" +ENDERECO
      @ 09,01 SAY "Complemento.........:" +COMPL
      @ 10,01 SAY "Bairro..............:" +BAIRRO
      @ 11,01 SAY "Cidade..............:" +CIDADE
      @ 12,01 SAY "Telefone............:" +TELEFONE
      @ 13,01 SAY "Celular.............:" +CELULAR
      @ 14,01 SAY "Telefone Comercial..:" +TELCOM
      @ 15,01 SAY "Data de Aniversario.:" +DTOC(ANIVER)
      @ 16,01 SAY "Nome Mae............:" +MAE
      @ 17,01 SAY "Cep.................:" +CEP
      @ 18,01 SAY "Estado..............:" +UF
      @ 19,01 SAY "Email...............:" +EMAIL
      @ 20,01 SAY "C.p.f...............:" +CPF
      @ 20,42 SAY "Rg..................:" +RG
   ELSE
      ALERT("Codigo Nao Cadastro !")
   ENDIF
   @ 22,01 SAY "Deseja Sair?...:" GET cSai PICTURE "@!" VALID (cSai $ "SN")
   READ
   IF cSai= "S"
      EXIT
   ENDIF
ENDDO
CLEAR
RETURN
essa e pelo nome

Código: Selecionar todos

CLEAR SCREEN

@01,00 TO 03,79 DOUBLE
@04,00 TO 23,79 DOUBLE
@06,01 TO 06,78 DOUBLE
@21,01 TO 21,78 DOUBLE
@06,00 SAY CHR(204)
@21,00 SAY CHR(204)
@06,79 SAY CHR(185)
@21,79 SAY CHR(185)
SELECT 1
USE CLIENTE
IF (!FILE("CLIENTE.NTX"))
   INDEX ON NOME TO CLIENTE
ENDIF
SET INDEX TO CLIENTE
DO WHILE .T.
   vNome:=SPACE(50)
   cSai= "N"
   @02,25 SAY "[ Consulta por Nome ]" 
   @20,63 SAY "< ESC Sair ! >"
   @22,01 SAY "Digite o Nome.:" GET vNome PICTURE "@!" 
   READ
   IF LASTKEY()=27
      EXIT
   ENDIF
   GO TOP
   SEEK vNome
   IF (FOUND())
      @07,01 SAY "Nome..................:" +NOME
      @08,01 SAY "Endereco..............:" +ENDERECO
      @09,01 SAY "Complemento...........:" +COMPL
      @10,01 SAY "Bairro................:" +BAIRRO
      @11,01 SAY "Cidade................:" +CIDADE
      @12,01 SAY "Telefone..............:" +TELEFONE
      @13,01 SAY "Celular...............:" +CELULAR
      @14,01 SAY "Telefone comercial....:" +TELCOM
      @15,01 SAY "Data Aniversario......:" +DTOC(ANIVER)
      @16,01 SAY "Nome Mae..............:" +MAE
      @17,01 SAY "Cep...................:" +CEP
      @18,01 SAY "Estado................:" +UF
      @19,01 SAY "E-mail................:" +EMAIL
      @20,01 SAY "C.p.f.................:" +CPF
      @18,28 SAY "Rg....................:" +RG
   ELSE
      ALERT("Nome Nao Cadastrado !")
   ENDIF
   READ
   IF cSai= "S"
      EXIT
   ENDIF
ENDDO
CLEAR
desde ja agradeco a colaboracao de todos
abraco

Consulta pelo dbedit ou tbrowse

Enviado: 07 Abr 2011 08:32
por Pablo César
Antonio, vocÊ ja fez o seu TBROWSE ? Senão, faça-o e poste aqui e te ajudarei a implementar a pesquisas como vocÊ solicitou. Sem o TBROWSE não tem como fazer... Sugiro você começar um novo PRG com o TBROWSE.

Re: Consulta pelo dbedit ou tbrowse

Enviado: 07 Abr 2011 11:20
por alxsts
Olá!

Isso mesmo. Crie um novo programa (baseie-se no TBDemo.Prg que mencionei acima).
Crie um TBrowse que será a consulta padrão do teu cadastro, mostrando todos os registros.
Defina teclas para incluir (a tecla INS, por exemplo), excluir(a tecla DEL, por exemplo) e alterar (a tecla ENTER, por exemplo).
Defina uma tecla que acionará a tela de consulta por código ou por nome.

Depois poste o código (não esqueça de colocar entre as tags code) e te ajudaremos a refinar.

Re: Consulta pelo dbedit ou tbrowse

Enviado: 11 Abr 2011 18:07
por rbonotto
Um exemplo de Tbrowser bem simples:

Código: Selecionar todos

***************************************
FUNCTION loc_on()
***************************************
* cChave sera o grupo do item
cor(1)
WHILE .T.
   tel22 := SAVESCREEN()
   nAprima  := .T.
   mEugRupa := crd->codigo
   * criar tbrowse 
   oPropri := tbrowsedb (05,28,17,70)

   tela(04,27,18,71)
   tela(18,27,22,71,'.')

   * filtro tbrowse com a func skipwhil() 
   oProPri:SKIPBLOCK     := {|x| SKIPWHIL(x, {||item->cod_grup == cChave})} 
   oPropri:GOTOPBLOCK    := {| | SKIPWHIL((LASTREC()* -1),{||item->cod_grup == cChave})}
   oproPri:GOBOTTOMBLOCK := {| | SKIPWHIL((LASTREC()* 1), {||item->cod_grup == cChave})}

   * defino colunas do tbrowse 
   oCol1  := tbcolumnnew("  PRODUTOS CADASTRADOS",     {||" ³ " + item->produto + " ³ "}) 

   oProPri:addcolumn(oCol1) 

   WHILE .T.
      WHILE(!oPropri:stabilize())
      END
      IF nAprima
         sset(2)
         IF     _MODE == 'pItem1'
             IF EMPTY(pItem1)
                forca_lc()
             ELSE
                SEEK gPitem + RTRIM(pItem1)
             END

         ELSEIF _MODE == 'pItem2'
             IF EMPTY(pItem2)
                forca_lc()
             ELSE
                SEEK gPitem + RTRIM(pItem2)
             END

         ELSEIF _MODE == 'pItem3'
            IF EMPTY(pItem3)
                forca_lc()
             ELSE
                SEEK gPitem + RTRIM(pItem3)
             END

         ELSEIF _MODE == 'pItem4'
             IF EMPTY(pItem4)
                forca_lc()
             ELSE
                SEEK gPitem + RTRIM(pItem4)
             END

         END
         IF EOF()
            forca_lc()
            oPropri:refreshall()
            KEYBOARD(CHR(47)); KEYBOARD(CHR(47))
         END
         oPropri:refreshall()
         KEYBOARD(CHR(47)); KEYBOARD(CHR(47))
      END

      @ 19,30 SAY SUBSTR(desc_p1,1,37)
      @ 20,30 SAY SUBSTR(desc_p1,38,70)

      nTecla := INKEY(0)

      DO CASE

         CASE ( nTecla == K_ESC ) 
            EXIT

         CASE ( nTecla == K_ENTER ) 
            EXIT 

         CASE ( nTecla == K_DOWN ) 
            oPropri:down () 

         CASE ( nTecla == K_UP ) 
            oPropri:up () 

         CASE ( nTecla == K_LEFT ) 
            oPropri:left () 

         CASE ( nTecla == K_RIGHT ) 
            oPropri:right () 

         CASE ( nTecla == K_PGUP ) 
            oPropri:pageup () 

         CASE ( nTecla == K_PGDN ) 
            oPropri:pagedown () 

         CASE ( nTecla == K_CTRL_PGUP ) 
            oPropri:gotop () 

         CASE ( nTecla == K_CTRL_PGDN ) 
            oPropri:gobottom ()

         OTHERWISE
            *** ENC100B2.PRG
            IF nAprima
               nAprima := .F.
            ELSE
               ver_teclado()
            END

      ENDCASE 

      oPropri:refreshall()
   END
   EXIT
END
cor(0)
RESTSCREEN(,,,,tel22); RELEASE tel22
RETURN


*************************************** 
FUNCTION SKIPWHIL (x,key_val)
***************************************
LOCAL i := 0 
IF LASTKEY() == 0 
   RETURN i 
END

IF (x > 0 .AND. RECNO() <> LASTREC()+1) 
   WHILE (i < x) 
      SKIP 1 
      IF EOF() .OR. !(EVAL(key_val)) 
         SKIP -1 
         EXIT 
      END
      i++ 
   END
ELSEIF (x < 0) 
   WHILE (i > x) 
      SKIP -1 
      IF BOF() 
         EXIT 
      END
      IF !(EVAL(key_val)) 
         SKIP 1 
         EXIT 
      END
      i--
   END
END
RETURN i
Abraços =)

Re: Consulta pelo dbedit ou tbrowse

Enviado: 11 Abr 2011 23:24
por alxsts
Olá!

Parabéns pela iniciativa Bonotto. O código está bom. Digo isso apesar de estar lendo apenas um fragmento. Mas, pode ser melhorado.

No exemplo inicial por você fornecido, a tabela alvo da consulta era a de clientes (podemos até deduzir o layout). No exemplo mais recente, a tabela é a de produtos mas só vemos um campo. A função SKIPWHIL() parece ter um filtro...

Em suma, poste mais detalhes:
- layout da tabela, chaves de índice
- campos que devem ser exibidos pelo TBrowse()
- eventuais filtros
- eventuais pesquisas
- se precisa incluir, alterar, excluir...

Consulta pelo dbedit ou tbrowse

Enviado: 12 Mai 2011 00:29
por rbonotto
Peço mil desculpas pelo tempo em responder, tenho outra profissão que me ocupa um certo tanto de tempo; sou piloto e as vezes fico
afastado.

SKIPWHIL() é um filtro para acessar somente produtos de um certo grupo:

Exemplo:

se o grupo for 0056 (leiteria) só aparecerem itens cadastrados com a chave 0056; seria igual ao SET FILTER do dbedit só que estupidamente mais
rapido.

A partir dai é só setar as teclas na função postada, é possivel fazer tudo relacionado ao banco de dados.

Espero ter ajudado =)