Office中国论坛/Access中国论坛

标题: 通过列表框统计一组记录之后将结果传递给窗体记录 [打印本页]

作者: popo559    时间: 2008-11-26 08:56
标题: 通过列表框统计一组记录之后将结果传递给窗体记录
1、双击左边列表框,添加商品到右边列表(并不需要记录这张列表,只是给操作员看着明白)
2、一个商品可被添加多次。比如商品AAAAA被双击了3次,在右边列表框里 要显示该商品数量为3,
3、同时计算所有商品总数以及总价格。
4、按“添加账单”键,所选商品总数以及总价录入"账目清单”,并自动将账目清单里“商品系列”赋值成“ABC系列",保存记录。

这个功能非常实用,苦于处于初学阶段,很多关键之处解决不了,先做了个架子,请高手指点指点代码怎么写.

先谢了.
作者: Henry D. Sy    时间: 2008-11-26 09:23
直接追加不是更方便

[ 本帖最后由 Henry D. Sy 于 2008-11-26 17:04 编辑 ]
作者: Henry D. Sy    时间: 2008-11-26 17:17
你的窗体也不知道有什么错误,一打开就出错,我把他删了

重做了一个,不知道是不是你所要求的那样??
  1. Private Sub Form_Load()
  2.     GetTotal
  3. End Sub

  4. Private Sub List0_DblClick(Cancel As Integer)

  5.     Dim rs As New ADODB.Recordset
  6.     Dim strSQL, SQL As String
  7.     Dim lngOldQty As Long
  8.     Dim curOldAmt As Currency

  9.     strSQL = "Insert into 账单(商品系列,数量,总价)values('" & Me.List0.Column(2) & "',1," _
  10.            & Me.List0.Column(3) & ")"
  11.     CurrentDb.Execute strSQL              '追加记录

  12.     SQL = "select * from 账单 where 商品系列='" & Me.List0.Column(2) & "' order by 编号"
  13.     rs.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  14.     If rs.RecordCount = 2 Then
  15.         lngOldQty = rs!数量
  16.         curOldAmt = rs!总价
  17.         rs.Delete                                    '合并记录
  18.         rs.MoveNext
  19.         rs!数量 = rs!数量 + lngOldQty
  20.         rs!总价 = rs!总价 + curOldAmt
  21.         rs.Update
  22.     End If
  23.     rs.Close
  24.     Set rs = Nothing
  25.     Me.List2.Requery
  26.     GetTotal
  27. End Sub




  28. Sub GetTotal()
  29.     Dim Qty As Long
  30.     Dim Amt As Currency
  31.     Dim I As Integer
  32.     For I = 1 To Me.List2.ListCount - 1             '统计数据
  33.         Qty = Qty + CLng(Me.List2.Column(2, I))
  34.         Amt = Amt + CCur(Me.List2.Column(3, I))
  35.     Next
  36.     Me.Text6 = Qty
  37.     Me.Text8 = Amt
  38. End Sub
复制代码

[ 本帖最后由 Henry D. Sy 于 2008-11-26 17:25 编辑 ]
作者: popo559    时间: 2008-11-26 18:51
谢谢啦,这对新手学习来说太好了
最后一点可能我说的不是很清楚,要求是把列表框汇总出来的结果传递到账单窗体内,如图
作者: Henry D. Sy    时间: 2008-11-26 20:15
其实你这个list2只是显示下数据,又簿输入数据,可以用汇总查询作为他的行来源,省去了记录合并的代码。

还是按你的要求办,
1. 将list2的行来源更改为
  1. SELECT 账单.编号, 账单.商品系列, 账单.数量, 账单.总价
  2. FROM 账单
  3. WHERE (((账单.商品系列) Not Like "abc系列"))
  4. ORDER BY 账单.商品系列;
复制代码
2. 增加更新abc系列的代码,更改如下(其他不变)
  1. Private Sub List0_DblClick(Cancel As Integer)

  2.     Dim rs As New ADODB.Recordset
  3.     Dim strSQL, SQL As String
  4.     Dim lngOldQty As Long
  5.     Dim curOldAmt As Currency

  6.     strSQL = "Insert into 账单(商品系列,数量,总价)values('" & Me.List0.Column(2) & "',1," _
  7.            & Me.List0.Column(3) & ")"
  8.     CurrentDb.Execute strSQL              '追加记录

  9.     SQL = "select * from 账单 where 商品系列='" & Me.List0.Column(2) & _
  10.           "' order by 编号"
  11.     rs.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  12.     If rs.RecordCount = 2 Then
  13.         lngOldQty = rs!数量
  14.         curOldAmt = rs!总价
  15.         rs.Delete                                    '合并记录
  16.         rs.MoveNext
  17.         rs!数量 = rs!数量 + lngOldQty
  18.         rs!总价 = rs!总价 + curOldAmt
  19.         rs.Update
  20.     End If
  21.     rs.Close
  22.     Set rs = Nothing
  23.     Me.List2.Requery
  24.     GetTotal
  25.     SQL = "Update 账单 set 数量=" & Me.Text6 & ",总价=" & Me.Text8 & _
  26.         " where 商品系列='abc系列'"
  27.     CurrentDb.Execute SQL
  28. End Sub
复制代码

[ 本帖最后由 Henry D. Sy 于 2008-11-26 20:19 编辑 ]
作者: popo559    时间: 2008-11-27 01:42
按照以上方法没有实现啊,请再看看
作者: Henry D. Sy    时间: 2008-11-27 08:11
原帖由 popo559 于 2008-11-27 01:42 发表
按照以上方法没有实现啊,请再看看


不会吧

[ 本帖最后由 Henry D. Sy 于 2008-11-27 08:47 编辑 ]
作者: gaofei186    时间: 2008-11-27 08:12
看看一下
作者: Henry D. Sy    时间: 2008-11-27 08:46
终于明白你的意思了
你是要追加一个汇总记录,而不仅仅是更新数量和总价。对吧?
附件更新在7楼,你看看是不是你要求的那样。
作者: cashiba    时间: 2008-11-27 18:14
终于明白你的意思了
作者: popo559    时间: 2008-11-30 23:58
谢谢几位, 我也用追加查询实现了,

把程序完善一点,就是右边 那个列表里面如果选错了或选多了,通过双击减掉一个商品(即数量-1,总价-1份,而不是把整个商品去掉)该怎么写.
作者: Henry D. Sy    时间: 2008-12-1 14:17
  1. Private Sub List2_DblClick(Cancel As Integer)
  2.     Dim lngA As Long
  3.     Dim strSQL As String
  4.     If Not IsNull(Me.List2) Then
  5.         lngA = Me.List2
  6.         If DLookup("数量", "账单", "编号=" & lngA) > 0 Then
  7.             strSQL = "update 账单 set 数量=数量-1,总价=总价-总价/数量 where 编号=" & lngA
  8.             CurrentDb.Execute strSQL
  9.             Me.List2.Requery
  10.             GetTotal
  11.         End If
  12.     End If
  13. End Sub
复制代码

作者: popo559    时间: 2008-12-1 18:57
多谢指点,研究一下了,直接用了删除查询。。




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