我們在設計本地視圖后,通常希望在表單應用中能更新相應數(shù)據(jù)來源的記錄,即對視圖添加、修改或刪除的記錄能反映到相應的數(shù)據(jù)表中去,實現(xiàn)這種更新數(shù)據(jù)源表的本地視圖的方法如下。
設置關(guān)鍵字段。要設計一個可更新數(shù)據(jù)源的本地視圖,必須給本地視圖指定一個關(guān)鍵字段,在更新數(shù)據(jù)源時,該關(guān)鍵字段將作為比較本地視圖記錄與數(shù)據(jù)源中記錄的依據(jù),由此判別記錄是否發(fā)生了變化??梢灾付ǘ鄠€字段組合為關(guān)鍵字段,以保證關(guān)鍵字段能確定記錄。如果本地視圖對應有多個要更新的數(shù)據(jù)源表,則必須針對每一個數(shù)據(jù)源設置至少一個關(guān)鍵字段。
一般地,應指定對應于數(shù)據(jù)源中主關(guān)鍵字或候選關(guān)鍵字的字段為視圖的關(guān)鍵字段。
指定可更新字段。只有被指定為可更新字段后,該字段才可更新數(shù)據(jù)源中對應的字段。點按字段名列表中要指定為可更新字段的字段左邊鉛筆符號列的位置,該位置也將出現(xiàn)一個按鈕,點按該按鈕使之出現(xiàn)一個對勾,表示已指定該字段為可更新字段。 沒有指定為可更新字段的字段,是只讀字段,盡管改變了視圖中只讀字段的值,它們也不能對數(shù)據(jù)源進行更新。
可以點按左邊的全部更新按鈕,將所有非關(guān)鍵字段設置為可更新字段。
選中更新條件頁中的“發(fā)送SQL更新”復選框項。選中它后,才可將被更新的記錄字段采用UpdateSQL語句對數(shù)據(jù)源中的表進行更新。
選擇檢測更新沖突的方式。在更新條件頁中有一個“SQLWHERE子句包括”框,其中的選項用以控制將哪些字段添加到WHERE子句中,在將視圖修改傳送到數(shù)據(jù)源表時,可以檢測服務器上的更新沖突。沖突是由視圖中的舊值(而不是指修改后的值)和數(shù)據(jù)源的當前值之間的比較結(jié)果決定的(OLDVAL() 和CURVAL() 之間比較)。如果兩個值相等,則認為原始值未做修改,不存在沖突;如果它們不相等,則存在沖突,數(shù)據(jù)源返回一條錯誤信息。
---- 舊值和當前值之間的沖突所返回的錯誤為“錯誤1585:記錄已被其他人修改”,或者是“錯誤1494:更新沖突。請使用TABLEUPDATE()進行強制更新或使用TABLEREVERT()回滾”。
---- “SQLWHERE子句包括”中包括如下選項:
關(guān)鍵字段:如果在數(shù)據(jù)源表中有一個關(guān)鍵字字段被改變,設置WHERE子句來檢測沖突。而對于由另一用戶對數(shù)據(jù)源表中原始記錄的其他字段所做的修改,則不進行比較。它是最保守的更新方式,完全不考慮在本地視圖中輸出的字段中哪些有可更新性,而只將本地視圖中的所有記錄用關(guān)鍵字段進行比較。
關(guān)鍵字和可更新字段:如果另一用戶修改了任何可更新的字段,設置WHERE子句來檢測沖突。
關(guān)鍵字和已修改字段:如果從視圖首次檢索(默認)以后,關(guān)鍵字字段或數(shù)據(jù)源表記錄的已修改字段中,某個字段做過修改,設置WHERE子句來檢測沖突。
關(guān)鍵字段和時間戳:用于遠程視圖,對本地視圖無用。
選擇更新數(shù)據(jù)源的方式。在更新條件頁具有一個“使用更新”框,它提供了兩種更新數(shù)據(jù)源的方式供選擇,以指定字段如何在后端服務器上更新:
SQLDELETE/INSERT方式:先刪除數(shù)據(jù)源表中原來的記錄,然后再插入一條新的在視圖中被修改了的記錄,即更新=刪除+插入。
SQLUPDATE方式:用視圖字段中的變化來置換修改數(shù)據(jù)源表的字段值。 ---- 只有在仔細設置好上述各項內(nèi)容之后,該本地視圖才能用來更新數(shù)據(jù)源表數(shù)據(jù)。
設置關(guān)鍵字段。要設計一個可更新數(shù)據(jù)源的本地視圖,必須給本地視圖指定一個關(guān)鍵字段,在更新數(shù)據(jù)源時,該關(guān)鍵字段將作為比較本地視圖記錄與數(shù)據(jù)源中記錄的依據(jù),由此判別記錄是否發(fā)生了變化??梢灾付ǘ鄠€字段組合為關(guān)鍵字段,以保證關(guān)鍵字段能確定記錄。如果本地視圖對應有多個要更新的數(shù)據(jù)源表,則必須針對每一個數(shù)據(jù)源設置至少一個關(guān)鍵字段。
一般地,應指定對應于數(shù)據(jù)源中主關(guān)鍵字或候選關(guān)鍵字的字段為視圖的關(guān)鍵字段。
指定可更新字段。只有被指定為可更新字段后,該字段才可更新數(shù)據(jù)源中對應的字段。點按字段名列表中要指定為可更新字段的字段左邊鉛筆符號列的位置,該位置也將出現(xiàn)一個按鈕,點按該按鈕使之出現(xiàn)一個對勾,表示已指定該字段為可更新字段。 沒有指定為可更新字段的字段,是只讀字段,盡管改變了視圖中只讀字段的值,它們也不能對數(shù)據(jù)源進行更新。
可以點按左邊的全部更新按鈕,將所有非關(guān)鍵字段設置為可更新字段。
選中更新條件頁中的“發(fā)送SQL更新”復選框項。選中它后,才可將被更新的記錄字段采用UpdateSQL語句對數(shù)據(jù)源中的表進行更新。
選擇檢測更新沖突的方式。在更新條件頁中有一個“SQLWHERE子句包括”框,其中的選項用以控制將哪些字段添加到WHERE子句中,在將視圖修改傳送到數(shù)據(jù)源表時,可以檢測服務器上的更新沖突。沖突是由視圖中的舊值(而不是指修改后的值)和數(shù)據(jù)源的當前值之間的比較結(jié)果決定的(OLDVAL() 和CURVAL() 之間比較)。如果兩個值相等,則認為原始值未做修改,不存在沖突;如果它們不相等,則存在沖突,數(shù)據(jù)源返回一條錯誤信息。
---- 舊值和當前值之間的沖突所返回的錯誤為“錯誤1585:記錄已被其他人修改”,或者是“錯誤1494:更新沖突。請使用TABLEUPDATE()進行強制更新或使用TABLEREVERT()回滾”。
---- “SQLWHERE子句包括”中包括如下選項:
關(guān)鍵字段:如果在數(shù)據(jù)源表中有一個關(guān)鍵字字段被改變,設置WHERE子句來檢測沖突。而對于由另一用戶對數(shù)據(jù)源表中原始記錄的其他字段所做的修改,則不進行比較。它是最保守的更新方式,完全不考慮在本地視圖中輸出的字段中哪些有可更新性,而只將本地視圖中的所有記錄用關(guān)鍵字段進行比較。
關(guān)鍵字和可更新字段:如果另一用戶修改了任何可更新的字段,設置WHERE子句來檢測沖突。
關(guān)鍵字和已修改字段:如果從視圖首次檢索(默認)以后,關(guān)鍵字字段或數(shù)據(jù)源表記錄的已修改字段中,某個字段做過修改,設置WHERE子句來檢測沖突。
關(guān)鍵字段和時間戳:用于遠程視圖,對本地視圖無用。
選擇更新數(shù)據(jù)源的方式。在更新條件頁具有一個“使用更新”框,它提供了兩種更新數(shù)據(jù)源的方式供選擇,以指定字段如何在后端服務器上更新:
SQLDELETE/INSERT方式:先刪除數(shù)據(jù)源表中原來的記錄,然后再插入一條新的在視圖中被修改了的記錄,即更新=刪除+插入。
SQLUPDATE方式:用視圖字段中的變化來置換修改數(shù)據(jù)源表的字段值。 ---- 只有在仔細設置好上述各項內(nèi)容之后,該本地視圖才能用來更新數(shù)據(jù)源表數(shù)據(jù)。