Página 1 de 1

Edicao no Dbedit

Enviado: 23 Jan 2008 21:18
por marbio
Ola amigos,

Estou com uma duvida, como fazer edicao de dados no dbedit. mas so quero alguns campos q o usuario vai ver.

banco de dados e seus campos
codigo nome datanasc endereco cidade cep uf cpf cnpj referencia

eu quero mostrar estes dados e fazer alteraçao no dbedit so neste campos.

NOME ENDERECO REFERENCIA.

desde ja agrade sua atençao.
t+
Marbio.

Enviado: 23 Jan 2008 21:45
por alaminojunior
Veja bem, vc não fará a edição no DBedit().
O que o dbedit() faz para voce é tão somente listar o conteudo de um arquivo dbf.
Sendo assim vc pode jogar numa variavel o conteudo da linha em questão e edita-lo.
Atendendo as condições, vc salva no banco de dados com o replace e em seguida o dbedit vai te mostrar novamente o banco de dados, desta vez com os novos dados.

Enviado: 23 Jan 2008 21:55
por marbio
Ola,

Eu acho q vc nao me entendu! a edicao ja esta fazendo nele todo.
Eu quero a ediçao so em alguns campo.
conforme eu descrevi.
t+

Enviado: 23 Jan 2008 22:00
por alaminojunior
Entendi sim.
Mas vamos avançar um pouquinho então.
Como é que vc faz esta edição de todos os campos ?

Enviado: 23 Jan 2008 22:02
por marbio
Blz.

Eu dou enter em cima do campo q eu quero e faço a edicao, o meu bando de dados esta todo aberto na tela.



dbedit(06,07,19,73,,"edicao")

************************************
function edicao
parameters mode, counter
setcursor(0)
coled=col()
lined=row()
do case
case mode = 1
tone(845)
return 1
case mode = 2
return 1
case mode = 3
return 0
case mode = 4
if (LastKey() = K_ESC)
return 0
elseif (LastKey() = K_ENTER)
@03,30 say nome
campo=fieldname(counter)
if rlock()
if type("&campo")="M"
replace &campo with &campo
Dbcommit()
else
@lined,coled get &campo
set cursor on
read
set cursor off
endif
else
msgrb()
endif
unlock
DBcommit()
keyboard chr(4)
return(1)
elseif (LastKey() = -2)
.
.
.
.

Enviado: 23 Jan 2008 22:09
por alaminojunior
Por isso que disse, não use ele para editar, e sim mostrar apenas.
Deixa e edição,inclusão e exclusões por conta de uma outra função.
Veja se te ajuda a compreender o que quis dizer.

Código: Selecionar todos

use cdbas000 shar
dbsetindex("indbas")
set colo to
priv vCampos[1]
priv vCab[1]
vcampos[1] = "str(bascod,3)+space(2)+str(basalq,6,2)+space(2)+str(basbas,6,2)+space(2)+substr(basmen,1,35)+space(2)+bassit+space(2)+basfis"
vcab[1] = "C¢d.   Al¡q.   Base   Mensagen                          Sit. Acum."
goto top
set colo to "b/bg","bg+/n"
DBEDIT(09,06,17,73,vcampos,"DB","@!",vcab,chr(196),chr(255),chr(196)) 
clos data
return

Func DB
Parameters modo, indice
indice = 1
do case
   case modo = 0
        indice = 1
   case modo = 1
        indice = 1
   case modo = 2
        indice = 1
   case modo = 3
        indice = 1
   case modo = 4
      do case
      * [Saida]
      case lastkey() = 27
           @ 03,00 say " * Fechando Arquivos ... *" colo "w+/n"
           indice = 0

      * [Espa‡o]
      case lastkey() = 32
           inc1:=savescreen(08,05,22,74)
           inc2:=ordsetfocus()
           inc3:=select()
           inc4:=setcolor()
           do while Lastkey() != 27
              caixa(15,07,21,73,"bg/w*")
              alq = basalq
              bas = basbas
              men = basmen
              sit = bassit
              fis = basfis
              set colo to "w+/bg"
              @ 15,25 say "Altera‡„o de Bases de C lculo"
              set colo to "r/bg"
              @ 16,26 say bascod picture "999"
              LayBas() 
              inc5:=savescreen(15,07,21,73)
              set colo to "w/bg,gr+/b,,,w/bg"
              @ 17,19 get alq pict "@E9,999.99"
              @ 17,63 get bas pict "@E9,999.99"
              @ 18,19 get men pict "@!s50"
              @ 19,30 get sit pict "@!"
              @ 19,60 get fis pict "@!"
              set curs on
              read
              set curs off
              if (LastKey() == K_ESC)
                 loop
              endif
              Confirma()
              if op = "N"
                 exit
              endif
              if !rlock() = .F.
                 replace basalq with alq
                 replace basbas with bas
                 replace basmen with men
                 replace bassit with sit
                 replace basfis with fis
                 go recno()
                 unlock
              endif 
              exit
              RestScreen(17,07,21,73,inc5)
           enddo
           set cursor off
           setcolor(inc4) 
           RestScreen(08,05,22,74,inc1)
           ordsetfocus(inc2)
           indice = 2

      * [Delete]      
      case lastkey() = 7
           confirma()
           if op = "S"
              do while .t.
                 if rlock() = .t.
                    dele
                    exit
                 endif
              enddo
              indice = 2
           else
              indice = 1
           endif
         
