// 确认DataWindow中的每一列是否属于要修改的表中的列,如是将其update 属性设为Yes,否则为No.
FOR i=1 To ll_maxcol
ls_mod="#"+String(i)+".Name"
ls_colnam=a_dw.Describe(ls_mod)
ls_table_name=a_dw.Describe(ls_colnam + ".dbName")
ls_table_name=Left(ls_table_name,(Pos(ls_table_name,".",1) - 1))
If(Upper(as_update_table)=Upper(ls_table_name))Then
ls_mod=ls_colnam+".Update=Yes"
Else
// 如果该列不在可修改的表中,
// 而其为主键的属性为TRUE
// 将其列名存在ls_updatekey[ ]中
// 并将其主键的属性设为FALSE。
// 由于PB不保留列的全名,我们不能。
// 保留非修改表的键的名称。
// 所以我们将其保留在数组之中,以便其恢复
If(Upper(a_dw.Describe(ls_colnam+".Key"))=" YES")Then
ls_updatekey[upperbound(ls_updatekey[]) + 1]=ls_colnam
ls_mod=ls_colnam+".Key=No"
If(a_dw.Modify(ls_mod)<>"")Then Return 2
End If
ls_mod=ls_colnam+".Update=No"
End IF
// 确认修改是否成功
If(a_dw.Modify(ls_mod)<>"")Then Return 2
NEXT
// 将修改表名设置为全称
a_dw.object.DataWindow.Table.UpdateTable = ls_qualifier + as_update_table
// 修改DataWindow
If(a_dw.Update(TRUE,FALSE)<>1)Then
Return 5
Else
// 将DataWindow恢复为其原来的状态
ll_maxcol=UpperBound(ls_updatekey)
FOR i=1 to ll_maxcol
ls_mod=ls_updatekey[i]+".key=Yes"
If (a_dw.Modify(ls_mod)<>"") Then Return 6
next