?? 在delphi中利用tbatch組件完成數(shù)據(jù)批處理.txt
字號(hào):
在Delphi中利用Tbatch組件完成數(shù)據(jù)批處理 (2001年4月8日)
網(wǎng)友更新 分類(lèi):數(shù)據(jù)庫(kù) 作者: winfit(推薦) 推薦:winfit 閱讀次數(shù):236
(http://www.codesky.net)
--------------------------------------------------------------------------------
在 數(shù) 據(jù) 庫(kù) 應(yīng) 用 系 統(tǒng) 中, 常 常 要 對(duì) 數(shù) 據(jù) 進(jìn) 行 成 批 的 如 追 加、 刪 除、 更 改 等 操 作, 這 種 批 量 操 作 在 專(zhuān) 門(mén) 的 數(shù) 據(jù) 庫(kù) 開(kāi) 發(fā) 工 具 如VFP 中 用APPEND 、COPY 命 令 帶 上 相 應(yīng) 的 命 令 子 句 就 能 輕 易 完 成。 但 在 其 它 開(kāi) 發(fā) 工 具 中 并 沒(méi) 有 類(lèi) 似 的 命 令, 而 是 提 供 能 完 成 類(lèi) 似 功 能 的 控 件 或 對(duì) 象, 如 在PowerBuilder 中 就 是 利 用Pipe Line( 數(shù) 據(jù) 管 道) 來(lái) 完 成 兩 個(gè) 或 同 構(gòu) 或 不 同 構(gòu) 的 表 之 間 的 數(shù) 據(jù) 批 處 理。 本 文 要 介 紹 的 是Delphi 中 用 來(lái) 完 成 數(shù) 據(jù) 批 處 理 任 務(wù) 的 組 件TBatchMove。TBatchMove 組 件 能 夠:
(1)將 一 個(gè) 數(shù) 據(jù) 集 中 的 數(shù) 據(jù) 追 加 到 一 個(gè) 表 中。.
(2)從 一 個(gè) 表 中 刪 除 滿 足 條 件 的 記 錄。
(3)按 舊 表 結(jié) 構(gòu) 生 成 一 個(gè) 新 表, 若 欲 生 成 的 新 表 已 存 在, 則 覆 蓋。
具 體 的 操 作 要 通 過(guò) 設(shè) 置TBatchMove 的Mode 屬 性 后 再 調(diào) 用Execute 方 法 來(lái) 完 成。 為 舉 例 說(shuō) 明 問(wèn) 題, 我 們 在 別 名 數(shù) 據(jù) 庫(kù)DBDEMOS 中 先 創(chuàng) 建 兩 個(gè)dBase 格 式 的 表Test1.dbf 和Test2.dbf。 二 者 的 結(jié) 構(gòu) 如 下 表:
Test1.dbf Test2.dbf
Name C 10 Name C 10
Code C 3 Code C 3
其 中 表Test2.dbf 在 字 段code 上 建 立 有 唯 一 索 引。 同 時(shí) 假 設(shè) 表 單 中 已 有 兩 個(gè)TABLE 控 件Tsource 和Tdest 和 一 個(gè)TbatchMove 組 件batchmove1。Tsource 和Tdest 的DatabaseName 屬 性 均 設(shè) 為DBDEMOS。batchmove1 的source 屬 性 設(shè) 為T(mén)source,destination 屬 性 設(shè) 為T(mén)dest。
在 使 用TbatchMove 組 件 時(shí), 必 須 牢 記: 所 有 的 操 作 都 是 以 源 表 為 標(biāo) 準(zhǔn) 針 對(duì) 目 的 表 進(jìn) 行 的, 下 面 就 分 別 舉 例 說(shuō) 明TbatchMove 的 各 種 操 作 模 式:
(1)batAppend 追 加 模 式 將 源 表 中 的 數(shù) 據(jù) 追 加 到 目 的 表 中, 目 的 表 必 須 事 先 存 在。 這 是 缺 省 模 式。
batchmove1.source=Tsource;
batchmove1.destination=Tdest2 ;
batchmove1.Mode:=batAppend;
batchmove1.Execute;
(2)batUpdate 更 新 模 式 用 源 表 中 匹 配 目 的 表 的 記 錄 替 換 目 的 表 中 的 相 應(yīng) 記 錄。 目 的 表 必 須 事 先 存 在 且 有 一 已 定 義 的 索 引 用 來(lái) 匹 配 源 表 中 的 記 錄。
Tdest.IndexFieldNames:='code';
batchmove1.source=Tsource;
batchmove1.destination=Tdest ;
batchmove1.Mode:=batUpdate;
batchmove1.Execute;
(3)batAppendUpdate 追 加 更 新 模 式 如 果 源 表 中 有 與 目 的 表 匹 配 的 記 錄, 則 替 換 目 的 表 記 錄, 否 則, 直 接 追 加 到 目 的 表 中。 目 的 表 必 須 事 先 存 在 且 有 一 已 定 義 的 索 引 用 來(lái) 匹 配 源 表 中 的 記 錄。
Tdest.IndexFieldNames:='code';
batchmove1.source=Tsource;
batchmove1.destination=Tdest ;
batchmove1.Mode:=batAppendUpdate;
batchmove1.Execute;
(4)batCopy 拷 貝 模 式 按 源 表 結(jié) 構(gòu) 生 成 新 表, 源 表 中 的 數(shù) 據(jù) 同 時(shí) 拷 貝 到 目 的 新 表 中。 如 果 要 生 成 的 新 表 已 存 在, 則 覆 蓋。
// 按Test1.dbf 生 成 新 表xxx.dbf
// 如 果 不 指 定 擴(kuò) 展 名dbf, 生 成 的 新 表 將 是Paradox 格 式 的xxx.db。
Tdest.TableName:='xxx.dbf';
batchmove1.source=Tsource;
batchmove1.destination=Tdest ;
batchmove1.Mode:=batCopy;
batchmove1.Execute;
(5)batDelete 刪 除 模 式 刪 除 目 的 表 中 與 源 表 匹 配 的 記 錄。 目 的 表 必 須 事 先 存 在 且 有 一 已 定 義 的 索 引 用 來(lái) 匹 配 源 表 中 的 記 錄。
Tdest.IndexFieldNames:='code';
batchmove1.source=Tsource;
batchmove1.destination=Tdest ;
batchmove1.Mode:=batDelete;
batchmove1.Execute;
TBatchMove 還 有 一 個(gè) 重 要 屬 性ChangedTableName, 在 實(shí) 際 運(yùn) 用 中, 通 過(guò) 指 定ChangedTableName 屬 性 可 以 創(chuàng) 建 一 個(gè)Paradox 表, 該 表 用 來(lái) 保 存 目 的 表 中 被 更 改 數(shù) 據(jù) 的 原 始 備 份, 有 了 這 個(gè) 備 份 表 就 可 以 確 保 恢 復(fù) 目 的 表 中 的 數(shù) 據(jù)。
順 便 提 一 句, 如 果 要 刪 除 某 一 個(gè) 表 中 的 全 部 記 錄, 可 以 采 用Table 組 件 的EmptyTable 方 法, 例 如Tdest.EmptyTable 將 清 空Tdest 所 指 定 的 表test2.dbf。
本 文 中 是 以 同 構(gòu) 的dbf 表 進(jìn) 行 的 示 例, 在 實(shí) 際 運(yùn) 用 中, 源 表 和 目 的 表 可 能 同 購(gòu), 也 可 能 異 構(gòu), 異 構(gòu) 時(shí),Delphi 的BDE 會(huì) 自 動(dòng) 進(jìn) 行 類(lèi) 型 和 長(zhǎng) 度 上 的 轉(zhuǎn) 換, 具 體 類(lèi) 型 間 的 關(guān) 系 可 以 有 關(guān)BDE 的 幫 助。 本 文 中 各 種 操 作 模 式 的 實(shí) 際 結(jié) 果 均 可 以 從Delphi 的Database Desktop 中 查 看 到
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -