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 )