foxpro用離線視圖工作

字號(hào):

你可以用 USE 命令打開(kāi)離線視圖就象打開(kāi)一個(gè)聯(lián)線視圖一樣。然而, 就象我在前面的說(shuō)明一樣, VFP 事實(shí)上打開(kāi)離線視圖的持久表而不是執(zhí)行一條一般的 SQL SELECT 命令。
    使用離線視圖工作時(shí)有一些要注意的事:
    改變模式到離線視圖,添加, 修改或刪除操作都是對(duì)視圖表而沒(méi)有寫(xiě)回到視圖所基于的源表。這意味著其它人打開(kāi)源表時(shí),看不到數(shù)據(jù)在離線視圖中的改變。
    在另一方面: 你也不能從源表中刷新離線視圖的內(nèi)容。
    視圖表的行動(dòng)象一個(gè)普通表的緩存。getfldstate() 和getnextmodified() 反映了視圖的緩存狀態(tài)。tableupdate() 將視圖緩沖中的修改寫(xiě)回到視圖表中, tablerevert() 則取消修改。沒(méi)有這些函數(shù)將不能對(duì)源表進(jìn)行任何處理。
    你不能修改視圖表的結(jié)構(gòu),也不能使用對(duì)它使用create trigger, insert, pack, 或 zap 命令 (但可以使用delete all)。
    與聯(lián)線視圖一樣, 離線視圖自動(dòng)使用行緩存和表緩存, 因此你應(yīng)該將multilocks 設(shè)置為 on。如果你試圖關(guān)閉緩存將會(huì)得到一條錯(cuò)誤信息。
    與聯(lián)線視圖不同的是, 打開(kāi)一個(gè)離線視圖不會(huì)自動(dòng)打開(kāi)視圖所基于的源表 ,這是由于離線視圖是與源表"脫離的"。這意味著當(dāng)你把離線視圖交給別人時(shí),不需要提供源表的拷貝 (它可能會(huì)非常大或是一個(gè)非VFP 數(shù)據(jù)表)。同時(shí)也意味著你可以在源表上進(jìn)行某些類(lèi)型的(諸如重建索引之類(lèi))維護(hù), 甚至在多個(gè)用戶打開(kāi)離線視圖時(shí)。稍后我們將看到這種例子。
    在離線視圖上輸入數(shù)據(jù)時(shí),源表的規(guī)則和觸發(fā)器不會(huì)激活, 僅當(dāng)你將數(shù)據(jù)更新到源表時(shí), 源表的規(guī)則和觸發(fā)器才會(huì)激活。這就是說(shuō)除非你為使用 dbsetprop()為離線視圖定義了規(guī)則, 有可能有不正確的數(shù)據(jù)進(jìn)入離線視圖并不能在較早的時(shí)候被發(fā)現(xiàn)。
    如果你使用"修補(bǔ)關(guān)鍵字", 你需要為添加到視圖中的記錄指定關(guān)鍵字值。最常用的指定關(guān)鍵字段值的方法是調(diào)用一個(gè)NEXTID 程序來(lái)為該表的取得下一個(gè)可用的基本關(guān)鍵字段值。如果你使用的是這種方案, 你需要使用dbsetprop() 來(lái)設(shè)置離線視圖中的字段的DefaultValue 屬性,這樣添加記錄到離線視圖中時(shí)可取得指定的關(guān)鍵字段值。
    使用候選關(guān)鍵字段的一個(gè)不利因素是: 如果離線視圖用于允許遠(yuǎn)程數(shù)據(jù)輸入 (如在筆記本電腦中), 你需要為每一個(gè)筆記本電腦指定一個(gè)關(guān)鍵字段值塊,這樣主關(guān)鍵字段的值才不會(huì)重復(fù)。作為一種選擇, 你可以將用戶名或筆記本電腦名組合進(jìn)關(guān)鍵字段值中, 這樣就不用擔(dān)心會(huì)出現(xiàn)相同的主關(guān)鍵字段值了。
    如果一個(gè)離線視圖是用于一個(gè)遠(yuǎn)程計(jì)算機(jī)上進(jìn)行數(shù)據(jù)輸入, 你需要傳送離線視圖表(包括FPT), 持久表緩存文件和數(shù)據(jù)庫(kù)容器(DBC, DCX, 和DCT) 到那個(gè)遠(yuǎn)程計(jì)算機(jī)中。
    如果你需要確定自視圖離線后那些記錄被修改了, 使用use 命令的admin 子句。這需要以獨(dú)占方式訪問(wèn)視圖表否則你會(huì)得到一條錯(cuò)誤信息。下面是使用該命令的例子:
    use LV_CUSTOMER admin exclusive
    當(dāng)用admin 模式打開(kāi)視圖時(shí),它自動(dòng)使用表緩存而不是行緩存。
    試圖改變表的緩存模式會(huì)造成錯(cuò)誤。
    一但視圖以admin 模式打開(kāi), 你可以使用getnextmodified() 和 getfldstate() 來(lái)確定哪些記錄和這些記錄中的哪些字段被修改了。
    有趣的是, 在admin模式下打開(kāi)一個(gè)離線視圖時(shí)并沒(méi)有自動(dòng)打開(kāi)它的源表, 因此 VFP 必須使用 TBF 文件來(lái)檢查哪些記錄被修改了。
    當(dāng)視圖在管理模式下打開(kāi)時(shí),你不能更新源表; 更詳細(xì)的信息參見(jiàn)下一章中的更新源表。可是, 你可以使用tablerevert() 來(lái)撤消對(duì)離線視圖的修改.