明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

開發(fā)基于ORACLE7數(shù)據(jù)庫的管理信息系統(tǒng)

[摘要]作者:袁海蘭 [勝利石油管理局第六中學(xué)]1 前 言 開 發(fā) 高 水 平 的“ 管 理 信 息 系 統(tǒng)”, 選 擇 性 能 優(yōu) 越 的 數(shù) 據(jù) 庫 是 最 重 要 的 一 環(huán), 我 們 經(jīng) 過 多 方...
作者:袁海蘭 [勝利石油管理局第六中學(xué)]

1 前 言

開 發(fā) 高 水 平 的“ 管 理 信 息 系 統(tǒng)”, 選 擇 性 能 優(yōu) 越 的 數(shù) 據(jù) 庫 是 最 重 要 的 一 環(huán), 我 們 經(jīng) 過 多 方 面 的 調(diào) 研 和 分 析, 選 擇 了ORACLE7 數(shù) 據(jù) 庫, 成 功 地 開 發(fā) 了 本 系 統(tǒng)。 實(shí) 踐 證 明, 本 系 統(tǒng) 設(shè) 計(jì) 科 學(xué)、 合 理、 運(yùn) 行 穩(wěn) 定, 本 文 將 具 體 闡 述 一 下 系 統(tǒng) 中 應(yīng) 用ORACLE7 數(shù) 據(jù) 庫 的 方 法 和 技 術(shù)。

2 系 統(tǒng) 的 開 發(fā)、 運(yùn) 行 環(huán) 境

本 系 統(tǒng) 在CLIENT/SERVER 結(jié) 構(gòu) 上 運(yùn) 行,SERVER 為CDC 4360 小 型 機(jī), 和 快 速FDDI 環(huán) 網(wǎng) 相 接, 內(nèi) 裝 有UNIX 操 作 系 統(tǒng) 和ORACLE7 數(shù) 據(jù) 庫, 系 統(tǒng) 總 體 網(wǎng) 絡(luò) 協(xié) 議 為TCP/IP 。

CLIENT 端 為486 以 上 微 機(jī),16M 以 上 內(nèi) 存, 硬 盤 足 夠 大, 通 過HUB、 路 由 器、MODEM 和SERVER 連 接。 開 發(fā)、 運(yùn) 行 平 臺 是WIN95, 安 裝 了 網(wǎng) 絡(luò) 軟 件ONNET、ORACLE CDE 產(chǎn) 品 SQL*NET V2。 開 發(fā) 工 具 是POWERBULDER5.0( 以 下 簡 稱PB5)、VB4 等。

3 ORACLE7 在 系 統(tǒng) 中 的 各 種 應(yīng) 用

3.1 一 般 性 的 數(shù) 據(jù) 管 理

一 般 性 的 數(shù) 據(jù) 管 理 用 數(shù) 據(jù) 窗 口 管 理 最 方 便, 可 以 在 數(shù) 據(jù) 窗 口 中 進(jìn) 行 表 的 增、 刪、 改、 查 詢 等 操 作, 下 邊 是 一 些 具 體 例 子(PB5):

3 .1 .1 連 通ORACLE 庫, 并 將 數(shù) 據(jù) 裝 入 數(shù) 據(jù) 窗 口:

dw_1.SetTransObject(sqlca)
dw_1.Retrieve()
3 .1 .2 增 加 一 條 記 錄

dw_1.InsertRow(dw_1.GetRow( ) + 1)
3 .1 .3 刪 除 一 條 記 錄( 當(dāng) 前 記 錄)

dw_1.DeleteRow(0)
3 .1 .4 將 數(shù) 據(jù) 提 交 入 庫( 存 盤)

dw_1.Update( )
commit;
3 .1 .5 打 印 數(shù) 據(jù) 窗 口( 表) 中 的 數(shù) 據(jù)

dw_1.print()
3 .2 文 字 類 數(shù) 據(jù) 管 理

3 .2 .1 文 本 入 庫 和 查 詢

文 本 入 庫 和 查 詢 可 采 用PB5 的MLE( 多 行 編 輯 器) 作 界 面, 編 輯 完 成 后 存 入ORACLE7 的LONG 字 段 中, 查 詢 時 從LONG 字 段 中 取 出, 放 入MLE 中 查 詢, 下 邊 是 一 個 例 子:

