Datawindow裡面資料Row的狀態變化
DataWindow 的 Row 在讀取、新增、修改後都有不同的狀態紀錄,
要取得該 Row 狀態只要使用下面這個指令就可以:
上面程式片碼中 li_column 如果為 0 ,代表取得整個 Row 狀態。
DWItemStatus 有四種狀態:
關於 SQL 的執行
DataWindow 在 Update() 時,會自動產生 SQL 語法,因此會跟狀態有關:
你也可以自行變更狀態
當然,某些情況須需要時,可以自行變更 Row/Column 的狀態的,以下就是變更方式:
上面程式片碼中 li_column 如果為 0 ,代表設定整個 Row 狀態。
設定要素
由於 Row 與 Column 的 Flag 分別為不同紀錄標籤,所以在設定時要注意到影響的目標,
下面這個表可以表示哪些狀態可以被變更,或是變更後會形成新的狀態:
無法直接變更要怎麼處理
如上表所示,某些狀態變會無法直接變更,在這種情況下,就必須採用轉向方式變更,
下面的程式碼展示如何將 New! 變更成 NotModified :
清除所有狀態
如若要一次清除 Datawindow 內所有狀態到 NotModified!,可以直接使用 RestUpdate() 指令:
要取得該 Row 狀態只要使用下面這個指令就可以:
DWItemStatus ldwi_row
ldwi_row = dw_1.GetItemStatus(ll_row , li_column , Primary!)或
ldwi_row = dw_1.GetItemStatus(ll_row , "col_name", Primary!)
上面程式片碼中 li_column 如果為 0 ,代表取得整個 Row 狀態。
DWItemStatus 有四種狀態:
New! (新增 row)但是要注意的是一個 Row 有兩種狀態 Flag (標籤)用來記錄其受影響的目標:
NewModified! (新增 row 並修改內容)
DataModified! (資料內容被修改)
NotModified! (沒有任何修改)
Row Flag (影響範圍屬於整列狀態,一列資料只有一個這樣的標籤紀錄)而各狀態相關的範圍如下:
Column Flag (影響範圍為單一欄位,每個欄位都有一個這樣的標籤紀錄)
狀態 | 受影響標籤 |
---|---|
New! | Rows |
NewModified! | Rows |
DataModified! | Rows 與 Columns |
NotModified! | Rows 與 Columns |
- 資料如果從資料庫讀取以後,狀態會屬於 NotModified!
- 資料如果是新增,狀態會是 New!
- 資料如果是匯入以後,狀態會是 NewModified!
- 如果是新增以後,修改資料內容,狀態也會是 NewModified!
- 如果是 NotModified! 狀態修改資料,狀態會變更為 DataModified!
- 當DataWindow執行過 Update(),如果成功改 Row 會變更為 NotModified!
關於 SQL 的執行
DataWindow 在 Update() 時,會自動產生 SQL 語法,因此會跟狀態有關:
狀態 | 產生語法 |
---|---|
NewModified! | INSERT |
DataModified! | UPDATE |
你也可以自行變更狀態
當然,某些情況須需要時,可以自行變更 Row/Column 的狀態的,以下就是變更方式:
DWItemStatus ldwi_row
ldwi_row = NotModifuied!
dw_1.SetItemStatus(ll_row , li_column , Primary! , ldwi_row) 或
dw_1.SetItemStatus(ll_row , "col_name" , Primary! , ldwi_row)
上面程式片碼中 li_column 如果為 0 ,代表設定整個 Row 狀態。
設定要素
由於 Row 與 Column 的 Flag 分別為不同紀錄標籤,所以在設定時要注意到影響的目標,
下面這個表可以表示哪些狀態可以被變更,或是變更後會形成新的狀態:
原始狀態 | 更新狀態 | |||
---|---|---|---|---|
New! | NewModified! | DataModified! | NotModified! | |
New! | 不變 | Yes | Yes | No |
NewModified! | No | 不變 | Yes | New! |
DataModified! | NewModified! | Yes | 不變 | Yes |
NotModified! | Yes | Yes | Yes | 不變 |
無法直接變更要怎麼處理
如上表所示,某些狀態變會無法直接變更,在這種情況下,就必須採用轉向方式變更,
下面的程式碼展示如何將 New! 變更成 NotModified :
DWItemStatus ldwi_row
ldwi_row = dw_1.SetItemStatus(ll_row , li_column , Primary!)
if ldwi_row = New! or ldwi_row = NewModified! then
dw_1.SetItemStatus(ll_row , li_column , Primary! , DataModified!)
dw_1.SetItemStatus(ll_row , "col_name" , Primary! , NotModified!)
end if
清除所有狀態
如若要一次清除 Datawindow 內所有狀態到 NotModified!,可以直接使用 RestUpdate() 指令:
dw_1.ResetUpdate()
留言