Office中国论坛/Access中国论坛

标题: 單連接,非綁定窗體,同時涉及多基表數據處理,高深探討 [打印本页]

作者: HG    时间: 2002-6-13 18:58
标题: 單連接,非綁定窗體,同時涉及多基表數據處理,高深探討
各位朋友:有沒有想過這樣一個問題:(這是一個物流運作的完整運用,即有參考價值)
在一個物流運作系統中,有六個表,功能分別如下:
先是采購后存倉分為表trade_wh_ins(存倉單)和trade_wh_ins_line(存倉單祥情)
然后在存倉的同時,備份存倉祥情的存倉項號和存倉數量為表trade_wh_ins_line_bak
接著是調貨處理分為表trade_request(調貨單)和trade_request_line(調貨單祥情)
其中只有表trade_request_line表中的部分列比如:
request_pt(須求量),wh_ins_line_no(預調整的存倉項號)參于運算.
其運算原理如下:在調貨的過程中,要事實的從存倉祥情中扣除須求量,這樣就保証了存倉表中的永遠都是真實的存倉數值.
然后,由于調貨單,在每次調貨的時候,都可以多提貨,以防萬一,
由此表trade_request_line_more(多貨返倉)表,就產生了,在每次交易后,都把多出的產品,重新返倉,在原真實存倉的基礎上,再次累加上返倉數,即得總的真實庫存。
-----------------------------------------------------------------------------
原本小弟是用SQL的觸發口器和存儲過程來處理的,
但現在遇到一個很難解決的問題:請見
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&RootID=5877&ID=5877
所以小弟,預更改程式,用VBA+ADO來處理,各個表之間規則的運算,
但小弟水乎太差,望高手指點。
_____________________________________________________
思路如下:
先建立一個窗表,(非邦定)內容為存倉祥情,
然來編程來決定數據來源,但弟初次試用。
代碼如下:

Private Sub Form_Open(Cancel As Integer)
On Error GoTo err_this
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strsql As String

Set rst = New ADODB.Recordset
Set conn = CurrentProject.Connection
strsql = "select * from trade_request_line"

rst.Open strsql, conn

Do Until rst.EOF
  Me.request_line_no = rst!request_line_no
  Me.request_no = rst!request_no
  Me.wh_ins_line_no = rst!wh_ins_line_no
  Me.request_line_pt = rst!request_line_pt
  rst.MoveNext
Loop

rst.Close
Set rst = Nothing

exit_sub:
Exit Sub
err_this:
MsgBox Err.Description
Resume exit_sub

End Sub
用此來決定數據源。
但是不知為何不能想邦定窗體哪樣,總是出現的是數據源的最后一條記錄。
而不是出現數據清單。如:
---------------------
col1   col2         col3      col4
1      2             3         4
2      2             2          1
3      3             1          2
。。。。。。。。。。。。
而現在的情況是每次都只一條記錄出現,即最后一條
-----------------------------------------
col1       col2       col3      col4
3           3          1         2
前几條為何,不可出現,如上面列表
望各位版主指點。
----------------------------------
末完待續,有各計算處理
-------------------------------------------------------------------------
                                             同各位高手共同進步HG

作者: sdlhlsd    时间: 2002-6-13 19:17
标题: 你能否做一个动态库存跟踪表!
你是否要动态跟踪库存,若如此,你可以有一个库存余额表,当你在采购入库时,自动增加库存,当你在出货时自动扣减库存,你应有一个表存放有需求量,可分配量、库存量、已分配量等信息的临时表.我不太明白你现在的需求,可否说详细点!可能可给你提供一个好的解决方案!
作者: HG    时间: 2002-6-13 23:11
sdlhlsd
您好!
您說的哪么表,我都有,只不過名稱不同吧了
trade_wh_ins和trade_wh_ins_line合在一塊是一個完整的入庫清單。
當在彩購時,有一個新的彩購表.stock_order和stcok_order_line(彩購單和彩購祥情)
當在彩購完后,可以入庫,即可編程轉彩購量加上現有庫存為總庫存。
表trade_request和trade_request_line則為出庫表,和調整庫存用的基表.
如果已分配,則直接從庫存扣除須求量或調整量.
如果多出庫的可以返庫有表trade_request_line_more
如果返庫,則在現有庫存的基礎上增加返庫量.
----------------------------------------------------------------------------
因本不想在物流上涉及太多的表,所以就采用實時動態操作。
但現在的問題是,我如何彩用非邦定窗體,來操縱出庫祥情.
即每次在出庫或調整時,從入庫祥情中實時扣除所出數量,
即然我可以用存儲過程和觸發器達到效果,但解決方案不理想。
所以想用VBA+ADO編程來同步處理這兩個表,且在出庫時,若庫存不足,則給出提示,同時取消此操作。
---------------------------------------
有關物流的并非如此簡單,但我應一點一點解決方可,
所以請先指點指點目前所面對的問題,而大的方案我們可慢慢磋切。
多謝!


[此贴子已经被作者于2002-6-13 15:10:53编辑过]


作者: HG    时间: 2002-6-13 23:24
其實我的是個最精簡物流系統.
因本人的設計習慣,用最大的代碼,換最大的功能。
決償數據冗余,又打破長規,但是就要高度編程了。

