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

想要問個介面按"儲存"的關念問題

答題得分者是:dllee
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-10 17:59:04 IP:220.132.xxx.xxx 訂閱
請問通常軟體在操作時,要按儲存才會真正的儲存到資料庫,而其運作流程是如何呢。
我想到的方法是:軟體一開始都讀取資料庫(1),然後備份資料庫(2),之後便都是在資料庫(2)讀取及操作,若有按儲存時,將資料庫(1)殺掉,再將資料庫2複製一份為資料庫(1),沒有的話就直接離開就好。
但是我覺得這好像不是個好方法,因為還要複制一份資料庫好像很浪費時間,或者是有那種能比對資料庫(1)跟資料庫(2)不同的地方修改就好了。

不知道大家有什麼方法 (還是記錄更新資料庫的指令,最後有儲存再一次更新)。
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-10 21:25:07 IP:61.217.xxx.xxx 未訂閱
是什麼的資料庫系統?
通常調出來"修改"的只有當前cursor那一筆資料,所以存檔只做update的語法
也有整批處理的概念啦,不過不保險就是了,萬一電腦當機或斷電什麼的,就整批資料lost

儲存會做什麼動作,取決你的架構設計嘍.
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-11 00:08:19 IP:203.73.xxx.xxx 訂閱
你不會是希望有個人幫你從頭解釋到尾吧?
這是什麼問法?你知道資料庫怎麼運作?元件會用了?SQL會寫了?
我可以說不懂你在問什麼
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-11 00:27:07 IP:220.131.xxx.xxx 未訂閱
1.你的操作只是一筆。不用複製整個資料庫。
2.你忘了還有記憶體這個東西。
你的資料先讀到記憶體,有修改才儲存到資料庫。沒修改就當沒事發生。
3.要備資料庫?你想太多了吧。@@
===================引 用 17kobe 文 章===================
請問通常軟體在操作時,要按儲存才會真正的儲存到資料庫,而其運作流程是如何呢。
我想到的方法是:軟體一開始都讀取資料庫(1),然後備份資料庫(2),之後便都是在資料庫(2)讀取及操作,若有按儲存時,將資料庫(1)殺掉,再將資料庫2複製一份為資料庫(1),沒有的話就直接離開就好。
但是我覺得這好像不是個好方法,因為還要複制一份資料庫好像很浪費時間,或者是有那種能比對資料庫(1)跟資料庫(2)不同的地方修改就好了。

不知道大家有什麼方法 (還是記錄更新資料庫的指令,最後有儲存再一次更新)。
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-12 09:49:06 IP:59.105.xxx.xxx 訂閱
我猜想,我或許了解您的問題了。(說真的,看到那麼多人回覆您的問題,真是羨慕呀)
先聲明,資料庫不是我熟悉的領域。

個人認為,這要看您是用什麼資料庫?
如果是一般現成使用 TTable/TQuery 存取的資料庫或是經由 ADO
或其他方式取存的市面上大部分的資料庫,您的想法是多餘的,
因為您只是經由這些元件或介面去操作資料庫,資料庫檔案由資料庫
系統自行維護。

若使用 TTable/TQuery 在資料新增修改後,使用 Post() 即可存入資料
TBDEDataSet::Post
Writes a modified record to the database.
virtual void __fastcall Post(void);
Description
Call Post to write a modified record to the database. Dataset methods that change the dataset state, such as Edit, Insert, or Append, or that move from one record to another, such as First, Last, Next, and Prior automatically call Post.

若很多資料更新修改,擔心資料沒存入,可叫用 FlushBuffers() 或是 Close() 資料庫,
由資料庫系統將資料存入檔案。

您說的方法,如果是您自己開發資料庫系統,又應用上客戶有這樣的需求,就可以按您的規劃去作。
以我個人的應用上,例 IniFile 的使用,如果使用 TIniFile,每次操作都是直接讀取檔案,為了減少
檔案的讀取,我改用 TMemIniFile,則是一次將檔案讀到記憶體,之後都在記憶體操作,在必要時,
再將記憶體內的資料寫回原 Ini 檔。TMemIniFile 的運作就類似您的規劃。
------
http://www.ViewMove.com
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-12 16:24:36 IP:61.67.xxx.xxx 未訂閱

===================引 用 17kobe 文 章===================
請問通常軟體在操作時,要按儲存才會真正的儲存到資料庫,而其運作流程是如何呢。
我想到的方法是:軟體一開始都讀取資料庫(1),然後備份資料庫(2),之後便都是在資料庫(2)讀取及操作,若有按儲存時,將資料庫(1)殺掉,再將資料庫2複製一份為資料庫(1),沒有的話就直接離開就好。
1.你有考慮到如果資料上萬筆時的問題嗎?
2.你有考慮到資料庫(1)殽掉的種種問題嗎? (之前連結,讀取,權限....)
3.你有考慮到資料庫(2)要複製到資料庫(1)的種種問題碼? (如覆蓋問題,共用問題,控管問題)
4.你有考慮到萬一資料庫(1)已被刪除,資料庫(2)又複製失敗時,你怎麼辦?
5.你有考慮到你這麼做法,在一切都是感知元件的狀況下,你如何掌控所有畫面上感知元件的連結?
6.你有考慮到目前是網路的架構嗎? 如果主資料庫是在遠端時,你怎麼辦?

但是我覺得這好像不是個好方法,因為還要複制一份資料庫好像很浪費時間,或者是有那種能比對資料庫(1)跟資料庫(2)不同的地方修改就好了。
6.既然你都認為不是好方法,提出你的流程作法再透過大家討論才是正確的詢問方式,而不是要大家提供方法,因為方法太多,這樣的提問,很容易遭致民怨的哦! 或者根本你認為"不是個好方法" 只是你自己隨口說說?
不知道大家有什麼方法? (還是記錄更新資料庫的指令,最後有儲存再一次更新)。
系統時間:2024-05-03 9:33:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!