設(shè)計(jì)可更新數(shù)據(jù)源表的本地視圖

字號(hào):

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