endcase          
return(indice)
endcase

Enviado: 23 Jan 2008 22:16
por marbio
OK,

entendi o q vc quiz dizer agora, ate pode dar certo, tem q testar isso. desta forma.

blz.

mas sera q da forma q eu quero tem jeito?

t+

Enviado: 23 Jan 2008 22:22
por alaminojunior
Para ser sincero, nem sei como vc consegue fazer isso ?
Na realidade vc está editando campos. O melhor (no meu modo de ver) seria voce editar variaveis. Fico imaginando isso numa rede, funciona ?

Enviado: 23 Jan 2008 22:25
por marbio
entao,

em rede nunca tive problema, trava o registro normal, faz a edição, da outro enter destrava registro.

vou ver esta sua ideia

blz.

Enviado: 23 Jan 2008 22:34
por alaminojunior
Então, a idéia é simples.
Vc usa o dbedit() apenas para visualizar os dados.
Vc pode usar outras funções, para as edições, inclusões, abrir outros dbedit´s, enfim...use a imaginação.
E depois disso, o caminho natural, seria passar a usar a classe Tbrowse. Aí voce pode continuar a usar a imaginação, pois esta classe te dá muitas outras potencialidades.
Como vc ja deve saber a função dbedit() é reentrante. Uma vez dentro dela, sempre dentro dela, até sair. A classe Tbrowse já é diferente, te deixa mais livre.
Mas, aproveite bem o dbedit, e quando achar que não tem mais o que explorar dele, passe a usar tbrowse. É muito simples de entender.

Enviado: 24 Jan 2008 11:20
por gvc
Use o dbedit para mostrar os dados.
Quando o usuário pertar as teclas Enter ou Insert, a função-do-usuário deverá abrir um quadro e mostrar os campos que serão editado.

mat1 := {'codigo', 'nome', 'datanasc', 'endereco', 'cidade', 'cep', 'uf', 'cpf', 'cnpj', 'referencia'}
mat2 := {<coloque as respectivas mascaras aqui'>}
mat3 := {<coloque o nome das respectivas colunas aqui>}

keyboard ' '
dbedit(06,07,19,73, mat1, "edicao", mat2, mat3)

************************************
function edicao
local as := lastkey()

if as = 27
return(0)
elseif as = 13 .or. as = 22// ENTER ou INSERT
if as = 13
rlock(0)
xnome := NOME
xende := ENDERECO
xrefe := REFERENCIA
else
xnome := space(30)
xende := space(40)
xrefe := space(40)
end

@ 05,05 clear to 20,60
@ 05,05 to 20,60
@ 06,07 say 'Nome:' get xnome picture '@!' valid "empty(xnome)
@ 07,07 say 'Endereco:' get xende picture '@!' valid !empty(xende)
@ 08,07 say 'Referencia:' get xrefe picture '@!'
setcursor(1)
read
setcursor(0)

if lastkey() # 27
if as = 22
dbappend()
end
<alias>->nome := xnome
<alias>->endereco := xende
<alias>->referencia := xrefe
<alias>->(dbcomit(), dbunlock())
end
keyboard ' '
return(2)
end
return(1)

Vc pode colocar o quadro de edição com todos os campos. Use o (when .F.) para bloquear os campos que o usuário não deve acessar.

Espero ter ajudado. Boa sorte.