?? visual foxpro 5.txt
字號:
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
a31
a32
---- 從 表 上 可 以 看 出, 左 連 接 產(chǎn) 生 的 結(jié) 果 記 錄 集 中 以 連 接 關(guān) 系 的 左 邊 數(shù) 據(jù) 表 為 基 準(zhǔn), 將 左 邊 記 錄 全 部 輸 出, 同 時 對 滿 足 左 連 接 條 件 的 右 邊 數(shù) 據(jù) 表 中 相 關(guān) 記 錄 的 內(nèi) 容 也 輸 出。 而 對 右 邊 表 中 無 滿 足 連 接 條 件 的 左 邊 表 記 錄, 其 輸 出 結(jié) 果 中 有 關(guān) 右 邊 記 錄 信 息 全 置 空。
---- 使 用 右 連 接(RIGHT OUTER JOIN), 與 左 連 接 方 式 相 反, 它 以 右 邊 表 為 主, 用 于 對 連 接 條 件 右 邊 字 段 所 在 的 表 進(jìn) 行 全 部 記 錄 查 詢, 并 連 接 條 件 左 邊 字 段 所 在 表 滿 足 連 接 條 件 的 記 錄 進(jìn) 行 查 詢。 當(dāng) 右 邊 數(shù) 據(jù) 表 中 有 記 錄 而 左 邊 數(shù) 據(jù) 表 中 無 相 應(yīng) 連 接 條 件 的 記 錄 時, 則 輸 出 的 左 邊 數(shù) 據(jù) 表 字 段 內(nèi) 容 呈 現(xiàn) 空 值(NULL)。 譬 如 如 下 語 句:
SELECT * FROM table1 RIGHT OUTER JOIN table2 ;
ON table1.fld1=table2.fld3
---- 將 得 到 如 下 一 個 記 錄 集:
---- 右 連 接 時 產(chǎn) 生 的 結(jié) 果 記 錄 集
字 段 名
記 錄 號
fld1
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
b31
b32
---- 使 用 左 連 接 或 右 連 接 方 式, 可 以 方 便 地 查 找 到 兩 個 關(guān) 聯(lián) 表 中, 其 中 一 個 表 有 記 錄 而 另 一 個 表 中 無 相 關(guān) 記 錄 的 情 況。 一 般 用 于 父 表 和 子 表 中 記 錄 相 關(guān) 的 合 法 性 檢 索。 譬 如, 下 面 語 句:
SELECT * FROM table1 RIGHT OUTER JOIN table2 ;
ON table1.fld1=table2.fld3 ;
WHERE EMPTY(fld1)
---- 可 以 方 便 地 將 表2 有 記 錄 而 表1 中 不 存 在 相 應(yīng) 的 關(guān) 聯(lián) 記 錄 的 情 況 檢 索 出 來, 結(jié) 果 只 有 一 條 記 錄, 就 是 上 表 中 的 第3 條 記 錄。 在 以 前 版 本 的SELECT - SQL 語 句 中, 要 完 成 這 種 查 詢 任 務(wù), 相 對 就 要 復(fù) 雜 得 多 了, 一 般 而 言 它 必 須 借 助 于 子 查 詢 的 方 式 才 能 達(dá) 到 目 的。
---- 使 用 滿 連 接(FULL OUTER JOIN), 它 實 質(zhì) 上 是 左 連 接 和 右 連 接 方 式 的 組 合。 查 詢 結(jié) 果 記 錄 集 中 集 合 了 連 接 兩 邊 的 表 記 錄, 包 括 符 合 條 件 和 不 符 合 條 件 的 記 錄。 但 是, 與 無 連 接 方 式 不 同, 它 并 不 是 交 叉 連 接。 滿 連 接 的 結(jié) 果 集 分 三 部 分: 一 部 分 記 錄 是 兩 邊 都 滿 足 連 接 條 件 的 記 錄, 其 中 涉 及 的 左 邊 表 內(nèi) 容 和 右 邊 表 記 錄 內(nèi) 容 都 輸 出; 第 二 部 分 是 不 滿 足 連 接 條 件 的 左 邊 表 記 錄, 此 時 其 涉 及 的 右 邊 表 記 錄 內(nèi) 容 置 空; 第 三 部 分 是 不 滿 足 連 接 條 件 的 右 邊 表 記 錄, 此 時 其 涉 及 的 左 邊 表 記 錄 內(nèi) 容 置 空。 例 如, 如 下 滿 連 接 語 句:
SELECT * FROM table1 FULL OUTER JOIN table2 ;
ON table1.fld1=table2.fld3
---- 將 得 到 如 下 一 個 記 錄 集:
---- 滿 連 接 時 產(chǎn) 生 的 結(jié) 果 記 錄 集
字 段 名
記 錄 號
fld1
fld2
fld3
fld4
1
a11
a12
a11
b12
2
a21
a22
a21
b22
3
a31
a32
4
b31
b32
---- 使 用 滿 連 接 方 式, 可 以 方 便 地 查 找 到 兩 個 關(guān) 聯(lián) 表( 父 子 表) 中, 一 次 性 查 找 到 有 父 無 子 和 有 子 無 父 的 記 錄 情 況。
---- 從 上 面 可 以 總 結(jié) 出, 對 不 同 的 連 接 方 式, 結(jié) 果 集 中 的 記 錄 數(shù) 不 同: 對 無 連 接 方 式, 其 結(jié) 果 是 兩 邊 表 記 錄 的 迪 卡 爾 積; 對 內(nèi) 連 接 方 式, 其 結(jié) 果 是 兩 邊 表 記 錄 的 交 集; 對 左 連 接 方 式, 其 結(jié) 果 是 左 邊 表 記 錄 數(shù); 對 右 連 接 方 式, 其 結(jié) 果 是 右 邊 表 記 錄 數(shù); 對 滿 連 接 方 式, 其 結(jié) 果 是 兩 邊 表 記 錄 的 并 集。
---- 8、 視 圖 中 的 動 態(tài) 條 件 設(shè) 置
---- FoxPro 產(chǎn) 品 已 經(jīng) 在 我 們 國 家 流 行 了 這 么 多 年, 但 似 乎 可 以 肯 定 的 一 點 是, 絕 大 部 分 FoxPro 用 戶, 包 括 應(yīng) 用 開 發(fā) 者, 對 有 關(guān)“ 視 圖” 的 概 念 和 使 用 都 不 太 清 楚。
---- Visual FoxPro 提 供 的 視 圖, 實 質(zhì) 是 一 個 虛 擬 的 數(shù) 據(jù) 表, 并 不 對 應(yīng) 于 一 個 具 體 的 磁 盤 文 件。 視 圖, 通 過 一 定 的 連 接 關(guān) 系 和 記 錄 篩 選 條 件, 將 來 自 于Visual FoxPro 數(shù) 據(jù) 表 或 后 端 數(shù) 據(jù) 庫 的 數(shù) 據(jù) 集 合 到 一 起, 通 過 這 個 數(shù) 據(jù) 集, 可 以 方 便 地 進(jìn) 行 查 詢、 更 新 或 多 數(shù) 據(jù) 表 間 的 數(shù) 據(jù) 連 接 等 操 作, 它 同 時 能 將 基 于 視 圖 更 新 的 數(shù) 據(jù) 對 應(yīng) 到 相 應(yīng) 的 數(shù) 據(jù) 表 中 的 相 應(yīng) 記 錄 中。 視 圖 技 術(shù), 可 以 大 大 簡 化 數(shù) 據(jù) 表 應(yīng) 用 的 設(shè) 計 工 作。
---- 視 圖 存 在 于 數(shù) 據(jù) 庫 中, 可 以 通 過 視 圖 設(shè) 計 器 可 視 創(chuàng) 建, 或 者 通 過 CREATE VIEW 命 令 程 序 創(chuàng) 建。 視 圖 中 的 記 錄 數(shù) 據(jù) 集 并 不 實 際 存 在, 而 是 在 每 次 打 開 該 視 圖 時, 自 動 臨 時 從 相 關(guān) 數(shù) 據(jù) 表 中 下 載 記 錄 到 視 圖 中。
---- 一 般 地, 在 一 個 應(yīng) 用 模 塊 中, 我 們 是 基 于 一 組 特 定 數(shù) 據(jù) 而 不 是 全 部 數(shù) 據(jù) 進(jìn) 行 處 理。 因 此, 為 提 高 處 理 效 率, 一 般 視 圖 都 設(shè) 置 一 定 的 篩 選 條 件, 以 保 證 只 將 滿 足 條 件 的 記 錄 下 載 到 視 圖 中, 而 不 是 下 載 全 部 記 錄。
---- 現(xiàn) 在 的 問 題 是, 如 果 在 一 個 應(yīng) 用 表 單 中, 我 們 需 要 重 復(fù) 多 次 用 不 同 的 篩 選 條 件 重 新 形 成 視 圖 以 得 到 不 同 的 記 錄 集, 如 何 來 設(shè) 置 這 個 動 態(tài) 的 篩 選 條 件 呢 ?
---- 譬 如, 針 對 上 一 節(jié) 的 兩 個 數(shù) 據(jù) 表:table1、table2, 我 們 通 過 視 圖 設(shè) 計 器, 采 用 內(nèi) 連 接 方 式, 連 接 條 件 是:table1.fld1=table2.fld3。 第 一 次 用 fld1="a11" 的 篩 選 條 件 形 成 關(guān) 于 fld1 字 段 值 是“a11" 的 視 圖; 完 成 一 定 的 處 理 后, 又 需 要 第 二 次 用 fld1="a21" 的 篩 選 條 件 形 成 關(guān) 于 fld1 字 段 值 是“a21" 的 視 圖; 完 成 一 定 的 處 理 后, 第 三 次 又 用 fld1 等 于 其 它 字 段 值 的 篩 選 條 件 形 成 新 的 視 圖, 等 等。 條 件 是 根 據(jù) 應(yīng) 用 執(zhí) 行 時 用 戶 輸 入 動 態(tài) 變 化 的, 在 視 圖 中 如 何 來 設(shè) 置 這 種 動 態(tài) 條 件 呢 ?
---- 其 處 理 實 質(zhì) 很 簡 單: 使 用 參 數(shù) 的 方 式 設(shè) 置 篩 選 條 件, 向 視 圖 傳 遞 參 數(shù), 可 以 通 過 在 一 個 變 量 名 前 置 一 個 問 號( ?) 即 可, 注 意 問 號 與 變 量 名 中 間 不 能 存 在 空 格 或 其 它 空 白 符 ! 選 擇 視 圖 設(shè) 計 器 的 篩 選(Filter) 頁, 在 字 段 名(FieldName) 框 選 中 fld1 字 段, 在 實 例(Sample) 框 輸 入:?fld1value。
---- 對 上 面 設(shè) 計 的 動 態(tài) 視 圖, 每 次 打 開 數(shù) 據(jù) 庫 時, 在 形 成 該 視 圖 數(shù) 據(jù) 集 之 前 將 出 現(xiàn) 一 個 視 圖 參 數(shù) 對 話 框, 如 圖8 -1 所 示, 請 求 輸 入 一 個 字 段 值。
---- 然 后 在 程 序 中, 可 以 每 次 重 新 給 fld1value 變 量 賦 值, 再 緊 跟 著 執(zhí) 行 一 條:=REQUERY() 語 句, 即 可 完 成 另 一 個 條 件 的 視 圖 的 形 成。
---- 但 是, 這 種 一 打 開 數(shù) 據(jù) 庫 就 出 現(xiàn) 一 個 對 話 框 請 求 輸 入 變 量 值 的 方 式 很 不 友 好。 改 進(jìn) 的 方 法 是, 設(shè) 計 視 圖, 使 在 打 開 數(shù) 據(jù) 庫 時 首 先 不 下 載 記 錄, 這 樣 就 不 會 立 即 出 現(xiàn) 極 不 友 好 的 視 圖 參 數(shù) 對 話 框 了; 然 后 在 表 單 或 程 序 中, 通 過 程 序 獲 得 fld1value 變 量 的 一 次 輸 入 值, 再 執(zhí) 行 =REQUERY() 語 句 即 可 獲 得 需 要 的 視 圖 數(shù) 據(jù) 集。
---- 使 視 圖 在 打 開 數(shù) 據(jù) 庫 時 不 立 即 下 載 記 錄, 具 體 可 如 下 實 現(xiàn):
---- * 如 果 是 將 視 圖 放 置 到 一 個 表 單 的 數(shù) 據(jù) 環(huán) 境 中, 該 視 圖 將 在 數(shù) 據(jù) 環(huán) 境 中 形 成 一 個 游 標(biāo) 對 象( 如:Cursor1), 設(shè) 置 該 游 標(biāo) 對 象 cursor1 的 NodataOnload 屬 性 為 真 即 可。
---- * 如 果 是 在 程 序 中 打 開 數(shù) 據(jù) 庫 和 視 圖, 其 打 開 視 圖 的 語 句 應(yīng) 帶 NODATA 子 句, 如:
OPEN DATABASE < 數(shù) 據(jù) 庫 名 >
USE < 視 圖 名 > NODATA
---- 這 樣 視 圖 打 開 后, 并 不 會 立 即 下 載 記 錄 數(shù) 據(jù), 只 有 到 執(zhí) 行 =REQUERY() 語 句 時, 才 下 載 記 錄。 從 而 可 以 達(dá) 到 我 們 定 制 動 態(tài) 視 圖 的 目 的。
---- 如 果 是 在 表 單 的 數(shù) 據(jù) 環(huán) 境 中 使 用 視 圖, 則 動 態(tài) 視 圖 的 參 數(shù) 可 以 使 用 表 單 屬 性。 比 如, 可 以 給 該 表 單 新 添 一 個 queryvalue 的 屬 性, 則 在 視 圖 設(shè) 計 器 的 篩 選 頁 中 可 以 用 如 下 表 達(dá) 式 引 用 視 圖 參 數(shù):?thisform.queryvalue。
---- 9、 怎 樣 設(shè) 計 一 個 可 更 新 數(shù) 據(jù) 源 表 的 本 地 視 圖
---- 可 能 你 設(shè) 計 的 本 地 視 圖, 希 望 在 表 單 應(yīng) 用 中 能 更 新 相 應(yīng) 數(shù) 據(jù) 來 源 的 記 錄, 即 當(dāng) 你 對 視 圖 添 加、 修 改 或 刪 除 了 記 錄 時, 希 望 將 這 些 信 息 反 映 到 相 應(yīng) 的 數(shù) 據(jù) 表 中 去, 這 種 可 以 更 新 數(shù) 據(jù) 源 的 本 地 視 圖 的 設(shè) 計 相 對 而 言 需 要 考 慮 的 因 素 比 較 多。 必 須 仔 細(xì) 設(shè) 計 視 圖 設(shè) 計 器 中 更 新 條 件 頁 中 的 各 項 內(nèi) 容。 具 體 說 來 需 要 考 慮 如 下 方 面:
---- 1、 設(shè) 置 關(guān) 鍵 字 段。 要 設(shè) 計 一 個 可 更 新 數(shù) 據(jù) 源 的 本 地 視 圖, 必 須 給 本 地 視 圖 指 定 一 個 關(guān) 鍵 字 段, 在 更 新 數(shù) 據(jù) 源 時, 該 關(guān) 鍵 字 段 將 作 為 比 較 本 地 視 圖 記 錄 與 數(shù) 據(jù) 源 中 記 錄 的 依 據(jù), 由 此 判 別 記 錄 是 否 發(fā) 生 了 變 化。 可 以 指 定 多 個 字 段 組 合 為 關(guān) 鍵 字 段, 以 保 證 關(guān) 鍵 字 段 能 唯 一 確 定 記 錄。 如 果 本 地 視 圖 對 應(yīng) 有 多 個 要 更 新 的 數(shù) 據(jù) 源 表, 則 必 須 針 對 每 一 個 數(shù) 據(jù) 源 設(shè) 置 至 少 一 個 關(guān) 鍵 字 段。
---- 一 般 地, 應(yīng) 指 定 對 應(yīng) 于 數(shù) 據(jù) 源 中 主 關(guān) 鍵 字 或 候 選 關(guān) 鍵 字 的 字 段 為 視 圖 的 關(guān) 鍵 字 段。
---- 在 更 新 條 件 頁 的 字 段 名 列 表 中 列 出 了 視 圖 中 的 所 有 字 段 名, 點 按 列 表 中 要 指 定 為 關(guān) 鍵 字 段 的 字 段 左 邊、 鑰 匙 符 號 列 的 位 置, 該 位 置 出 現(xiàn) 一 個 按 鈕, 點 按 該 按 鈕 使 之 出 現(xiàn) 一 個 對 勾, 表 示 已 指 定 該 字 段 為 關(guān) 鍵 字 段。
---- 可 以 點 按 左 邊 的 重 置 關(guān) 鍵 字 按 鈕, 重 新 設(shè) 置 關(guān) 鍵 字 段。
---- 2、 指 定 可 更 新 字 段。 只 有 被 指 定 為 可 更 新 字 段 后, 該 字 段 才 可 更 新 數(shù) 據(jù) 源 中 對 應(yīng) 的 字 段。 點 按 字 段 名 列 表 中 要 指 定 為 可 更 新 字 段 的 字 段 左 邊、 鉛 筆 符 號 列 的 位 置, 該 位 置 也 將 出 現(xiàn) 一 個 按 鈕, 點 按 該 按 鈕 使 之 出 現(xiàn) 一 個 對 勾, 表 示 已 指 定 該 字 段 為 可 更 新 字 段。
---- 沒 有 指 定 為 可 更 新 字 段 的 字 段, 是 只 讀 字 段, 盡 管 你 改 變 了 視 圖 中 只 讀 字 段 的 值, 它 們 也 不 能 對 數(shù) 據(jù) 源 進(jìn) 行 更 新。
---- 可 以 點 按 左 邊 的 全 部 更 新 按 鈕, 將 所 有 非 關(guān) 鍵 字 段 設(shè) 置 為 可 更 新 字 段。
---- 3、 選 中 更 新 條 件 頁 中 的“ 發(fā) 送 SQL 更 新” 復(fù) 選 框 項。 選 中 它 后, 才 可 將 被 更 新 的 記 錄 字 段 采 用 Update SQL 語 法 對 數(shù) 據(jù) 源 中 的 表 進(jìn) 行 更 新。
---- 4、 選 擇 檢 測 更 新 沖 突 的 方 式。 在 更 新 條 件 頁 具 有 一 個“SQL WHERE 子 句 包 括” 框, 其 中 的 選 項 用 以 控 制 將 哪 些 字 段 添 加 到 WHERE 子 句 中, 在 將 視 圖 修 改 傳 送 到 數(shù) 據(jù) 源 表 時, 就 可 以 檢 測 服 務(wù) 器 上 的 更 新 沖 突。 沖 突 是 由 視 圖 中 的 舊 值( 而 不 是 指 修 改 后 的 值) 和 數(shù) 據(jù) 源 的 當(dāng) 前 值 之 間 的 比 較 結(jié) 果 決 定 的(OLDVAL( ) 和 CURVAL( ) 之 間 比 較)。 如 果 兩 個 值 相 等, 則 認(rèn) 為 原 始 值 未 做 修 改, 不 存 在 沖 突; 如 果 它 們 不 相 等, 則 存 在 沖 突, 數(shù) 據(jù) 源 返 回 一 條 錯 誤 信 息。
---- 舊 值 和 當(dāng) 前 值 之 間 的 沖 突 所 返 回 的 錯 誤 為“ 錯 誤 1585: 記 錄 已 被 其 他 人 修 改”, 或 者 是“ 錯 誤 1494: 更 新 沖 突。 請 使 用 TABLEUPDATE() 進(jìn) 行 強(qiáng) 制 更 新 或 使 用 TABLEREVERT() 回 滾”。
---- "SQL WHERE 子 句 包 括” 中 包 括 如 下 選 項:
---- 關(guān) 鍵 字 段: 如 果 在 數(shù) 據(jù) 源 表 中 有 一 個 關(guān) 鍵 字 字 段 被 改 變, 設(shè) 置 WHERE 子 句 來 檢 測 沖 突。 而 對 于 由 另 一 用 戶 對 數(shù) 據(jù) 源 表 中 原 始 記 錄 的 其 他 字 段 所 做 修 改, 則 不 進(jìn) 行 比 較。 它 是 最 保 守 的 更 新 方 式, 完 全 不 考 慮 在 本 地 視 圖 中 輸 出 的 字 段 中 哪 些 有 可 更 新 性, 而 將 本 地 視 圖 中 的 所 有 記 錄 用 關(guān) 鍵 字 段 進(jìn) 行 比 較。
---- 關(guān) 鍵 字 和 可 更 新 字 段: 如 果 另 一 用 戶 修 改 了 任 何 可 更 新 的 字 段, 設(shè) 置 WHERE 子 句 來 檢 測 沖 突。
---- 關(guān) 鍵 字 和 已 修 改 字 段: 如 果 從 視 圖 首 次 檢 索( 默 認(rèn)) 以 后, 關(guān) 鍵 字 字 段 或 數(shù) 據(jù) 源 表 記 錄 的 已 修 改 字 段 中, 某 個 字 段 做 過 修 改, 設(shè) 置 WHERE 子 句 來 檢 測 沖 突。
---- 關(guān) 鍵 字 段 和 時 間 戳: 它 用 于 遠(yuǎn) 程 視 圖, 對 本 地 視 圖 無 用。
---- 5、 選 擇 更 新 數(shù) 據(jù) 源 的 方 式。 在 更 新 條 件 頁 具 有 一 個“ 使 用 更 新” 框, 它 提 供 了 兩 種 更 新 數(shù) 據(jù) 源 的 方 式 供 選 擇, 以 指 定 字 段 如 何 在 后 端 服 務(wù) 器 上 更 新:
---- SQL DELETE 然 后 INSERT 方 式: 先 刪 除 數(shù) 據(jù) 源 表 中 原 來 的 記 錄, 然 后 再 插 入 一 條 新 的 在 視 圖 中 被 修 改 了 的 記 錄, 更 新 = 刪 除 + 插 入。
---- SQL UPDATE: 用 視 圖 字 段 中 的 變 化 來 置 換 修 改 數(shù) 據(jù) 源 表 的 字 段 值。
---- 只 有 在 仔 細(xì) 設(shè) 置 好 上 述 各 項 內(nèi) 容 之 后, 該 本 地 視 圖 才 能 用 來 更 新 數(shù) 據(jù) 源 表 數(shù) 據(jù)。
--------------------------------------------------------------------------------
中國計算機(jī)世界出版服務(wù)公司版權(quán)所有
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -