设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2379|回复: 18
打印 上一主题 下一主题

[宏/菜单/工具栏] 單連接,非綁定窗體,同時涉及多基表數據處理,高深探討

[复制链接]
跳转到指定楼层
1#
发表于 2002-6-13 18:58:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
各位朋友:有沒有想過這樣一個問題:(這是一個物流運作的完整運用,即有參考價值)
在一個物流運作系統中,有六個表,功能分別如下:
先是采購后存倉分為表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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
19#
发表于 2003-5-17 01:11:00 | 只看该作者
up
18#
发表于 2003-4-15 19:32:00 | 只看该作者
up
17#
发表于 2002-6-20 01:27:00 | 只看该作者
一、拦得住拦不住,只需几行代码,动手试一下即可知道。
二、要想保持数据完整性,对多表的关联操作除了用事务以外,想不出还能有什么别的方法。
三、非绑定窗体只适合处理单一窗体,即每次只处理一条记录,否则,还是用绑定窗体的好。比如先头你的那个窗体,你得在窗体上预设(N = 记录数 * 字段数)个未绑定控件才能同时显示多条记录。
四、至于哪个操作能够回滚,得看它处在哪个级别的事务中,你在触发事件中开启一个事务,当然只能回滚此事务中的所有操作。
16#
 楼主| 发表于 2002-6-19 20:19:00 | 只看该作者
祥細如下:
如果表A 表B 表C 其中表A為動態庫存,表B為調貨表,表c為第一次入庫備份。
現在是想在表B中實現對另兩個表的操作.
15#
 楼主| 发表于 2002-6-19 20:15:00 | 只看该作者
freemanager好方法,我謝指點,現我正向您說說方向努力。
便不知,在幫定窗體中,是否可以准確攔住insert 和update操作。
因access在幫它窗體時,中仍兩個事件可以用在引處.就是before/after insert or update
但我現在要在插入同量判斷另一表中的值是否小于現在所插入的值,
同時在更新時,我要從另一表的備份值中,減去正更新表中的值,同時更新另一表。
這樣同是涉即三個表的操作,是不是只可是用事務來處理?
會不會befor/after insert or update事件,攔不住哪?
是用幫定窗體,還是用非邦定窗體好哪?
還有,如果用觸發器,實現的快一些。(因我較熟悉,而VBA只剛起步)
但在觸發器中,為何不可以取消操作時,同時取消操作已觸發的表。
-------------------------------------------------------------
再談觸發器,在獨發時,會同時產生兩個虛表inserted,deleted.
它們分別存來的是待操作的值。(比如在update時,兩個虛表都存在,在insert 或delete時都只是對應的虛表才存在)
也就是說,可不可以用虛表的值,來作判斷,來同步操作獨表時的基表。
freemanager可否再談談。從您哪里學了不少經驗,多謝。
14#
发表于 2002-6-19 19:44:00 | 只看该作者
首先得给你点小小的忠告:你这种不区分大小写的代码写作习惯最好改改。不管是在自己写程序还是在发贴的时候都一样。
    你这个问题大概是这样的:由某个表的数据插入---触发---更新另一个表(大概是即时库存表之类的东东吧?),当更新后的值<0时,即取消更新,但你却不能取消前面触发此动作的因事件。
    这个问题最简单的解决方法是在前端用BeforeUpdate事件即行判断,即用这个还未写入库的数量与库存表进行比对,如果超出现有的库存,即显示提示并取消操作。这个方法可以叫做
     ----   拦
另外的方法有些复杂,这里只给些线索自己去研究:
   我们开发应用程序前端的时候,大多使用的记录集之LockType都是使用:adLockBatchOptimistic。即缓存更新,在前端所有的操作都只是写入到缓存中,直到显式的调用UpDateBatch方法,才真正将变化提交给服务器。
   将这种方法与事务处理结合起来,我们几乎可以控制所有我们可以预见到的错误。
   不过得说明一点的是,第二种方法还不能说是方法,对ADP来说,只能说是一种思路,因为本人近来多用Delphi来写前端,这些个方法具体的实现有时候很容易混淆,未经实验(指用ADP)。
13#
 楼主| 发表于 2002-6-19 17:26:00 | 只看该作者

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编辑过]

12#
发表于 2002-6-19 02:43:00 | 只看该作者

把你那东西发上来

把你那东西发上来,我看看,实在上传不了,发我信箱好了!
11#
 楼主| 发表于 2002-6-19 02:21:00 | 只看该作者
這個問題,再也沒人研究嗎?
如果不是我記起,好像就是石沉大海了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-21 20:46 , Processed in 0.094777 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表