Edicao no Dbedit
Moderador: Moderadores
Edicao no Dbedit
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.
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.....
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
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.
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
MySQL c/ SQLRDD
HwGui + GTWVG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
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)
.
.
.
.
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.....
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
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.
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)
endcaseCompilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
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.
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
MySQL c/ SQLRDD
HwGui + GTWVG
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.
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}
{POG - Programação Orientada a Gambiarra}
