Página 1 de 1

DBEDIT com filtro

Enviado: 24 Ago 2010 22:46
por Mano
Boa Noite!!!!

Estou com dificultade de fazer o seguinte, preciso estabelecer um filtro no Dbedit Ex: tenho um banco com os seguintes campos:
periodo, lote , Dat_lanc, valor, Codigo
1006 101 xx/05/10 12,00 100
1005 100 xx/06/10 11,00 102
1006 101 xx/06/10 11,00 105
1006 101 xx/06/10 11,00 105

preciso que ele programa me mostre na Tela o todos os lancamento do lote 100,
é possivel isso fazer com o DEdit? Como? a outra maneira de fazer sem o Dbedit?

Re: DBEDIT COM FILTRO

Enviado: 24 Ago 2010 23:56
por alxsts
Olá!

Creio que não será difícil fazer um filtro como o que você deseja. Só não sei se será possível usando a função DBEdit(), sem ter que usar um Set Filter, o que não vejo como boa prática.

Não sei qual versão do Clipper você utiliza. Se for a 5.3, existe a função OrdScope() que, dependendo do índice ativo, pode determinar uma faixa da tua tabela a ser manipulada pelo DBEdit() ou TBrowse().

Se for 5.2 e dependendo do índice ativo, poderá usar um TBrowse com as rotinas do Straley (use a busca do fórum) que fazem o papel do OrdScope().

Por fim, mesmo sem saber se é o teu desejo ou se existe a possibilidade, recomendo a migração da tua aplicação para o ambiente [x]Harbour.

Re: DBEDIT COM FILTRO

Enviado: 25 Ago 2010 01:12
por fladimir
Ola colega alxsts, vc poderia demonstrar talvez através de um código simplificado para melhor entendimento de sua explanação.

Sds..

Re: DBEDIT COM FILTRO

Enviado: 25 Ago 2010 07:38
por Toledo
Segue um exemplo bem simples usando o parâmetro WHILE do INDEX ON:

Código: Selecionar todos

Clear
Set Date British
Set Century On
Use ARQUIVO New
Index on lote to Ind1
Set Index To Ind1
DO WHILE .T.
  Go Top
  KEYB CHR(27)
  DBEdit(04,01,23,78)
  cLote:=SPAC(3)
  @ 02,12 Say "Entre com o Numero do Lote:" Get cLote
  Read
  If Lastkey()=27
     Exit
  Endif
  @ 04,12 SAY "Criando Arquivo Temporario..."
  Seek cLote
  Index on lote To Ind_tmp WHILE (lote=cLote)
  Set Index To Ind_tmp
  Go Top
  DBEdit(04,01,23,78)
  Set Index To Ind1
ENDDO
CLOSE DATA
RETU
Para teste eu criei um DBF (ARQUIVO.DBF) com a mesma estrutura e registros que está na mensagem do Mano.

Abraços,

Re: DBEDIT COM FILTRO

Enviado: 25 Ago 2010 08:18
por fladimir
Entendi Toledo funcionou certinho, mas por exemplo ficaria muito mais complexo para fazer isso a medida q se digita?

Sds.

DBEDIT COM FILTRO

Enviado: 25 Ago 2010 19:27
por Mano
ok, consegui, com o codigo postado pelo Toledo, era bem isso que eu queria, muito obrigado!!!!
porem, mais uma pergunta, eu consigo fazer com que ele some os valores dos codigos iguais?

Re: DBEDIT COM FILTRO

Enviado: 26 Ago 2010 07:20
por Toledo
fladimir escreveu:ficaria muito mais complexo para fazer isso a medida q se digita?
Fladimir, dê uma olhada neste tópico:
https://pctoledo.org/forum/viewto ... f=1&t=9295
Mano escreveu:eu consigo fazer com que ele some os valores dos codigos iguais?
Você pode usar o comando SUM para somar os valores, por exemplo:

Coloque o código abaixo logo após a linha 20 (Set Index To Ind_tmp) do meu código da mensagem anterior:

Código: Selecionar todos

  nSoma:=0
  SUM ARQUIVO->valor TO nSoma WHILE (lote=cLote)
  @ 24,36 SAY "Soma...: "+TRANS(nSoma,"@E 999,999.99")
Abraços,

DBEDIT com filtro

Enviado: 06 Jul 2017 14:52
por rogerfm
Olá Srs
Minha solicitação de ajuda também está relacionada à usar o filtro no Dbedit, por isto achei prudente não criar um novo tópico e dar continuidade neste.
O que ocorre que possuo arquivos que estão relacionados (SET RELATION).
Tenho um arquivo principal de ALUNOS e que possui um campo de STATUS, e o arquivo que visualizo no Dbedit é o MOVTO que está relacionado com ALUNOS.
O problema é que preciso visualizar este arquivo MOVTO no Dbedit, porém apenas os registros que atendem uma certa situação de STATUS do arquivo de ALUNOS.
Alguma sugestão de como fazer ?
Agradeço a ajuda.

DBEDIT com filtro

Enviado: 07 Jul 2017 00:34
por acelconsultoria
Aí é complicado.

Se você tem um banco de dados "A" que está relacionado a "B", quer abrir um tabela (DBEDIT) do banco "B", mas filtrando uma condição que só pode ser testada em "A", eu iria sugerir você a criar um banco de dados "C", temporário, para armazenar a informação já devidamente filtrada juntando "A" e "B".

Fora isso, não sei se funciona criar um índice temporário, colocando uma condição baseada no banco de dados relacionado externamente.

DBEDIT com filtro

Enviado: 07 Jul 2017 02:43
por JoséQuintas
DbEdit() é ruim
SET RELATION é ruim.
Filtro é ruim.

Pode acrescentar macro, que também é ruim, mas talvez não no caso de SET FILTER.
De preferência sem depender de variável, senão fica pior ainda.
Exemplo:

Código: Selecionar todos

cFiltro := [movto->Data >= Ctod(] + Dtoc( dDataInicial ) + [)]
cFiltro += [ .AND. movto->Data <= Ctod(] + Dtoc( dDataFinal ) + [)]
cFiltro += [ .AND. ]
cFiltro +=    [( ]
cFiltro +=    [ aluno->Status == "] + cStatus1 + ["]
cFiltro +=    [ .OR. aluno->Status == "] + cStatus2 + [" ]
cFiltro +=    [ )]
cFiltro += [  .AND. outro->Outro =="]  + cOutro + [""]
SET FILTER TO &( cFiltro )