Bem vindo ao forum...
Segue abaixo um exemplo com diversas situações:
Código: Selecionar todos
**********************
FUNC PESQAGE(TIPOPESQ)
**********************
LOCAL nButton := 1
LOCAL nOpcao := 0
aAGENDA := savenv( 01, 00, 24, 79 )
LIMPATALHO()
SAGEM(01,00,'PESQUISA EM TELA DA AGENDA',1)
Clrted() // limpa tela
IF TIPOPESQ="S"
USE AGENDA ALIAS AGENDA shared
SET INDEX TO AGENDA
ENDIF
Win( 02, 00, 22, 80, "Pesquisa por Ordem Alfab‚tica" ,WT_VERDE2BRANCO,WD_VERDE2BRANCO)
@ 23, 00 SAY PADL( "", 80 ) COLOR "R*/W"
@ 23, 12 SAY " [F1]Ordem [F2]Busca [C]Cadastrar [Del]Excluir [Enter]Editar" COLOR "R*/W"
@ 23, 00 SAY "[ > ]" COLOR "R*/W"
@ 23, 08 SAY "[ < ]" COLOR "R*/W"
@ 03,00 CLEAR TO 22,01
@ 03,79 CLEAR TO 22,79
***************
SET CONFIRM OFF
PESQAGE2()
SET CONFIRM ON
***************
ATALHOS()
CLEAR GETS
CLEAR TYPEAHEAD // limpa sujeira no teclado
IF TIPOPESQ="S"
DBCLOSEALL()
ENDIF
RstEnv (aAGENDA)
return
***************
FUNC PESQAGE2()
***************
FIELD NOME,TELEFONE1,CELULAR,TIPO,TELEFONE2,ENDERECO,BAIRRO,CIDADE,UF,CEP IN AGENDA
LOCAL nButton := 1
LOCAL nOpcao := 0
LOCAL OTbr :=TBrowseDB( 03, 01, 22, 80 )
LOCAL OTbc1 :=TbColumnNew("Descricao do Cadastrado",{ || NOME } )
LOCAL OTbc2 :=TbColumnNew("N§ Telefone", { || TELEFONE1} )
LOCAL OTbc3 :=TbColumnNew("N§ Celular", { || CELULAR } )
LOCAL OTbc4 :=TbColumnNew("TIPO", { || TIPO } )
LOCAL OTbc5 :=TbColumnNew("N§ Telefone", { || TELEFONE2} )
LOCAL OTbc6 :=TbColumnNew("Endere‡o Completo", { || ENDERECO } )
LOCAL OTbc7 :=TbColumnNew("Bairro", { || BAIRRO } )
LOCAL OTbc8 :=TbColumnNew("Cidade", { || CIDADE } )
LOCAL OTbc9 :=TbColumnNew("UF", { || UF } )
LOCAL OTbc10:=TbColumnNew("CEP", { || CEP } )
LOCAL nKey
LOCAL lExitRequested
PARA TIPOCAD,LINHA
********************************************************************
* 1 2 3 4 5 6 7 8 9 10 11 12 13
oTbr:colorspec :="N*/W , W+/BG , W+/B , R+*/W , W*/W+ , RJ/W , W/B , R/N , B+*/W , RW*/W , N+*/W, BG+*/W, RG+*/W"
oTbr:addColumn(oTbc1)
oTbr:addColumn(oTbc2)
oTbr:addColumn(oTbc3)
oTbr:addColumn(oTbc4)
oTbr:addColumn(oTbc5)
oTbr:addColumn(oTbc6)
oTbr:addColumn(oTbc7)
oTbr:addColumn(oTbc8)
oTbr:addColumn(oTbc9)
oTbr:addColumn(oTbc10)
************ Definicao de Cores ***********
oTbC4:COLORBLOCK :={| NOME | IIF ( TIPO ="CLIENTE", { 9,2 } ,;
IIF ( TIPO ="FORNECEDOR", { 4,2 } ,;
IIF ( TIPO ="FUNCIONARIO",{ 10,2 } ,;
IIF ( TIPO ="COMPRADOR", { 13,2 } ,;
IIF ( TIPO ="CREDOR", { 12,2 } ,;
IIF ( TIPO ="DIVERSOS", { 11,2 } , { 1,2} ) ) ) ) ) ) }
************ largura das colunas ***********
oTbc1:width:=29
************ largura das colunas ***********
************ Marcara das colunas ***********
oTbc2:picture:="@R (99) 9999-9999"
oTbc3:picture:="@R (99) 9999-9999"
oTbc5:picture:="@R (99) 9999-9999"
*******************************************
************ Linhas das colunas ************
oTbr:COLSEP :=DEF_CSEP // desenha colunas Verticais
oTbr:HEADSEP:=HEAD_SEP // desenha colunas Horizontais superior
oTbr:FOOTSEP:=FOOT_SEP // desenha colunas Horizontais inferior
*********************
************ COLUNAS A CONGELAR ************
ColFix := 1 // atraves de variaval colfix
oTbr:freeze := ColFix
**********************************
SELE AGENDA
SET ORDER TO 2
Otbr:gotop()
IExitRequested := .F.
vCONTINUA=" "
DO WHILE !IExitRequested
DO WHILE !oTbr:stabilize()
ENDDO
IF !vCONTINUA="S"
nKey := inkey(0)
ENDIF
IF vCONTINUA="S"
CLEAR TYPEAHEAD // limpa sujeira no teclado
vNOME=SPACE(30)
vREG=RECCOUNT()
vCONTINUA=" "
SETCOLOR( "N/W,N*/RG,N/W* , , N*/W" )
@ ROW(),01 GET vNOME PICT"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
READ
SETCOLOR( "N*/W,W+/BG" )
IF LASTKEY()==27 .OR. EMPTY(vNOME)
TRAVAREG()
DELE
LIBERAREG()
OTBR:refreshall()
Otbr:gotop() // no arquivo indexado
LOOP
ENDIF
TRAVAREG()
REPL NOME WITH vNOME
LIBERAREG()
IF FOUND()
MsgINFO("Descrição Já Cadastrada !!!, Favor verificar","Aviso do Sistema")
EXIT
ENDIF
OTBR:refreshall()
Otbr:gotop() // no arquivo indexado
GOTO vREG
ELSEIF nKey == K_ENTER .OR. nKey == K_a .OR. nKey == K_A
nCOLNUM:=OTBR:COLPOS
IF TIPO="DIVERSOS"
DO WHILE .T.
vNOME=NOME
vTELEFONE1=TELEFONE1
vCELULAR=CELULAR
vTIPO=TIPO
vTELEFONE2=TELEFONE2
vENDERECO=ENDERECO
vBAIRRO=BAIRRO
vCIDADE=CIDADE
vCEP=CEP
vUF=UF
SET CURSOR ON
SETCOLOR( "N/W,N*/RG,N/W* , , N*/W" )
IF nCOLNUM==1
@ ROW(),COL() GET vNOME PICT"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
READ
ENDIF
IF nCOLNUM==2
LINHA=ROW()
COLUNA=COL()
@ ROW(),COL() GET vTELEFONE1 PICT"@R (99) 9999-9999" when DwnMsg( "Informe o Telefone")
READ
ENDIF
IF nCOLNUM==3
@ ROW(),COL() GET vCELULAR PICT"@R (99) 9999-9999" when DwnMsg( "Informe o Celular")
READ
ENDIF
IF nCOLNUM==4
ERROREG()
ENDIF
IF nCOLNUM==5
@ ROW(),COL() GET vTELEFONE2 PICT"@R (99) 9999-9999" when DwnMsg( "Informe o Telefone")
READ
ENDIF
IF nCOLNUM==6
@ ROW(),COL() GET vENDERECO when DwnMsg( "Informe o Endere‡o")
READ
ENDIF
IF nCOLNUM==7
@ ROW(),COL() GET vBAIRRO when DwnMsg( "Informe o Bairro")
READ
ENDIF
IF nCOLNUM==8
@ ROW(),COL() GET vCIDADE when DwnMsg( "Informe a Cidade")
READ
ENDIF
IF nCOLNUM==9
@ ROW(),COL() GET vUF when DwnMsg( "Informe o Estado (Unidade Federativa)")
READ
ENDIF
IF nCOLNUM==10
@ ROW(),COL() GET vCEP when DwnMsg( "Informe o CEP")
READ
ENDIF
SET CONFIRM OFF
SETCOLOR( "N*/W,W+/BG" )
IF !LASTKEY() = 27
IF !EMPTY(vNOME)
TRAVAREG()
REPL NOME WITH vNOME
REPL TELEFONE1 WITH vTELEFONE1
REPL CELULAR WITH vCELULAR
REPL TIPO WITH vTIPO
REPL TELEFONE2 WITH vTELEFONE2
REPL ENDERECO WITH vENDERECO
REPL BAIRRO WITH vBAIRRO
REPL CIDADE WITH vCIDADE
REPL CEP WITH VCEP
REPL UF WITH vUF
LIBERAREG()
ENDIF
ENDIF
EXIT
ENDDO
ELSE
MsgINFO("Não é permitido a Alteração por esse processo, Favor entrar no cadastro de origem.","Aviso do Sistema" )
ENDIF
SET ORDER TO 2
OTBR:refreshall()
ELSEIF nKey == K_C .OR. nKey == K_c
SELE AGENDA
SET ORDER TO 2
APPE BLAN
TRAVAREG()
REPL TIPO WITH "DIVERSOS"
LIBERAREG()
OTBR:refreshall()
Otbr:gotop() // no arquivo indexado
vCONTINUA="S"
LOOP
ELSEIF nKey == K_F .OR. nKey == K_f
vVOLTAR=SPACE(1)
IExitRequested := .T.
ELSEIF nKey == K_DEL
IF TIPO="DIVERSOS"
IF !MsgYesNo("Deseja Realmente Excluir ?" ,"Aviso do Sistema")
LOOP
ENDIF
TRAVAREG()
DELE
LIBERAREG()
OTBR:refreshall()
Otbr:gotop() // no arquivo indexado
ELSE
MsgINFO("Não é permitido a Alteração por esse processo, Favor entrar no cadastro de origem.","Aviso do Sistema" )
ENDIF
ELSEIF nKey == K_F1
IF INDEXORD()==2
SET ORDER TO 7
ELSEIF INDEXORD()==7
SET ORDER TO 2
ENDIF
oTbr:refreshall()
ELSEIF nKey == K_F2
aBusca := savenv( 01, 00, 23, 79 )
chave:= Space(30)
SETCOLOR( "N*/W,B/W" )
aWin := Win( 10, 15, 13, 62, "Busca por Nome",WT_VERDE2BRANCO,WD_VERDE2BRANCO)
CLEAR TYPEAHEAD
@ 12, 18 say "Nome.:" get CHAVE pict"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
READ
RstEnv(aBusca)
SETCOLOR( "N*/W,W+/B" )
set softseek on
seek chave
set softseek off
oTbr:refreshall()
ELSEIF nKey == K_DOWN
oTbr:down()
ELSEIF nKey == K_UP
oTbr:up()
ELSEIF nKey == K_PGDN
oTbr:pageDown()
ELSEIF nKey == K_PGUP
oTbr:pageUp()
ELSEIF nKey == K_CTRL_PGUP
oTbr:goTop()
ELSEIF nKey == K_CTRL_PGDN
oTbr:goBottom()
ELSEIF nKey == K_RIGHT
oTbr:right()
ELSEIF nKey == K_LEFT
oTbr:left()
ELSEIF nKey == K_HOME
oTbr:home()
ELSEIF nKey == K_END
oTbr:end()
ELSEIF nKey == K_CTRL_LEFT
oTbr:panLeft()
ELSEIF nKey == K_CTRL_RIGHT
oTbr:panRight()
ELSEIF nKey == K_CTRL_HOME
oTbr:panHome()
ELSEIF nKey == K_CTRL_END
oTbr:panEnd()
ELSEIF nKey == K_ESC
vVOLTAR="S"
OTBR:refreshall()
Otbr:gotop() // no arquivo indexado
IExitRequested := .T.
ENDIF
ENDDO
RETURN NIL
Estrutura do Banco de Dados:
Código: Selecionar todos
LOCAL aField[12]
aField[01] := {"NOME" , "C", 35, 0}
aField[02] := {"TELEFONE1", "C", 14, 0}
aField[03] := {"CELULAR" , "C", 14, 0}
aField[04] := {"TIPO" , "C", 11, 0}
aField[05] := {"TELEFONE2", "C", 14, 0}
aField[06] := {"ENDERECO" , "C", 50, 0}
aField[07] := {"BAIRRO" , "C", 18, 0}
aField[08] := {"CIDADE" , "C", 25, 0}
aField[09] := {"CEP" , "C", 8, 0}
aField[10] := {"UF" , "C", 2, 0}
aField[11] := {"CODIGO" , "N", 6, 0}
aField[12] := {"OBS" , "C", 10, 0}
/*
* Para recriar o DBF original, descomente as 3 proximas linhas.
*/
* if .not. File("AGENDA.DBF")
* DbCreate( "AGENDA.DBF", aField )
* endif
Indice que uso nesse exemplo:
Código: Selecionar todos
index on CODIGO TAG 1 to dados\AGENDA
index on NOME TAG 2 to dados\AGENDA
index on TELEFONE1 TAG 3 to dados\AGENDA
index on TELEFONE2 TAG 4 to dados\AGENDA
index on CELULAR TAG 5 to dados\AGENDA
index on CIDADE TAG 6 to dados\AGENDA
index on TIPO TAG 7 to dados\AGENDA
index on TIPO+NOME TAG 8 to dados\AGENDA
Obs:Nesse Exemplo acima tem algumas funções da VL.LIB
Qualquer duvida prende o grito !!!
Leonardo Machado