Edicao no Dbedit

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Edicao no Dbedit

Mensagem 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.
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem 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+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Entendi sim.
Mas vamos avançar um pouquinho então.
Como é que vc faz esta edição de todos os campos ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem 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)
.
.
.
.
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem 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+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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 ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Mensagem 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.
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder