O problema é no set filter, que não está mais filtrando. E só está dando problema quando o campo a ser pesquisado é caractere. Nos demais casos ele filtra corretamente.
Alguém saberia me dizer o que está errado?
A função é a seguinte:
Código: Selecionar todos
dbedit(2,1,maxrow()-2,maxcol(),,"altbase")
function altbase(modo,coluna)
local exp :=space(15)
local cp :=""
local opfs :=0
local bsuso :=alias()
set cursor on
setcancel(.f.)
@ 0,31 clear to 0,maxcol()
@ 0,45 say alltrim(str(recno()))+"/"+alltrim(str(reccount()))+" registros; campo tipo "+fieldtype(coluna)+", com "+alltrim(str(fieldsize(coluna)))+" caracteres "
do case
case lastkey()=27
set filter to
set index to
if us="I"
setcancel(.t.)
endif
return(0)
…
case lastkey()=281 //ALT-P
set index to
set filter to
erase tembol.ntx
usebase(bsuso,"S")
@ maxrow()-10,0 clear to maxrow(),maxcol()
@ maxrow()-6,1 say "Procurar no campo:" //get cp
linha=maxrow()-8
do while .t.
@ linha,colb prompt field(col)
linha++
col++
if fieldsize(col)=0
exit
endif
if linha>maxrow()
linha=maxrow()-8
colb=colb+14
endif
enddo
menu to opfs
cp=field(opfs)
@ maxrow()-10,0 clear to maxrow(),maxcol()
do case
case fieldtype(cp)="C"
@ maxrow()-8,0 say "Procurar por:"get exp pict "@!"
read
cFiltro:="exp$upper("+cp+")"
case fieldtype(cp)="N"
@ maxrow()-7,10 say "(valor menor) (valor maior)"
@ maxrow()-8,0 say "Procurar valores entre:"get v1 pict "9999999.99"
@ maxrow()-8,37 say "e:"get v2 pict "9999999.99"
read
cFiltro:=cp+">="+str(v1)+" .and. "+cp+"<="+str(v2)
case fieldtype(cp)="D"
@ maxrow()-8,0 say "Data:"get dt
read
cFiltro:=cp+"=dt"
endcase
if lastkey()#27
exp=alltrim(exp)
opfs=0
@ maxrow(),0 clear to maxrow(),maxcol()
@ maxrow()-1,1 prompt "Filtrar todas as correspondências"
@ maxrow()-1,41 prompt "Selecionar a primeira correspondência"
menu to opfs
keyb " "
do case
case opfs=1
INDEX ON recno() TAG TEMPB TO TEMPBOL FOR &cFiltro.
case opfs=2
go top
locate for &cFiltro. //exp$(cp)
endcase
endif
@ maxrow()-5,0 clear to maxrow(),maxcol()
@ maxrow(),1 say "Alt-P - procura/filtra base; Alt-M - mostra estrutura da base; F2 - acresce registros"
return(1)

