請教一張訂單如何確保無誤的存入資料庫.... |
答題得分者是:P.D.
|
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
1.你開的題目太大了, 不是三言兩語可以說的, 是否建議你先實作看看, 有問題再上來討論
2.還要要看你是如何引導資料流程的設計, 這都關係到你訂單是否合法, 合適的回存等規劃 ===================引 用 mitchellhu 文 章=================== 請教一張訂單如何確保無誤的存入資料庫... 使用在grid上key完所有訂單品項按 save button。 應該如何設計確保所有次資料完整進資料,若存入的過程中,db異常中斷的話,如何確保已寫入的資料可以全部回寫呢? 會請教這個問題除了我是新手外,也是在想不懂的地方是,就算是用在db上寫storeprocedure 用being - tran - commit來保証全部的異動 但是如何使用dbexpress的各項元件完成批次的資料傳送給db上的sp來執行呢? 請諸位先進指點一下? 感謝 |
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
感謝版大的指點,我仔細想看看我的問題確實範圍不明確,真是對不起!
我想我的主要問題是指確保資料正確和如何完批次的insert及update 舉例:有1張訂單5筆品項(假設5筆品 進入資料庫會造成的動作有 1.訂單檔:insert 1筆訂單 2.訂單明細:insert 5筆資料 3.存量檔:update 5筆資料 在Form 上的元件有: StringGrid : 給user add,modify,delete 訂單資料 save Button: user 啟動 save to DB的處理 SQLConnection : 連結DB SQLQuery : inert/update 資料 整個程序 以 stringGrind的rowcount為迴圈,一筆筆的異動資料 這是我目前的作法。雖然可以用。 但是我想若遇上中間有任何問題,造成迴圈無法完成。變成部份筆數尚未異動 而已異動的部份確無法自動回寫成未異動的狀態。 所以我想如何能以批次方式完成異動比較好,也就是要就整個完成,不就是完全不異動。 我想將所有insert和update 寫storeproce來實現。 但不知前端這些元件如何設計? 主要不明處就是如何 能將目前迴圈資料作一個Arrary類的資料 送給storeprocedure 而且不知stroeprocedure可以接收Arrary類的資料嗎? 請版主指點迷津 謝謝 |
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
不知前端這些元件如何設計?
==>很抱歉,初看到這句時,我差點昏倒 ==>因為我以為你是要問『這些元件如何設計?』,那老實講,我不知道。 ==> 因為Delphi是天才的產品,它主要是為了下愚如小弟我這類人設計的 ==> ,可能大部份用Delphi都沒能仔細澈底挖過Delphi的精華深處﹝這曾 ==> 經是好久好久以前我年輕時不切實際的夢想與幻想﹞。你只要會用 ==> 及掌握幾個Dephi-OO的原則就可以了。 ==>不過,再看一下你的原文,我想你不是要跟大家討論這些東西的, ==> 那些可能可能可以寫成好幾本書了。你想的,只是如何把元件組起 ==> 來,及如何用它們罷了。 ==>如果是講如何把元件組起來,及如何用它們,那你應該給大家一個起點。 ==> 如『我已經...,可是...,我又試過...但...』 ==>有時想想,用了十幾年的Delphi,總是有些依戀,雖然日常工作是離它越 ==> 來越遠,但總是很想跟同好聊聊,只是可惜現在在Ktop很少能遇到願 ==> 跟你扯些有的沒的的人了。
------
Kevin |
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
Keven 大大:
你好! 看了您的回覆,我自已都覺得好笑。看來我真的是大哉問了? 其實我的問題還真不少呢? 主要就是因為新上手的關係。 您能回答我真的高興,這幾天都在找資料和試著搞懂這些DB的元件。 基本上我目前都是使用SQLConnection, SQLQUERY來連結資料作insert,update,delete, query等的動作 使用介面上都是使用一般的stringgrid,edit,richedit等元件作為user的key in 介面。 雖然可以使用,但程式寫起來很麻煩,所有的異動都要同時處理db和介面上資料的改變,而且是一筆筆的異動。 所以我再想,資料庫系統的開發不應該是這樣的。特別是要確保資料的正確性時,我這樣的寫法好像太笨了。 就在我寫到Delete整張訂單資料時,想到若只要傳送單號給db上寫好的storprocedure來處理,程式的code不就大大節省了。 db歸db處理,UI就單純的delete stringGrid row就好了?我也實作出來了,確實可性。 於是馬上就想到若是整張的訂單一次性的Insert 到db的話,又要如何實現呢?這就是我的大哉問的來源了。 這幾天就找了一些資料來研究如何處理這樣的問題呢? 我目前正在試著用sqldataset/sqlclientdataset, sqldatasetporvider,datasource,dbgrid來寫看看 對我而言真的有點頭暈。 例如:簡單的 ADD 一筆訂單 先QUERY目前的最大單號再加1,成為新的單號。 但是sqldataset, 我找不出來方式給訂單編號欄insert 一個值。當然手動在dbGrid上可以key in 單號。 但是單號不應由使用者來訂的。使用者 應該是按下新增訂單鈕後,程式就會在dbgrid上自動增加一列,並在單號欄入key最新的單號的。 而且馬上在訂單單頭檔上,立即insert一筆新資料。以免同時又有人新增時會用同一個新單號。 我知道sqlDataset有insetrecord, appendrecord。但是我就是想不出來為什麼不是在DBgrid上來insert,append呢? 我還在try 我想我一定是還有很多東西還不清楚。我繼續努力。 呵呵 感謝 Keven和版主大的回覆
編輯記錄
mitchellhu 重新編輯於 2011-01-16 01:38:53, 註解 無‧
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
新手與新上手是差別很大的。新手是不可能接觸到sqlConnection、sqlQuery這些
東西的。這些是Borland繼BDE後提出的新技術,本身就蠻難蠻先進的。我當 初在BDE上停了好長一段時間,後來在Delph5時公司將好幾套系統由BDE改 寫到ADO時,好幾百萬行程式碼的改寫,至少花了一兩年時間才大略完成。 到現在很多年了,尚有些未完全消滅的BDE仍存在好幾個系統中,常常讓我 們頭痛。dbExpress是很強大很好的技術,可是我們並沒有深入研究。看到 新上手,就來玩dbExpress,實在很令人吃驚。老哥自謙新手,也太過謙。 看到老哥提到好幾次StoreProc,蠻好奇的。通常一個系統在不同客戶時會搭 配不同的DB,除了特殊狀況及為了綁客戶外,使用StorProc不是很不方便 嗎?老哥為何如此情有獨鍾?
------
Kevin
編輯記錄
kevin2004 重新編輯於 2011-01-19 16:10:07, 註解 無‧
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
使用介面上都是使用一般的stringgrid,edit,richedit等元件作為user的key in 介面。
雖然可以使用,但程式寫起來很麻煩,所有的異動都要同時處理db和介面上資 料的改變,而且是一筆筆的異動。所以我再想,資料庫系統的開發不應該是這 樣的。特別是要確保資料的正確性時,我這樣的寫法好像太笨了。 ==>只知道老哥您是高手,才能這麼快就可以把Delphi中這些較難的東西一下子 ==> 就可以弄得如此順手,實令人佩服。不太曉得老哥原先是在那個領域,及 ==> 是使用那些工具?蠻好奇的。可否透漏一下。 ==>Delphi天生就是為作DB-AP設計的,省時省力體貼強大。你為何要用StringGrid ==> 、Edit、RichEdit這些元件?為何不用DBGrid、DBEdit等,不是簡易多了。
------
Kevin |
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
感謝keven的回覆:
呵呵,keven你推測的很準確,我不是一般的新手。而是個2次就業的老頭新手。 年輕時推動和參與過持績開發近5年的大型專案,當時就是用delphi 3/bde。但 我主要是負責介面及資料庫的工作,但實際coding我沒有作,不過因為懂得工作程序, 而且看久了也略能看懂程式的code。 近年為了生活,只好從操舊業,接些case來作。最近朋友公司需要開發一套倉管系統, 所以我就選用delphi來開發兼練手(因為只有delphl看來有點熟悉,但實戰經驗不足,所以才會問出一些眼高手拙的問題) ,之所以沒用bde,ado,呵呵 被你料中,就是因為沒用過dbexpress ,也是想拿來練手。 畢竟這些db 元件,我都是不夠熟悉,就只能依照我自已規劃的需求,不斷的try................。結論是技術不上手,下場是進度 慢又因為常常有新的體會,部份程式碼又會重寫過...呵呵。可惡,自已沒按標準的程度序來開發....下場真是累又慘。 |
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
我本來想用dbgrid/dbnavigator作為user insert/update/modify/query的介面。
首先我遇上2個開題沒有克服。 1.有序單號:朋友要求用8碼年月日加2-5碼長的流水號。 我想不出個方法,可以用 sqlconnection/sqldataset 上的commandtext來完成新增一筆資料時, 會在單號欄自動顯示目前最新單號,而且其它欄空白給user輸入。 2.由於我table的相依高,所以異動某些table時,其它相關的table 也會跟著異動。同理,如何在 commandtext 或 apply update 時實現 batch sql statemnet 處理。我也沒試出來了。 另外我之所以會用storeprocedure就是為了簡單的處理前述的問題,目前只能實現對於已存入DB的資料,作整批 的刪除或異動。 而整批單據的insert,無特定範圍條件的update,無法適用於sp的方式來作。 另外對於table相依性的問題,我也想過用fk, trigger等方式來維持,呵呵。我發現我的db能力大退化,mysql也是第 一次用,要花時間才能上手,但是目前就是時間有限。已花太多的時間在try...try。眼見,下個月中就要交貨了。 目前進度還不到50%。所以只能用基本功來 硬幹(無腦大法)了。 等這個case收工。我再來研究,期望keven屆時多多指點啦 ps:對於第2個問題,有考慮用master detail的架構 來試,但可以多層的master detail來處理嗎?
編輯記錄
|
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
mitchellhu吾兄:
抱歉,小弟的小朋友這兩天感冒了,半夜燒到39度,全家人仰馬翻。好不容易今天退燒了,現在才回。 尚請吾兄鑑諒。 因為你在下個月中就要交件,小弟也不敢亂提什麼偉大的建議。不過就像原先講的,純是聊幾句。 吾兄當作忙累之餘,有個同好給您打氣吧。 講到訂單,一定免不了是Master-Detail,或是客戶定單、或是售貨員訂單,或是...,都免不了M-D。公司 有個系統有個功能,它是五層的M-D,整個Form直接的碼就兩三萬行,這支Form光由開發到成熟,就 至少費了三到五年的時間。所以您講的『可以多層的master detail來處理嗎?』,絕對沒問題。只要抓 住幾個M-D的重要關念與技巧,必水到渠成。 蠻佩服吾兄,竟然『mysql也是第一次用』、『因為沒用過dbexpress ,也是想拿來練手』,想想當初小弟 初次接觸PostgreSQL時到處碰璧,花了好幾年的時間才寫出第一個pgDbAP,今看吾兄行雲流水,過關 斬將,檣奴弩灰飛煙滅,實佩服之至。
------
Kevin |
kevin2004
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
倉管系統
==>小弟曾被公司指派短期支援別個部門的案子,它是用PLC MC VB-UI控制生產機臺及指揮無人 ==> 搬運車作倉儲管理,涉入沒多久就又去作別的案子了。 有序單號...我想不出個方法,可以用 sqlconnection/sqldataset 上的commandtext來完成新增一筆資 料時,會在單號欄自動顯示目前最新單號,而且其它欄空白給user輸入。 ==>我想吾兄應該已經解決了『有序單號』這個問題了吧。 StorProc、table相依性、想過用fk, trigger等方式來維持 ==>其實可能不要如此複雜。依小弟淺見,StorProc會妨礙你的AP的移殖力的,除了特殊理由外, ==> 還是少用。用trig來維持Table相依性,有時反而會綁死你的系統,如果過了段時間,您發覺 ==> 您的DB-Stru設計錯了﹝這很常見﹞或您的出錢大爺換了想法或變了規格,您的系統會很難 ==> 修正。反正AP是您寫的,在AP中,您就是天皇老子,自己控制好不就得了嗎? ==>Trig是好東西,不過DB與系統安全不應該只由Trig來維持。 ==>通常一個由無到有的系統是最難最痛苦的,可能要花上好幾年時間才能開發出來。系統開發與 ==> 維持,通常可能必需包含一、二十萬行的DLL/Package/Class。日常大部份的工作多為打字練 ==> 習,拉拉元件,召喚已寫好的Func/Class,只有不到5%才可勉強可稱上有創造力的部份。 ==>純是聊聊,給吾兄加油。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2011-01-23 22:19:25, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |