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.