por exemplo, tenho um DBF com:
- nome
cidade
estado
telefone
celular
como posso fazer isso
Moderador: Moderadores


Código: Selecionar todos
INICIA A DIOALOG ...ETC...
BROWSE...ETC..
@ 10,10 Get oBUSCA VAR cBUSCA SIZE 300,24;
STYLE ES_AUTOHSCROLL PICTURE '@!' MAXLENGTH 40;
ON Change {|| FOCALIZA_BRW(oBUSCA:GETTEXT()) };
TOOLTIP "Clique Aqui Para buscar uma descrição"Código: Selecionar todos
*************************************
STATIC FUNCTION FOCALIZA_BRW(cBUSCA)
*************************************
PRIVATE oDlgHabla:=NIL
MsgRun("Aguarde,Sistema Separando Informações...")
SELE TABELA
DBSETORDER(2)
IF lOpcaoRadio=1
TABELA->( DBSEEK( ALLTRIM( cBUSCA ) ) )
IF EOF()
ShowMsg( "Fim do Arquivo dos Registros", "Aviso" )
DBGOTOP()
ENDIF
ELSE
IF RIGHT(ALLTRIM(cBUSCA),1)="'" .OR. RIGHT(ALLTRIM(cBUSCA),1)='"'
FIM_RUN()
RETURN .T.
ENDIF
Sr_Setfilter("NOME LIKE '%"+ALLTRIM(cBUSCA)+"%'" )
DBGOTOP()
ENDIF
oBrw:Refresh()
FIM_RUN()
RETURN( .T. )Código: Selecionar todos
function main()
local aArray, nInd, nLen
aArray := {{ "Nome", "C", 50, 0}, {"Telefone", "C", 14, 0}, {"Celular", "C", 14, 0}, {"Tipo", "C", 12, 0}}
DbCreate("clientes", aArray)
? "Tabela 'clientes' criada"
aArray := { }
AAdd(aArray, {"Bruno", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Carlos", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Rodrigo", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Pedro", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Mateus", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Julio", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Bino", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Bartolomeu", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Celso", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Edson", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Marcio", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Daniel", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Leonardo", "4412344321", "4499887755", "Nokia"})
AAdd(aArray, {"Guilherme", "4412344321", "4499887755", "Nokia"})
USE clientes EXCLUSIVE NEW
nLen := Len(aArray)
for nInd := 1 TO nLen
clientes->(DbAppend())
clientes->nome := aArray[nInd, 1]
clientes->telefone := aArray[nInd, 2]
clientes->celular := aArray[nInd, 3]
clientes->tipo := aArray[nInd, 4]
next
clientes->(DbCloseArea())
return nil

Por padrão, em xHarbour, toda string é um ArrayOfChar.bencz escreveu:teria q converter ela para um ArrayOfChars
Código: Selecionar todos
LOCAL cString := "xHarbour", cChar
FOR EACH cChar IN cString
QOut( cChar )
NEXTCódigo: Selecionar todos
function ola( oBrw, cString )
SELE clientes
SET ORDER TO 2
seek cString
set softseek off
if found()
? "achou"
else
? "nada :("
endif
oBrw:REFRESH()
return nil
Como posso corrigir esse erroError DBFNTX/1201 Workarea not indexed
Error at ...: DBSEEK(0) in Module:
Called from : OLA(198) in Module: browse.prg
Voce criou o indice? Pelo erro o sistema nao encontrou o indice necessario para fazer a pesquisa.bencz escreveu:Error DBFNTX/1201 Workarea not indexed
O ideal era antes de entrar no BROWSE voce ja ter criado os indices e nao dentro do browse. Ai voce apenas seta o indice que voce deseja usando SET ORDE TO 1, 2 etc conforme os indices ja criados.SELE clientes
INDEX ON NOME to indice1
SET ORDER TO 1
seek cString
set softseek off
if found()
? "achou"
else
? "nada"
endif
oBrw:REFRESH()
Substitua oBUSCA pelo seu objeto, cBUSCA pela sua variavel, o segredo da pesquisa letra a letra esta no gatilho ON CHANGE, a cada letra digitada no textbox, sera executada a funcao especificada, neste caso a FOCALIZA_BRW, onde esta pegando o testo digitado atraves da leitura do objeto, oBUSCA:GETTEXT().@ 10,10 Get oBUSCA VAR cBUSCA SIZE 300,24;
STYLE ES_AUTOHSCROLL PICTURE '@!' MAXLENGTH 40;
ON Change {|| FOCALIZA_BRW(oBUSCA:GETTEXT()) };
TOOLTIP "Clique Aqui Para buscar uma descrição"
Código: Selecionar todos
*************************************
STATIC FUNCTION FOCALIZA_BRW(cBUSCA)
*************************************
*PRIVATE oDlgHabla:=NIL
*MsgRun("Aguarde,Sistema Separando Informações...")
SET ORDE TO 1
DBSEEK( ALLTRIM( cBUSCA ) )
IF EOF()
*ShowMsg( "Fim do Arquivo dos Registros", "Aviso" )
DBGOTOP()
ENDIF
oBrw:Refresh()
RETURN( .T. )Como vou usar o indice por NOME (indice1) vou setar como SET ORDER TO 1.USE MEUDBF
INDEX ON nome TO indice1
INDEX ON celular TO indice2
INDEX ON endereco TO indice3