//文本的預(yù)處理(以去除文本文件中的回車換行符為例說明)
//將文件讀入BLOB型變量
text中fn=fileopen(txtname,streammode!)
if fn< > -1 then
fileread(fn,text)
fileclose(fn)
// 并 轉(zhuǎn) 換 為 文 本
article=string(text)
s=len(article)
for v=1 to s
t=pos(article,char(13)+char(10),v)
if t >0 then
article=replace(article,t,2,"")
else
end if
next
mle_1.text=article
//將處理后的文件c:\bb.txt存盤,
文件中的回車換行符已全部去掉
text1=blob(article)
filname="c:\bb.txt"
fn=fileopen(filname,streammode!,
write!,lockwrite!,replace!)
if fn< >-1 then
filewrite(fn,text1)
fileclose(fn)
end if
//文本入庫
nr1=blob(mle_1.text)
updateblob gljwj set nr=:nr1 where bh=:pass_parm
and zwrq=:fsj and wjbs=:fl5 using sqlca;
commit;
// 放 入MLE 中 查 詢
selectblob nr into :nr1 from gljwj where bh=:pass_parm
and wjbs=:fl5 and zwrq=:fsj using sqlca;
mle_1.text=blob(nr1)
3 .2 .2 從 庫 中 重 新 生 成 文 本 文 件filename.txt 并 存 盤

select nr into :filen from fwgs where bh=:bh1
and lwrq=:zwrq1 using sqlca;
fname="c:\filename.txt"
fh=fileopen(fname,streammode!,write!,lockwrite!,replace!)
if fh< >-1 then
filewrite(fh,filen)
fileclose(fh)
end if
3 .3 處 理 圖 象 文 件( 大 的 二 進(jìn) 制 文 件)

圖 象 文 件( 一 般 為BMP 位 圖 文 件) 是 二 進(jìn) 制 文 件, 將 其 以 數(shù) 據(jù) 流 方 式 存 入ORACLE7 的LONG 字 段 中, 查 詢 時 從LONG 字 段 中 取 出, 放 入 圖 象 框( 如p_1) 中 查 詢, 下 邊 是 一 個 例 子:

// 將 圖 象 文 件 讀 入BLOB 型 變 量pict 中
fn=fileopen(picname,streammode!)
if fn< > -1 then
fileread(fn,pict)
fileclose(fn)
// 將 圖 象 放 入 圖 象 框p_1 內(nèi) 查 看
setpicture(p_1,pict)
end if
// 將 圖 象 存 入 表pic 的LONG 字 段bmpt 中
updateblob pic set bmpt=:pict ;
commit;
較 大 的 圖 象 文 件 一 次 不 能 入 庫, 可 采 取 分 割 圖 形 的 方 式, 分 塊 存 入, 因 為LONG 字 段 所 存 放 的 數(shù) 據(jù) 大 小 一 般 是 沒 限 制 的( 可 存 放2G 的 內(nèi) 容)。

4 開 發(fā) 應(yīng) 用 經(jīng) 驗(yàn)

4 .1 建 議CLIENT 端 通 過SQL*NET V2 進(jìn) 行ORACLE 數(shù) 據(jù) 通 信( 不 用SQL*NET TCP V1 產(chǎn) 品)

因 為 在ORACLE7 推 出 以 后,SQL*NET V1 就 沒 有 做 一 些 改 進(jìn) 工 作, 繼 續(xù) 支 持 到ORACLE7.2, ORACLE7.3 以 后 的 產(chǎn) 品 將 不 支 持SQL*NET TCP V1, 所 以,ORACLE7 用 戶 應(yīng) 立 即 改 用SQL*NET V2, 不 然 會 影 響 到 庫 的 運(yùn) 行 穩(wěn) 定 性。

ORACLE CDE2 和Developer 2000 提 供 了CLIENT 端ORACLE 產(chǎn) 品 的 安 裝 程 序ORAINST.EXE, 運(yùn) 行 該 文 件 來 安 裝SQL*NET V2, 選 擇 的 產(chǎn) 品 有:

a ORACLE TCP/IP ADPTER 2.1.4.1.3
b sql*net 2.1.4.1.4
在WIN95 下, 網(wǎng) 絡(luò) 軟 件 產(chǎn) 品(Tcp/IP Vendor) 選 擇Microsoft windows NT Tcp/IP 3.1 , 按 提 示 說 明 裝 入 就 可 以 了, 另 外 還 要 做 以 下 工 作:

