Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

tag 標(biāo)簽: 記錄

相關(guān)日志

分享 在數(shù)據(jù)表中添加輔助字段的構(gòu)想(一)
Superleistung 2016-5-31 11:46
剛剛學(xué)習(xí)Access不久,在建立表的過(guò)程中發(fā)現(xiàn)一個(gè)問(wèn)題: 如果允許用戶通過(guò)窗體直接從數(shù)據(jù)表中刪除數(shù)據(jù),可能不安全。會(huì)出現(xiàn)一種情況——即,用戶刪除了他權(quán)限上允許他刪,而事實(shí)上卻很重要的數(shù)據(jù)(出于誤刪,或是根本就是惡意刪除)。 這時(shí)候就需要 找回 數(shù)據(jù),應(yīng)該做恢復(fù)數(shù)據(jù)及回滾覆蓋操作。這就有個(gè)如何安全恢復(fù)的問(wèn)題。 假設(shè):恰好數(shù)據(jù)被刪除掉之后沒(méi)有 被 立刻發(fā)現(xiàn),很多員工又繼續(xù)用了相當(dāng)長(zhǎng)一段時(shí)間,產(chǎn)生了大量數(shù)據(jù);而之前的數(shù)據(jù)庫(kù)備份又比較久遠(yuǎn),這就比較麻煩, 以我現(xiàn)在的水平從Access底層是解決不了的。 受權(quán)限表的設(shè)計(jì)原理啟發(fā),我想到可以在數(shù)據(jù)表中添加輔助字段,形如"WantDelete" (是否刪除字段) ,"WantHide" (是否隱藏顯示字段) , "IfActive" ( 是否活動(dòng)字段 ), "LastEdit" (上次編輯記錄的ID字段), "DeleteTime" (記錄編輯時(shí)間字段), "EditTime" (記錄編輯時(shí)間字段) 來(lái)控制用戶端的操作: 我的構(gòu)想是: 1.新增:用戶的新增操作像以前一樣可以進(jìn)行,新加的 "WantDelete" ,"WantHide"字段默認(rèn)為否, "IfActive"默認(rèn)為真, "LastEdit" , "DeleteTime" 字段為空 , "EditTime"字段為新增時(shí)間。 2.刪除:用戶的任何刪除操作都不是對(duì)表中數(shù)據(jù)做任何實(shí)際操作的,而是對(duì) "WantDelete" "WantHide" "IfActive" 打鉤,程序?qū)? "WantDelete" "WantHide" 已打鉤項(xiàng)目進(jìn)行隱藏操作;在查詢的時(shí)候?qū)? "IfActive"進(jìn)行判斷,對(duì)不活動(dòng)的記錄不進(jìn)行操作;同時(shí)將刪除操作的時(shí)間記入 "DeleteTime" 字段。 3.編輯:編輯操作轉(zhuǎn)變?yōu)? -對(duì)原紀(jì)錄做Copy新增 -在Copy記錄中的 "LastEdit"中寫(xiě)入原記錄的ID -在Copy記錄中 "EditTime" 記下當(dāng)前 時(shí)間 -將Copy記錄的 "WantDelete" ,"WantHide"字段設(shè)置為否, "IfActive"設(shè)置為真 , "DeleteTime" 字段設(shè)為空 -在原記錄中,設(shè)置僅將 "WantHide"值為真, "IfActive"設(shè)置為否 , "DeleteTime" 字段記錄 記下當(dāng)前 時(shí)間(不設(shè)置 "WantDelete"為真是為了方便管理員區(qū)分編輯和刪除操作 ) -刷新顯示的時(shí)候,實(shí)際上是做的數(shù)據(jù)篩選,將 "IfActive"設(shè)置為否的記錄隱藏掉。 4.查詢:設(shè)計(jì)查詢的時(shí)候,把 "IfActive"為否的記錄篩掉不做操作,這樣就可以做到類似顯示真實(shí)刪除掉記錄后的效果。 可以方便的在管理員界面進(jìn)行管理,提取數(shù)據(jù)生成日志報(bào)表,并對(duì)真的需要?jiǎng)h掉的記錄由管理員進(jìn)行最終的備份+刪除操作。 關(guān)于數(shù)據(jù)恢復(fù)的操作: 恢復(fù)數(shù)據(jù)操作的主體應(yīng)該是管理員,由管理員對(duì)隱藏掉的數(shù)據(jù)進(jìn)行回溯查詢,找到數(shù)據(jù)記錄正確的數(shù)據(jù)條,修改其相應(yīng)的 "WantDelete" ,"WantHide" , "IfActive" , "LastEdit" , "DeleteTime" , "EditTime"字段的值即可。 后記: 后來(lái)想了一下,這個(gè)設(shè)計(jì)應(yīng)該能做的更好:其實(shí)應(yīng)該將記錄添加人,刪除人,編輯操作人作為單獨(dú)的字段獨(dú)立出來(lái),記錄下做操作的員工ID 對(duì)后續(xù)的管理會(huì)更有幫助。 先把這個(gè)實(shí)現(xiàn)以后調(diào)試一段時(shí)間看看效果, 感覺(jué)這里面應(yīng)該還可以深入,放在以后講。
個(gè)人分類: 數(shù)據(jù)庫(kù)結(jié)構(gòu)|2214 次閱讀|0 個(gè)評(píng)論
分享 數(shù)據(jù)庫(kù)里有5條記錄,隨機(jī)抽取4條
stiven.hu 2013-4-19 22:26
code -------------------------------------- % '-------------------------數(shù)據(jù)庫(kù)連接----------------------- Set objConn = Server.CreateObject("ADODB.Connection") objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ "Data Source=" Server.MapPath("data.mdb") objConn.Open '-------------------------數(shù)據(jù)庫(kù)連接----------------------- '-------------------------檢索數(shù)據(jù)----------------------- strSQL = "Select id,DataColumn FROM DataTable" 'Sql語(yǔ)句,檢索數(shù)據(jù)庫(kù) Set objRS = Server.CreateObject("ADODB.Recordset") '創(chuàng)建記錄集 objRS.Open strSQL, objConn, 1, 1 '執(zhí)行檢索 Count=objRS.RecordCount '得到記錄總數(shù) Item=4 '顯示記錄數(shù) '-------------------------檢索數(shù)據(jù)----------------------- '------------------------------------------------------------------------------- redim a(Item, 2),t(Count) '定義2數(shù)組,數(shù)組a用來(lái)儲(chǔ)存記錄,數(shù)組t用來(lái)刪選記錄 '--------------------------------------- '初始數(shù)組數(shù)值,目的為了插入數(shù)據(jù)以后和此值做比較 for each j in t j=0 next '--------------------------------------- '--------------------------------------- ' 隨機(jī)抽取記錄號(hào) Randomize timer '初始化隨機(jī)數(shù)生成器 for j=1 to Item k=int(rnd*Count+1) '從總數(shù)里面隨機(jī)取一條記錄 do while t(k)0 '判斷是否記錄是否已經(jīng)在數(shù)組中 k=int(rnd*Item+1) loop t(k)=1 '第k條記錄被選中 next '-------------------------------------- j=1:i=1'定義下標(biāo) '-------------------------------------- ' 循環(huán)選取數(shù)據(jù)集objRS中的部分記錄存放到數(shù)組中 Do While Not objRS.Eof if t(j)=1 then a(i,1)=objRS("id") '記錄id a(i,2)=objRS("DataColumn") '記錄內(nèi)容 i=i+1 end if j=j+1 objRS.MoveNext Loop '-------------------------------------- '------------------------------------------------------------------------------- '----------------------------顯示內(nèi)容-------------------- for i=1 to Item Response.write "序號(hào)"a(i,1)" " Response.write "內(nèi)容"a(i,2)"p" next '----------------------------顯示內(nèi)容-------------------- '--------------------------- '釋放資源 objRs.Close set objRs=nothing objConn.Close set objConn=nothing '--------------------------- % Data id DataColumn -------------------------- 1 a 2 b 3 c 4 d 5 e
1343 次閱讀|0 個(gè)評(píng)論

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 06:27 , Processed in 0.087696 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部