作者: sdlhlsd    时间: 2002-6-14 01:17
标题: 能否把你的窗体发过来,我看一下!
能否把你的窗体发过来,我看一下!
应该没有问题的!我们经常这样做!
作者: HG    时间: 2002-6-14 02:23
我不會貼圖,也不會上傳文檔.
可不可以教我一下。
然后我就帖上去。?
作者: sdlhlsd    时间: 2002-6-14 02:40
标题: 将你的程序压缩后上传即可
将你的程序压缩后上传即可
作者: HG    时间: 2002-6-14 03:01
可不可以告訴我怎么貼圖,我把窗體貼上去。
因為我用的是ADP,上傳前端 是沒有用的。
只能貼圖了。
可以嗎?
作者: sdlhlsd    时间: 2002-6-14 03:45
标题: 你去下载一个抓图软件
你去下载一个抓图软件,去华军软件园
作者: HG    时间: 2002-6-14 19:00
還是上傳不上去,
窗體目標如上所示,別無他法。
我正想辦法哩,現在為此很困和。

作者: HG    时间: 2002-6-19 02:21
這個問題,再也沒人研究嗎?
如果不是我記起,好像就是石沉大海了。
作者: sdlhlsd    时间: 2002-6-19 02:43
标题: 把你那东西发上来
把你那东西发上来,我看看,实在上传不了,发我信箱好了!
作者: HG    时间: 2002-6-19 17:26
标题: ADP何去何從?之一.問ADP是什么,有什么用?
SDLHLSD如果您看到我的前端會罵我的,什么都沒有,因為我正在為此法而想辦法哪?
差不多一星期了,還是沒有想通,想來想去,好像除了觸發器很難作到。便觸發器又出現上述的問題,請見本貼的連接或我發表的哪篇用關觸發器的探討(連接為:http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&RootID=5877&ID=5877)
不是我小氣,而是現在無能力解決。
望熱心的網友,或高高手們拉一把小弟吧。快為此絕望 了。
555555555555555555555555555555555555555555555555555555555555555555555555555555555555


[此贴子已经被HG于2002-6-19 9:26:22编辑过]


作者: freemanager    时间: 2002-6-19 19:44
首先得给你点小小的忠告:你这种不区分大小写的代码写作习惯最好改改。不管是在自己写程序还是在发贴的时候都一样。
    你这个问题大概是这样的:由某个表的数据插入---触发---更新另一个表(大概是即时库存表之类的东东吧?),当更新后的值<0时,即取消更新,但你却不能取消前面触发此动作的因事件。
    这个问题最简单的解决方法是在前端用BeforeUpdate事件即行判断,即用这个还未写入库的数量与库存表进行比对,如果超出现有的库存,即显示提示并取消操作。这个方法可以叫做
     ----   拦
另外的方法有些复杂,这里只给些线索自己去研究:
   我们开发应用程序前端的时候,大多使用的记录集之LockType都是使用:adLockBatchOptimistic。即缓存更新,在前端所有的操作都只是写入到缓存中,直到显式的调用UpDateBatch方法,才真正将变化提交给服务器。
   将这种方法与事务处理结合起来,我们几乎可以控制所有我们可以预见到的错误。
   不过得说明一点的是,第二种方法还不能说是方法,对ADP来说,只能说是一种思路,因为本人近来多用Delphi来写前端,这些个方法具体的实现有时候很容易混淆,未经实验(指用ADP)。
作者: HG    时间: 2002-6-19 20:15
freemanager好方法,我謝指點,現我正向您說說方向努力。
便不知,在幫定窗體中,是否可以准確攔住insert 和update操作。
因access在幫它窗體時,中仍兩個事件可以用在引處.就是before/after insert or update
但我現在要在插入同量判斷另一表中的值是否小于現在所插入的值,
同時在更新時,我要從另一表的備份值中,減去正更新表中的值,同時更新另一表。
這樣同是涉即三個表的操作,是不是只可是用事務來處理?
會不會befor/after insert or update事件,攔不住哪?
是用幫定窗體,還是用非邦定窗體好哪?
還有,如果用觸發器,實現的快一些。(因我較熟悉,而VBA只剛起步)
但在觸發器中,為何不可以取消操作時,同時取消操作已觸發的表。
-------------------------------------------------------------
再談觸發器,在獨發時,會同時產生兩個虛表inserted,deleted.
它們分別存來的是待操作的值。(比如在update時,兩個虛表都存在,在insert 或delete時都只是對應的虛表才存在)
也就是說,可不可以用虛表的值,來作判斷,來同步操作獨表時的基表。
freemanager可否再談談。從您哪里學了不少經驗,多謝。
作者: HG    时间: 2002-6-19 20:19
祥細如下:
如果表A 表B 表C 其中表A為動態庫存,表B為調貨表,表c為第一次入庫備份。
現在是想在表B中實現對另兩個表的操作.

作者: freemanager    时间: 2002-6-20 01:27
一、拦得住拦不住,只需几行代码,动手试一下即可知道。
二、要想保持数据完整性,对多表的关联操作除了用事务以外,想不出还能有什么别的方法。
三、非绑定窗体只适合处理单一窗体,即每次只处理一条记录,否则,还是用绑定窗体的好。比如先头你的那个窗体,你得在窗体上预设(N = 记录数 * 字段数)个未绑定控件才能同时显示多条记录。
四、至于哪个操作能够回滚,得看它处在哪个级别的事务中,你在触发事件中开启一个事务,当然只能回滚此事务中的所有操作。
作者: wellbred    时间: 2003-4-15 19:32
up
作者: wellbred    时间: 2003-5-17 01:11
up





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3