Página 1 de 1
Consultas
Enviado: 10 Out 2007 16:00
por mclpaltrin
Amigos
- Preciso fazer um programa para realizar um consulta por Código ou por Nome ambas disponível na tela . o usuário escolha qual a consulta a ser realizada. Enfim fritei mas não saiu alguém poderia passar um exemplo para mim....sou novo com a linguagem harbour
GRATO A TODOS
Enviado: 10 Out 2007 16:08
por sygecom
Esta usando alguma LIB grafica ?
Enviado: 10 Out 2007 16:11
por mclpaltrin
Acho que não, Mas pode explicar ambas perguntas? estou perdido
Grato
Enviado: 11 Out 2007 10:38
por gvc
Crie dois get´s na tela.
Vc pode colocar tecla de atalho (tecla de função como o F1 - Help).
Ou
Quando o usuário terminar de passar pelos get´s, verifique se tem alguma informação no campo código.
Se tiver, execute a procura por esse código digitado.
Se não tiver, verifique se tem alguma informação no campo de nome.
Se tiver, execute a pesquisa por nome.
Se ainda assim, o usuário não entrou com nenhum valor em nenhum campo, emita a mensagem de erro. Ele deve digitar alguma coisa.
Vc tb pode bloquear as entradas para que o usuário digite um ou outro campo.
Ou ainda, bloquear a entrada no campo nome se o usuário já digitou alguma coisa no campo de código.
cls
xcod := space(10)
xnom := space(50)
@ 05,05 say 'Codigo:' get xcod picture '999-99-999'
@ 06,05 say 'Nome:' get xnom picture '@!' valid !empty(xcod) .or. !empty(xnom)
read
if !empty(xcod)
dbsetorder(1)
if !dbseek(xcod)
alert('Codigo NAO Cadastrado!')
end
else
dbsetorder(2)
if !dbseek(alltrim(xnom))
alert('Nome NAO Cadastrado!')
end
end
----
...
@ 06,05 say 'Nome:' get xnom picture '@!' valid !empty(xnom) when empty(xcod)
...
Enviado: 11 Out 2007 11:08
por mclpaltrin
Eu estava fazendo com DBEDIT veja código:
/*
* DECLARA 3 VETORES COM O Nº DE INFORMAÇÕES A SEREM PESQUISADAS.
PUBLIC VETOR1[10],VETOR2[10],VETOR3[10]
SET SCOREBOARD ON
*PREENCHE VETOR COM NOME DOS CAMPOS
VETOR1[1] = CODIGO
VETOR1[2] = CLIENTE
VETOR1[3] = ENDERECO
VETOR1[4] = BAIRRO
VETOR1[5] = CIDADE
VETOR1[6] = CEP
VETOR1[7] = DDDTEL
VETOR1[8] = TELEFONE
VETOR1[9] = DDDCEL
VETOR1[10] = CELULAR
*CABEÇALHOS
VETOR2[1] = 'CODIGO:'
VETOR2[2] = 'CLIENTE:'
VETOR2[3] = 'ENDERECO:'
VETOR2[4] = 'BAIRRO:'
VETOR2[5] = 'CIDADE:'
VETOR2[6] = 'CEP:'
VETOR2[7] = 'DDDTEL:'
VETOR2[8] = 'TELEFONE:'
VETOR2[9] = 'DDDCEL:'
VETOR2[10] = 'CELULAR:'
*MÁSCARAS
VETOR3[1] = "@R 9999"
VETOR3[2] = "@!"
VETOR3[3] = "@!"
VETOR3[4] = "@!"
VETOR3[5] = "@!"
VETOR3[6] = "@R 99999-999"
VETOR3[7] = "@R 999"
VETOR3[8] = "@R 9999-9999"
VETOR3[9] = "@R 999"
VETOR3[10] = "@R 9999-9999"
SELECT 1
SET ORDER TO 1
//GOTO TOP
SET COLOR TO I
@ 23,00 SAY " [ESC] FIM "
SET COLOR TO W/G+
@ 0,0 TO 3,79
@ 1,1 CLEAR TO 2,78
@ 1,32 SAY "::: CONSULTA :::"
@ 2,16 SAY " _TODOS OS CLIENTES_ "
@ 2,45 SAY DATE()
SET COLOR TO W/B+
@ 4,0 TO 22,79 DOUBLE
DBEDIT(5,1,22,78,VETOR2,.T.,VETOR1,VETOR3,.T.,.T.,.T.)
SET COLOR TO
SET CURSOR OFF
RESTORE SCREEN FROM TELCONS
RETURN .T.
*/
>> MAS ESTA DANDO ERRO NA FUNÇÃO..DBEDIT
Enviado: 11 Out 2007 14:48
por gvc
// Isto é clipper puro, deve funcionar no xharbour tb.
VETOR1 := {'CODIGO', 'CLIENTE', 'ENDERECO', 'BAIRRO', 'CIDADE', 'CEP', 'DDDTEL', 'TELEFONE', 'DDDCEL', 'CELULAR'}
VETOR2 := {'CODIGO', 'CLIENTE', 'ENDERECO', 'BAIRRO', 'CIDADE', 'CEP', 'DDDTEL', 'TELEFONE', 'DDDCEL', 'CELULAR'}
VETOR3 := {"@R 9999", "@!", "@!", "@!", "@!", "@R 99999-999", "@R 999", "@R 9999-9999", "@R 999", "@R 9999-9999"}
SELECT 1
SET ORDER TO 1
//GOTO TOP
SET COLOR TO I
@ 23,00 SAY " [ESC]Sair [F3] Procurar"
SET COLOR TO W/G+
@ 0,0 TO 3,79
@ 1,1 CLEAR TO 2,78
@ 1,32 SAY "::: CONSULTA :::"
@ 2,16 SAY " _TODOS OS CLIENTES_ "
@ 2,45 SAY DATE()
SET COLOR TO W/B+
@ 4,0 TO 22,79 DOUBLE
keyboard ' '
DBEDIT(5, 1, 22, 78, VETOR1, "func_usu", VETOR2, VETOR3, .T., .T., .T.)
SET COLOR TO
SET CURSOR OFF
RESTORE SCREEN FROM TELCONS
RETURN .T.
***
***
***
function func_usu
local a1
a1 := lastkey()
if a1 = 27 // ESC
keyboard ' '
return(0)
if a1 = -2 // F3
a2 := alert('Procurar por:', {'Codigo', 'Nome'})
if a2 = 1 // procura por código
xcod := space(10)
@ 05,05 clear to 07,20
@ 05,05 to 07,20
@ 06,06 say 'Codigo:' get xcod picture '999-99-999'
read
if lastkey() # 27 // ESC
dbsetorder(1) // ordem por código
if !dbseek(xcod)
alert('Codigo nao encontrado')
end
end
elseif a2 = 2 // procura por nome
xnom := space(50)
@ 05,05 clear to 07,70
@ 05,05 to 07,70
@ 06,06 say 'Nome:' get xnom picture '@!'
read
if lastkey() # 27 // ESC
dbsetorder(2) // ordem por nome
if !dbseek(xnom)
alert('Nome nao encontrado')
end
end
end
keyboard ' '
return(2)
end
return(1)
Enviado: 13 Out 2007 12:06
por mclpaltrin
- Fala man!
Seguinte agradeço pela força , mas a tecla F3 não esta funcionando...amigo
Em questão o DBEDIT a erro assim :
ERROR BASE/1003 VARIÁVEL NÃO EXISTENTE : PALTRINIERI
Não é variável mas sim o resposta do dbf CAMPO : cliente
Enviado: 13 Out 2007 13:42
por alaminojunior
Já que o nobre colega está fritando com dbedit, melhor parar e fritar com algo mais interessante. Segue aí um exemplo de tbrowse com pesquisa muito simples.
Código: Selecionar todos
Procedure Cli
Local Db:=Select(),Ix:=OrdSetFocus(),Tl:=SavEnv(04,00,MaxRow(),MaxCol())
set key K_F2 to
public getlist:={}
select cdcli000
OrdSetFocus("indcli01")
clicab = "C¢digo Nome Cidade/UF Cadastro"
nbox(04,00,24,79,"n+/w",.f.)
cTb4:= tbcolumnnew(clicab, { || tran(clicod,"@999999-9")+space(1)+clinom+space(1)+subs(clicid,1,15)+"-"+cliest+space(1)+dtoc(clidat) })
cTb3:= TbrowseDB(05,01,12,78)
cTb3:headsep:= chr(196)
cTb3:footsep:= chr(196)
cTb3:colorspec:= "b/w,gr+/b,n+/w,w/n,g/w"
cTb4:defcolor:= {5}
cTb4:colorblock:= {|cTb3| iif(clinom = " ", {3,4},{1,2})}
cTb3:addcolumn(cTb4)
do while .t.
do while !cTb3:stabilize()
enddo
medrfsrecc()
@ 22, 22 say versit(clisit) colo "r+/w"
tempo:= inkey(60)
do case
case tempo = K_ESC
select(Db)
ordsetfocus(Ix)
RstEnv(Tl)
exit
case tempo = 0
cTb3:refreshall()
loop
case tempo == K_DOWN
cTb3:down()
ctb3:refreshcurrent()
case tempo == K_UP
cTb3:up()
ctb3:refreshcurrent()
case tempo == K_PGDN
cTb3:PageDown()
cTb3:refreshall()
case tempo == K_PGUP
cTb3:PageUp()
cTb3:refreshall()
[b] case isalpha(Chr(lastkey())) .OR. lastkey() > 48 .AND. lastkey() < 58
if (lastkey() > 48 .AND. lastkey() < 58)
OrdSetFocus("indcli01")
ord:= 1
else
ordsetfocus("indcli02")
ord:= 2
endif
Keyboard Upper(Chr(lastkey()))
pesq(ord)
CliDest()
cTb3:RefreshAll()
loop[/b] endcase
enddo
Function VerSit(Local9)
cdsit000->(dbseek(local9))
return cdsit000->sitdsc
Function VerCiv
if cliciv = "C"
return "CASADO(A) "
elseif cliciv = "D"
return "DESQUITADO(A)"
elseif cliciv = "O"
return "OUTROS "
elseif cliciv = "V"
return "VIUVO(A) "
elseif cliciv = "S"
return "SOLTEIRO(A) "
else
return "OUTROS "
endif
Function Pesq(Arg)
local pesq2:=savenv(10,15,20,65),place:=recno()
if Arg = 1
msgbox3d(,"PESQUISA",,"w+/g","g/w")
pesq = 0
@ 12,23 get pesq pict "9999999999999" send colorspec := "gr/w"
setcursor(1)
read
setcursor(0)
if lastkey() = 27
rstenv(pesq2)
return
endif
set softseek off
if !dbseek(pesq)
tone(222,4)
msg("Cliente nao encontrado, verifique.")
rstenv(pesq2)
dbgoto(place)
return nil
endif
elseif arg == 2
set soft on
pesq = space(40)
msgbox3d(,"PESQUISA",,"w+/g","g/w")
@ 12,20 get pesq send colorspec:= "gr/w" pict "@!"
setcursor(1)
read
setcursor(0)
if lastkey() = 27
rstenv(pesq2)
return nil
endif
DbSeek(pesq)
set soft off
endif
rstenv(pesq2)
Function CliDest
Local Place:= Recno()
If Eof()
return
Endif
cTb3:RefreshAll()
Do While !cTb3:Stabilize()
Enddo
Do While Recno() != Place
cTb3:Up()
Do While !cTb3:Stabilize()
Enddo
Enddo
Return
Esta rotina de pesquisa é muito legal, pois dependendo do que vc digitou, ela já abre o indice e o get correspondente.
Boa sorte.