將SERVER 上 的tnsnames.ora 文 件 復(fù) 制 到CLIENT 端c:\orawin\network\admin 目 錄 下:

ora7=(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=111.1.1.1)
(PORT=1521)
)
(CONNECT_DATA=(SID=ora7))
)
可 在SQLPLUS 下 鍵 入 連 接 命 令scott/tiger@ora7 測 試 連 接 情 況。

首 先 要 作 好 這 三 件 工 作:

4 .2 采 取 數(shù) 據(jù) 加 密 技 術(shù)

對 用 戶 來 說, 查 詢 信 息 是 有 權(quán) 限 的, 若 想 查 詢 某 項(xiàng) 保 密 數(shù) 據(jù), 需 正 確 地 鍵 入 密 碼, 才 能 查 到。 面 對 同 一 臺 微 機(jī), 誰 能 正 確 地 鍵 入 密 碼, 誰 就 能 做 查 詢, 該 系 統(tǒng) 通 過 自 定 義 一 些 復(fù) 雜 的 函 數(shù) 運(yùn) 算 產(chǎn) 生 密 碼, 從 表(TABLE) 中 找 不 到 密 碼 數(shù) 據(jù), 通 過 這 種 精 密 的 設(shè) 計(jì) 處 理, 達(dá) 到 了 數(shù) 據(jù) 保 密 要 求。 下 邊 是 密 碼 修 改 和 識 別 的 一 段 程 序(PB5) :

password=sle_1.text
a8=pos(sle_1.text,"/")
if a8 >=1 then
password=left(sle_1.text,a8 - 1)
newpassword=mid(sle_1.text,a8+1,len(sle_1.text) - a8)
end if
select dwbm into :dm from dw where mm=:password;
sle_1.text=""
if sqlca.sqlcode< >0 then
messagebox(" 警 告:"," 口 令 錯 !")
pw=pw+1
if pw >=3 then
close(w_bg_main)
end if
else
mm=dm
if a8 >=1 then
a7=messagebox("提示信息","確定要修改口令嗎(y/n)?
",information!,YesNo!,2)
if a7=1 then
select dwbm into :a9 from dw where mm=:newpassword;
if sqlca.sqlcode< >100 or newpassword="" then
messagebox(" 提 示 信 息"," 新 口 令 錯 !")
goto end1
else
update dw set mm=:newpassword
where mm=:password;
messagebox("請記住新口令",string(newpassword))
commit;
end if
end if
end if
4 .3 用EXCEL 輸 出 精 美 表 格

用VC 或PB5 將ORACLE 庫 中 的 數(shù) 據(jù) 生 成 文 本 或EXCEL 文 件, 再 通 過EXCEL 的 數(shù) 據(jù) 鏈 接, 將 對 應(yīng) 數(shù) 據(jù) 調(diào) 入 事 先 定 義 好 的EXCEL 標(biāo) 準(zhǔn) 輸 出 表 中, 按 用 戶 的 要 求 輸 出。

PB5 生 成EXCEL 格 式 文 件 的SCRIPT 語 句 舉 例 如 下:

dw_1.SaveAs("c:\glxx.xls",excel!,true)
4 .4 正 確 使 用 日 期 型 數(shù) 據(jù)

在 庫 操 作 過 程 中, 若 日 期 變 量 的 值 定 義 錯 了, 將 提 示SQL 語 句 出 錯 信 息, 錯 誤 現(xiàn) 象 非 常 隱 蔽, 不 好 察 覺, 這 是 編 程 過 程 中 的 常 見 錯 誤, 在 此 特 別 強(qiáng) 調(diào) 一 下。 舉 一 個 例 子:

若 日 期 數(shù) 據(jù) 為 常 量, 要 按 下 列 格 式 賦 值( 用 一update 語 句 說 明):

update tab set rq='1-Feb-96';
commit;
5 結(jié) 束 語

該 系 統(tǒng) 的 開 發(fā) 和 應(yīng) 用, 使 我 們 更 加 體 會 到 了ORACLE 數(shù) 據(jù) 庫 的 優(yōu) 越 性, 本 系 統(tǒng) 的 開 發(fā) 成 功 與 此 是 分 不 開 的, 我 們 將 做 進(jìn) 一 步 探 索, 用 先 進(jìn) 的 開 發(fā) 工 具 和 升 級 的ORACLE8 開 發(fā) 面 向 網(wǎng) 絡(luò) 的 和 多 媒 體 的“ 管 理 信 息 系 統(tǒng)”。