RE:Modificar datos de un DBF
Toma un ejemplo con un Tbrowse :
/*
Procedimiento : MCLIE.PRG
Mantenimiento clientes
Programado : P.P.
Fecha : 02.02.98
*/
*****************
*** MCLIE.PRG ***
*****************
#Include "Inkey.ch"
#Include "SetCurs.ch"
// Construye las columnas
LOCAL oCol1 := TBColumnNew("CODIGO", FieldBlock("CO_DCLI"))
LOCAL oCol2 := TBColumnNew("NOMBRE", FieldBlock("NO_MCLI"))
LOCAL oCol3 := TBColumnNew("N.I.F.", FieldBlock("NI_FCLI"))
LOCAL oCol4 := TBColumnNew("FAX", FieldBlock("FA_XCLI"))
LOCAL oCol5 := TBColumnNew("Pago", FieldBlock("MO_DOPA"))
LOCAL oBrw := TBrowseDB(2,2,13,77) // Construye el TBrowse
LOCAL cColor := Select("w/n")
LOCAL nKey,oGet,xOldKey,xNewKey
LOCAL bapend1 := {|| Apend1(oBrw) }
LOCAL nCursor := SetCursor(SC_NONE)
LOCAL xText := "Insert = A¤adir Supr = borrar Intro = Editar Esc = Salir"
SetBlink(.F.)
Set(_SET_DELETED, .T.)
Set(_SET_SCOREBOARD, .F.)
cls
DispBox(1,1,14,78,1,"r/w*,gb+/b")
@ 24,7 say xText
select 3
USE clien index nomb
select 5
use numcli
xcodi_go = codigo
select 3
// Efectos especiales
oBrw:colorSpec("r/w*,gb+/b")
oBrw:colSep := " º "
oBrw:headSep := "ÄÒÄ"
// Carga las columnas al TBrowse
oBrw:addColumn(oCol1)
oBrw:addColumn(oCol2)
oBrw:addColumn(oCol3)
oBrw:addColumn(oCol4)
oBrw:addColumn(oCol5)
// Bucle de proceso
select 3
WHILE .T.
nKey := TbStd(oBrw,,bApend1) // Teclas automatizadas
IF nKey == K_ESC
DbCloseArea()
EXIT
ELSEIF nKey == K_DEL
clien->(DbDelete())
IF oBrw:rowPos == 1
oBrw:up()
ENDIF
oBrw:refreshAll()
ELSEIF nKey == K_ENTER
// Proceso de edici¢n del fichero
SetCursor(SC_NORMAL)
do modcli // Llama a rutina modificaciones
@ 15,1 clear to 21,61
oBrw:refreshCurrent()
oBrw:ForceStable()
SetCursor(SC_NONE)
ENDIF
END WHILE
Select(cColor)
SetCursor(nCursor)
CLS
RETURN NIL
// Funci¢n para insertar registros
FUNCTION Apend1(oBrw)
LOCAL GetList := {}
LOCAL xno_mcli := Space(40)
LOCAL xni_fcli := Space(10)
LOCAL xfa_xcli := Space(10)
LOCAL xmo_dopa := Space(2)
LOCAL cColor := SetColor("n/gb,gb+/b")
SetCursor(SC_NORMAL)
Tone(450,1)
Tone(300,1)
DispBox(15,1,21,61,1,"n/gb,gb+/b")
@ 16,2 CLEAR TO 20,60
xcodi_go = xcodi_go+1
@ 16,5 SAY "C¢digo... : "
@ 16,20 say xcodi_go picture "999999"
@ 18,5 say "Nombre... : " get xno_mcli PICTURE "@!";
VALID busc2(xno_mcli)
@ 20,5 SAY "N.I.F. .. : " GET xni_fcli PICTURE "@!"
@ 20,32 SAY "Fax ..: " GET xfa_xcli picture "9999999999"
@ 16,32 say "Pago .: " GET xmo_dopa picture "@!"
READ
IF LastKey() # K_ESC
clien->(DbAppend())
clien->Co_dcli := xcodi_go
clien->no_mcli := xno_mcli
clien->ni_fcli := xni_fcli
clien->fa_xcli := xfa_xcli
clien->mo_dopa := xmo_dopa
do numera
oBrw:refreshAll()
oBrw:forceStable()
ENDIF
SetCursor(SC_NONE)
SetColor(cColor)
@ 15,1 CLEAR TO 21,62
RETURN NIL
// Funcion para verificar duplicados
FUNCTION busc2(cParam)
LOCAL cPant, nCursor, lvalor
SEEK cParam
IF FOUND()
lvalor := .F.
cPant := SaveScreen()
nCursor := SetCursor(0)
@ 18,3 clear to 22,60
DispBox(18,3,22,60,2)
@ 19,5 say "Ya existe en la base de datos"
@ 21,5 say "Asignado a "+ clien->no_mcli
inkey(0)
SetCursor(nCursor)
RestScreen(,,,,cPant)
ELSE
lvalor := .T.
ENDIF
RETURN lValor
* --------------------------------------------*
* --- PROCEDURE NUMERA ---*
* --------------------------------------------*
PROCEDURE NUMERA
select 5
replace codigo with xcodi_go
select 3
return