Hay otra opción. Podría ser algo como esto lo que sigue, este código recorre los campos del DW, sin saber los nombres del mismo y te indica el estatus de cada campo, puedes basarte en esto, para que veas cómo se puede acceder a la información. Para modificar la información lo haces como indica amilcar.
$PBExportHeader$f_getitemstatusname.srf
global type f_getitemstatusname from function_object
end type
forward prototypes
global function string f_getitemstatusname (ref datawindow adw_1, string as_campo, integer ai_fila, dwbuffer adwbuf_1)
end prototypes
global function string f_getitemstatusname (ref datawindow adw_1, string as_campo, integer ai_fila, dwbuffer adwbuf_1);Choose Case adw_1.GetItemStatus(ai_fila, as_campo, adwbuf_1)
Case New!
RETURN 'NEW'
Case NewModified!
RETURN 'NewModified'
Case NotModified!
RETURN 'NotModified'
End Choose
RETURN 'DataModified'
end function
$PBExportHeader$f_getrecordstatus.srf
global type f_getrecordstatus from function_object
end type
forward prototypes
global subroutine f_getrecordstatus (ref datawindow adw_datawindow, integer ai_row)
end prototypes
global subroutine f_getrecordstatus (ref datawindow adw_datawindow, integer ai_row);Integer li_Tot_Columnas, li_1
String ls_nombre_campo
li_Tot_Columnas=Integer(adw_datawindow.Describe('DataWindow.Column.Count'))
For li_1=1 to li_Tot_Columnas
ls_nombre_campo=adw_datawindow.Describe('#'+String(li_1)+'.Name')
Messagebox('f_getrecordstatus', 'Campo('+ls_nombre_campo+') Status('+f_GetItemStatusName(adw_datawindow, ls_nombre_campo, li_1, PRIMARY!)+')', Information!)
Next
end subroutine