所以一旦要對多個Table同時更新,最簡單的方式是編寫SQL直接對Table寫入。
但是如果數量一多,效能似乎不太好。
可以利用這個函數改變datawindow update的設定,達到多表更新的效果。
//====================================================================
// Event: .f_update()
//--------------------------------------------------------------------
// Description:多表更新
//--------------------------------------------------------------------
// Arguments:
// datawindow dw_update 要更新的datawindow
// string as_tablename 要更新的Table
//--------------------------------------------------------------------
// Modify History:
//
//====================================================================
Integer i_Columns,i_Count
String s_DBName,s_sztablename,s_colname,s_modify,s_keyfields
i_Columns = Integer( dw_update.Object.DataWindow.Column.Count )
as_tablename = Lower( as_tablename )
For i_Count = 1 To i_Columns
s_dbname = dw_update.Describe( "#" + String( i_Count ) + ".DBName ")
s_colname = dw_update.Describe( "#" + String( i_Count ) + ".Name ")
//得到要更新的Table
s_sztablename = Lower( LeftA( s_dbname, PosA( s_dbname, ".") - 1) )
If s_sztablename = as_tablename THEN
s_modify = s_colname + ".Update = Yes " //該列可更新
IF dw_update.Describe(s_colname + ".key ")= "yes " THEN //同時是pk
s_modify = s_modify + " " + s_colname + ".Key = Yes "
ELSE
s_modify = s_modify + " " + s_colname + ".Key = no "
END IF
Else
s_modify = s_colname + ".Update = No " + s_colname + ".Key = No "
End If
If dw_update.Modify( s_modify ) <> "" THEN
Return FALSE
End If
Next
dw_update.Object.DataWindow.Table.UpdateTable = as_tablename
IF dw_update.Update() > 0 THEN
commit;
Return TRUE
Else
rollback;
Return FALSE
End If
沒有留言:
張貼留言