全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1428
推到 Plurk!
推到 Facebook!

用ADO管理SQL Server資料庫及其設備

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-25 12:23:01 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 用ADO管理SQL Server資料庫及其設備 作者: 松本電工實業有限公司電腦部 舒嵩嵩 來源: http://program.szata.com/ 微 軟 公 司 的sql server 是 目 前 小 型 網 絡 中 常 用 的 數 據 庫 管 理 系 統 之 一。 面 向 這 種 網 絡 數 據 庫 的 應 用 程 序 也 在 日 益 增 多, 這 種 網 絡 數 據 庫 應 用 系 統 的 正 常 運 行, 一 般 都 依 賴 於 已 經 存 在 的 用 戶 數 據 庫。 創 建 數 據 庫 的 工 作 當 然 可 以 用sql server 提 供 的sql enterprise manager 工 具 來 完 成, 但 是, 如 果 能 夠 提 供 一 種 定 制 的 數 據 庫 管 理 工 具, 專 門 管 理 應 用 系 統 需 要 的 數 據 庫 及 其 設 備, 對 用 戶 來 說 無 疑 更 加 理 想。 現 存 問 題 ---- 我 們 知 道, 在 使 用create database 語 句 創 建 一 個 數 據 庫 之 前, 必 須 存 在 一 個 有 剩 餘 空 間 的 數 據 庫 設 備, 或 者 事 先 使 用disk init 語 句 創 建 一 個 新 設 備。 但 是 這 些 語 句 含 有 很 多 必 需 的 參 數, 而 且 如 果 不 使 用sql server 的 管 理 工 具, 很 多 參 數 值 往 往 難 以 確 定。 ---- 以 創 建 數 據 庫 設 備 的disk init 語 句 ? 例, 這 個 語 句 的 完 整 語 法 如 下: disk init name = ‘logical_name', physname = ‘physical_name', vdevno = virtual_device_number, size = number_of_2k_blocks [, vstart = virtual_address] ---- 其 中name 和size 這 兩 個 參 數 都 很 容 易 得 到, 麻 煩 的 是 物 理 名physname 和 虛 擬 設 備 號vdevno 這 兩 個 參 數。 前 者 要 求 是 一 個 服 務 器 上 的 物 理 文 件 全 路 徑 名; 後 者 要 求 在1 ~255 之 間 找 一 個 沒 有 被 別 的 設 備 占 用 的 號 碼。 而 在 編 寫 數 據 庫 管 理 程 序 時, 用 戶 的 服 務 器 上 有 哪 些 設 備 號 已 經 被 占 用,sql server 裝 在 哪 個 驅 動 器 上, 都 是 無 法 預 料 的。 ---- 雖 然, 使 用sql server 的 管 理 工 具sql enterprise manager, 可 以 非 常 方 便 地 創 建、 刪 除 數 據 庫 設 備, 或 者 擴 大 一 個 已 經 存 在 的 數 據 庫, 也 可 以 非 常 方 便 地 創 建、 刪 除 或 者 修 改 一 個 數 據 庫, 但 是, 這 個 工 具 仍 然 要 求 我 們 輸 入 很 多 不 太 常 用 的 參 數, 界 面 稍 顯 複 雜。 ---- 所 以, 理 想 的 情 況 是: 用 戶 只 需 要 按 下 一 個 命 令 按 鈕, 應 用 程 序 需 要 的 數 據 庫 及 其 設 備 都 能 立 即 自 動 地 創 建 好。 解 決 方 案 ---- ? 了 實 現 這 樣 的 目 標, 我 們 必 須 想 辦 法 解 決sql 語 句 中 的 參 數 設 置 問 題。 ---- 1 . 創 建 設 備 的 語 句 參 數 ---- 創 建 設 備 的 語 句 即 前 面 提 到 的disk init 語 句。 ---- ? 了 簡 化 問 題, 我 們 可 以 指 定 與 數 據 庫 名 相 同 的 設 備 文 件 名, 並 將 設 備 文 件 保 存 在master 設 備 所 在 的 子 目 錄 中。 數 據 庫 名 是 在 設 計 應 用 程 序 時 已 經 確 定; 而master 設 備 所 在 的 子 目 錄, 可 以 從 系 統 表sysdevices 中 查 詢 得 到。 這 樣, 設 備 文 件 的 物 理 名 參 數 就 確 定 下 來 了。 ---- 虛 擬 設 備 號 的 問 題 則 比 較 複 雜, 因 ?sysdevices 系 統 表 中 沒 有“ 虛 擬 設 備 號” 這 樣 一 個 字 段, 因 此, 必 須 另 想 辦 法。 ---- 對sql server 的 系 統 存 儲 過 程sp_helpdevice 進 行 分 析 之 後, 我 們 發 現, 虛 擬 設 備 號 是“ 隱 藏” 在sysdevices 系 統 表 的low 字 段 中 的, 借 助 另 一 個 系 統 表spt_values, 可 以 找 到 每 個 設 備 的 虛 擬 設 備 號。 這 樣, 我 們 只 需 要 在 一 個 循 環 中 找 一 下 某 個 設 備 號 是 否 存 在 於sysdevices 中, 就 可 以 確 定 我 們 現 在 可 用 的 虛 擬 設 備 號。 ---- 至 於 數 據 庫 設 備 的 大 小, 我 們 不 妨 設 得 大 一 些, 或 者 讓 用 戶 指 定 一 下 也 可 以。 ---- 2 . 創 建 數 據 庫 的 語 句 參 數 ---- 創 建 數 據 庫 的 語 句 如 下: create database database_name [on {default | database_device} [= size] [, database_device [= size]]...] [log on database_device [= size] [, database_device [= size]]...] [for load] ---- 其 中, 大 部 分 參 數 都 是 可 選 的, 我 們 只 需 要 指 定 一 個 設 備 名 及 數 據 庫 的 大 小 即 可, 而 數 據 庫 名、 設 備 名、 大 小 在 創 建 設 備 的 時 候 已 經 確 定 好 了, 所 以, 這 個 語 句 的 參 數 不 存 在 問 題。 具 體 實 現 ---- 使 用 普 通 的 應 用 開 發 工 具visual basic, 我 們 就 可 以 實 現 一 個 定 制 的 數 據 庫 管 理 程 序。 ---- ? 了 實 現 與 數 據 庫 服 務 器 的 連 接, 我 們 必 須 選 擇 一 種 數 據 庫 訪 問 接 口。 雖 然 從vb 訪 問sql server 有 很 多 接 口 可 供 選 擇, 但 微 軟 最 新 的 數 據 庫 訪 問 接 口ado(active data objects) 無 疑 是 最 有 前 途 的, 因 ? 它 ? 基 於 瀏 覽 器 的 數 據 庫 應 用 系 統 的 實 現 提 供 了 可 能 性。 ---- 以 下 是 一 些 用 於 數 據 庫 及 其 設 備 管 理 的 常 用 函 數。 ---- 1 . 取 當 前 的 工 作 數 據 庫 ---- 由 于 管 理 任 務 一 般 都 必 須 在master 庫 中 完 成, 因 此, 在 執 行 管 理 任 務 之 前, 最 好 保 存 當 前 工 作 庫, 以 便 完 成 任 務 之 後 再 切 換 回 去。 public function sqlgetcurrentdatabasename(cn as adodb.connection) as string dim ssql as string dim rs as new adodb.recordset on error goto errsqlgetcurrentdatabasename ssql = “select currentdb = db_name()" rs.open ssql, cn sqlgetcurrentdatabasename = trim $(rs!currentdb) rs.close exit function errsqlgetcurrentdatabasename: sqlgetcurrentdatabasename = “" end function ---- 2 . 判 斷 一 個 數 據 庫 設 備 是 否 存 在 ---- public function sqlexistdevicename(cn as adodb.connection, sdevname as string) as boolean ---- '--按 照 名 稱 判 斷 一 個 設 備 是 否 存 在, 如 果 存 在, 返 回1, 否 則 返 回0 dim ssql as string dim rs as new adodb.recordset dim btmp as boolean on error goto errsqlexistdevicename ssql = “select cntdev=count( *) from master.dbo.sysdevices where name = ‘“ & sdevname & ”'" rs.open ssql, cn if rs!cntdev = 0 then btmp = false else btmp = true rs.close sqlexistdevicename = btmp exit function errsqlexistdevicename: sqlexistdevicename = false end function ---- 3 . 判 斷 一 個 虛 擬 設 備 號 是 否 被 占 用:sqlexistdevicenumber。 ---- 編 者 注: 函 數 源 代 碼 發 表 在 本 報 的www 站 點 上, 地 址 是:http://www.computerworld.com.cn/98/skill/default.htm。 下 同。 歡 迎 訪 問! ---- 4 . 找 一 個 最 小 的 尚 未 被 占 用 的 虛 擬 設 備 號:sqlgetunuseddevicenumber。 ---- 5 . 取 得sql server 安 裝 目 錄 下 的data 子 目 錄 路 徑:sqlgetdatapath。 ---- 6 . 創 建 一 個 新 設 備:sqlcreatedevice。 ---- 7 . 創 建 一 個 新 的 數 據 庫:sqlcreatedatabase65。 ---- 8 . 取 數 據 庫 設 備 的 詳 細 信 息:sqlgetdeviceinfo。 ---- 9 . 擴 大 數 據 庫 設 備 的 尺 寸:sqlexpanddevice。 ---- 數 據 庫 應 用 系 統 在 運 行 一 段 之 後, 數 據 量 的 增 大 往 往 要 求 數 據 庫 增 大, 進 而 要 求 擴 大 設 備 尺 寸。 可 惜disk resize 語 句 要 求 的 尺 寸 參 數 ? 擴 大 後 的 新 尺 寸, 而 非 需 要 增 加 的 尺 寸。 所 以, 必 須 事 先 查 到 設 備 的 原 有 尺 寸, 才 能 使 用disk resize 語 句。 ---- 10 . 判 斷 一 個 數 據 庫 是 否 存 在:sqlexistdatabase。 ---- 11 . 刪 除 一 個 數 據 庫:sqldropdatabase。 ---- 12 . 刪 除 一 個 數 據 庫 設 備:sqldropdevice。 ---- 13 . 取sql server 的 版 本 信 息:sqlgetversionstring。 ---- 在 即 將 發 行 的sql server 7.0 中, 不 再 有 數 據 庫 設 備 的 概 念, 創 建 數 據 庫 也 將 變 得 更 加 簡 單。 在 創 建 特 定 的 用 戶 數 據 庫 時, ? 了 區 分 不 同 的 版 本 進 行 不 同 的 操 作, 取 得sql server 的 版 本 是 非 常 重 要 的。 ---- “ 用visual studio 開 發 分 布 式web 應 用” 系 列 文 章( 之 九), 讀 者 有 何 意 見 或 建 議, 請 發e Qmail 至:ms_visualstudio@hotmail.com。
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-11-22 15:43:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!