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

网络版中能不能允许临时表存在?

答題得分者是:malanlk
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-18 21:31:51 IP:222.184.xxx.xxx 未訂閱
在单机版中,我用的临时表的作用实在太大了,在收费时将所有收费项目先写到临时表中,等所有项目填完后再录到正式表中(有大大说用BeginTrans,那CommitTrans什么时候提交呢?因为从临时表录到正式表还要经过几道流程呢,不是马上发生的,)临时表还连着一个DBgrid,每填完一个项目就显示,功能上当收费清单用的,双击里面的任一项目还可进行删除操作。在临时表AfterRPOST还会发生一个求和操作,现在改为网络版后因为几台客户机共用一临时表的话就会出错,请问大大,在网络版中保留这样的临时表行不行?如果能保留的话如何避免客户机同时用时的相互干扰问题,如果网络版中有这样的临时表是不合理或者没必要的话,如何用什么方法解决我上面说的几个问题呢?谢谢!
------
我的编程起步于ktop,我将永远支持ktop
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-19 10:13:06 IP:210.66.xxx.xxx 未訂閱
可以參考一下 : 在臨時表中增加一個欄位,用來記錄某一個使用者在某時候的作業。我通常用使用者名稱再加上四位的亂數來組成,作業完成後,再全部刪除即可。多使用者絕不會相混合。因為各有獨立的 ID。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-19 11:54:41 IP:222.184.xxx.xxx 未訂閱
那么我本来做收费清单用的,填一个显示一个的,并且可以删除其中任何一个,我用的是ADOTABLE连的那个临时表,如果按您说的,是不是都要换成ADOQUERY控件?
------
我的编程起步于ktop,我将永远支持ktop
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-19 12:37:29 IP:210.66.xxx.xxx 未訂閱
不用啊,只要在資料庫的表格上加新的欄位,存檔時加上ID,在取資料時用filter 過濾也可以。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-19 20:39:31 IP:222.184.xxx.xxx 未訂閱
有没有这样的做法的:就是临时表还保留,并且还是写在本机上的ACCESS数据库中,和SQL服务器无关,这样是否合理?
------
我的编程起步于ktop,我将永远支持ktop
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-19 22:43:02 IP:61.219.xxx.xxx 未訂閱
像你這樣其實用 ClientDataSet 會更適當. ClientDataSet 可以在讀入資料後就和後端資料庫先分離, 並持續將 Client 端的異動紀錄在 Delta packet 裡面, 直到最後呼叫 ApplyUpdate 才會更新後端資料庫, 至於 Insert, Edit, Delete, Post... 就像操作 Local 資料表一樣....
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-20 07:00:25 IP:222.184.xxx.xxx 未訂閱
ClientDataSet 我没有使用过,不过就前辈在上面的描述中来看,您所说的好象和SQL中的事务一样了,BeginTrans,CommitTrans,和这功能差不多少?您所说的读入资料后就和後端資料庫先分離(因为我所说的临时表读入资料时肯定读的是空表,最终也不要写什么东西进去,只是某种过程时产生一定资料)您所说的ApplyUpdate 才會更新後端資料庫,在没有ApplyUpdate之前,我想要的收费清单显示如何实现呢,因为收费清单连的数据表就是临时表,临时表中有啥内容,它就显示啥,如果没有ApplyUpdate前,是不是临时表就是空的?问的不对之处请前辈多包涵。
------
我的编程起步于ktop,我将永远支持ktop
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-20 11:02:27 IP:61.219.xxx.xxx 未訂閱
1. ClientDataSet 不連資料庫也可以自行運作, 可以自行定義欄位, 如果不是動態產生, 而是利用元件, 自行定義欄位會保留下來. 2. 如果 ClientDataSet 不連資料庫, 就沒有所謂的 ApplyUpdate, 也沒有 BeginTrans, CommitTrans, 更新資料庫的方式就是將資料由 ClientDataSet讀出再下另下Query寫入資料庫內(BeginTrans, CommitTrans在這時使用). 3. ClientDataSet, 如果不連資料庫就跟 local table ㄧ樣, 初次建立一定是空的, 之後隨你宰割...如果連資料庫就會依Query讀入符合資料的, 所以這裡有個取巧的方式, 可以用ㄧ個暫時的ClientDataSet下一個根本沒資料的Query讓 ClientDataSet由 Server 端取得欄位資料並幫你建好, 這個動作只要在連線時做一次, 之後操作要用的臨時表可以由這個暫時的ClientDataSet複製欄位結構(這樣至少就不怕Server端增加欄位, 也不必每次用臨時表就要下一次沒資料的Query).....運用存乎一心啦...
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-20 11:55:41 IP:210.68.xxx.xxx 未訂閱
malanlk大大的方法我沒用過,還得請malanlk大大再詳加說明一下。 如果是我的方式,會先建立存放暫時資料的table,這個table 必定有一個ID欄位,用來記錄是那一次的作業。 每次使用者開啟輸入單據的功能時,系統自動給一個ID。每輸入一筆資料時,會在暗中寫入這個ID。作業完成或取消時,所有有關此次作業的資料就全部刪除。當然要存檔的資料會在刪除前將暫存資料寫入正確的table。 至於暫存的table 是否放在Local, 並不重要,都可以啦。通常放在同一個資料庫比較好管理。
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-20 12:03:31 IP:222.184.xxx.xxx 未訂閱
ClientDataSe因为相关知识掌握还不太够,前辈在另一问题上的回答那个方法我好象觉得比较可行,所以先商讨一下那个方法,如果不行再回过头来用这个ClientDataSe。我所做的是小型的网络版,一般情况下最多不会超过五台客户机联网,我所说的临时表,一般只有五六个字段,每次记录一般不会超过十条。您所说的每次连线时GREAT数据表,我觉得比较可行,因为字段少,建起来不会太费时吧!而且如果不是全局临时表的话,它只限定一个连线的客户机使用,绝对不会发生多台客户机共用一个临时表,从而记录相互干扰的情况,而且我本来是用的DBGRID连的这个临时数据表,到时我加一句代码,将连接改为创建的那个表的名称,是不是就可以了?我的想法是否对,还有没有比这方法更好的了?我本来想的方法是保留客户机本地电脑上的ACCCESS数据库,里面就放一个临时表。不过好象有了SQL还在用ACCESS不太合理?
------
我的编程起步于ktop,我将永远支持ktop
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-20 18:57:33 IP:61.219.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/link.asp?TOPIC_ID=77091 打個官腔: ....前輩在另一問題上.... 附上連結讓大家方便索引...
引言:您所說的每次連線時Create資料表,我覺得比較可行,因為欄位少,建起來不會太費時吧!而且如果不是全局臨時表的話(你補充的很好),它只限定一個連線的客戶機使用,絕對不會發生多台客戶機共用一個臨時表,從而記錄相互干擾的情況,而且我本來是用的DBGRID連的這個臨時資料表,到時我加一句代碼,將連接改為創建的那個表的名稱,是不是就可以了?
我直覺跟我說:應該對
引言:我的想法是否對,還有沒有比這方法更好的了?
好像有 如果先再資料庫先建立一個樣本表, 然後用 SELECT * FROM <樣本表> INTO <#臨時表>.... 這樣應該連 Create 都省掉了 http://www.databasejournal.com/features/mssql/article.php/1438061 這篇文章有說到一些風險, 但是你只是建立空臨時表, 所以應該沒事....運用存乎一心....
引言:我本來想的方法是保留客戶機本地電腦上的ACCCESS資料庫,裏面就放一個臨時表。不過好象有了SQL還在用ACCESS不太合理?
未必 有些資料平時很少動到, 可是又每次都要用到, 每次都從 server 端讀過來又花時間, 就可以存在 Local 資料庫 如 Access 內, 有必要再更新即可...這可加速程式啟動的時間....運用存乎一心.... to scotthsiao大大, 站內討論 ClientDataSet文章也不少這篇參考看看 http://delphi.ktop.com.tw/topic.php?topic_id=33999
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-20 21:23:09 IP:222.184.xxx.xxx 未訂閱
malanlk 大大的指点读后真是令人有一种很愉悦的感觉,指点的很详细,又有层次感,而且在细节方面做得相当好,我再加强一下相关的知识的学习,着手根据您的指点去做,用实践来比较一下哪种方法好一点。
------
我的编程起步于ktop,我将永远支持ktop
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-08-20 21:42:50 IP:210.68.xxx.xxx 未訂閱
多謝malanlk大大提供的資料,令人受益不少。 我的方式已經使用多年, 在運作上也令人滿意,所以就不再求改進。如今得知有好的方法,當然要好好的試一試囉。
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-08-21 01:02:04 IP:61.219.xxx.xxx 未訂閱
兩位客氣了, 只是將以前使用的經驗與大家分享一下....
系統時間:2024-11-22 11:36:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!