clsBuys.cls
Upload User: czxfzx
Upload Date: 2015-02-25
Package Size: 749k
Code Size: 6k
Development Platform:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsBuys"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Collection" ,"clsBuy"
  16. Attribute VB_Ext_KEY = "Member0" ,"clsBuy"
  17. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  18. Option Explicit
  19. '局部变量,保存集合
  20. Private mCol As Collection
  21. Public Function Find(Optional lgnID As Long = -1, _
  22.                     Optional lngTypeId As Long = 0) As clsBuys
  23.   Dim rs As Recordset
  24.   Dim index As Long
  25.   Dim obj As clsBuy
  26.   
  27.   '按输入的参数查询,并返回一个集合类
  28.   Dim strSQL As String
  29.   
  30.   '构造SQL语句
  31.   strSQL = "Select * from Buy, Merchandise, MerchandiseType WHERE "
  32.   strSQL = strSQL & " M_TypeId_N = MT_ID_N AND B_MerchandiseId_N=M_ID_N "
  33.   If lgnID <> -1 Then
  34.     strSQL = strSQL & " AND B_ID_N=" & lgnID
  35.   End If
  36.   If lngTypeId <> 0 Then
  37.     strSQL = strSQL & " AND M_TypeId_N=" & lngTypeId
  38.   End If
  39.     
  40.   strSQL = strSQL & " AND B_ID_N>0"
  41.   
  42.   '清空当前集合
  43.   Me.Clear
  44.   Set rs = g_Conn.Execute(strSQL)
  45.   '往集合中添加查询结果
  46.   For index = 1 To rs.RecordCount
  47.     Set obj = New clsBuy
  48.     With obj
  49.       .ID = rs("B_ID_N").Value
  50.       .ProviderId = rs("B_ProviderId_N").Value        '供应商ID
  51.       .MerchandiseID = rs("B_MerchandiseId_N").Value  '商品ID
  52.       .StockDate = rs("B_StockDate_D").Value          '进货时间
  53.       .Deliver = rs("B_Deliver_S").Value              '送货人姓名
  54.       .Consignee = rs("B_Consignee_S").Value          '经手人姓名
  55.       .Count = rs("B_Count_N").Value                  '购入量
  56.       .StockPrice = rs("B_StockPrice_N").Value        '进货单价
  57.       .OperatorId = rs("B_OperatorId_S").Value        '操作员Id
  58.       .Remark = Trim(rs("B_Remark_R").Value)          '备注
  59.       .MerchName = Trim(rs("M_Name_S"))
  60.       .ProviderName = GetValueByID("Provider", "P_ID_N", .ProviderId, "P_Name_S")
  61.     End With
  62.     Me.AddEx obj
  63.     Set obj = Nothing
  64.     rs.MoveNext
  65.   Next index
  66.   
  67.   Set rs = Nothing
  68.   Set Find = Me
  69. End Function
  70. '统计各种商品的进货次数和进货总价格,并最后按进货总价格来排序,最多返回前nCount条记录
  71. Public Function FindStorage(Optional IsDesc As Boolean = True, _
  72.                       Optional nCount As Integer = 10) As clsBuys
  73.   Dim rs As Recordset
  74.   Dim index As Long
  75.   Dim obj As clsBuy
  76.   
  77.   '按输入的参数查询,并返回一个集合类
  78.   Dim strSQL As String
  79.   
  80.   Dim strOrder As String
  81.   If nCount <= 0 Then nCount = 10
  82.   strOrder = IIf(IsDesc, "DESC", "ASC")
  83.   
  84.   '构造SQL语句
  85.   strSQL = "Select M_ID_N, M_Name_S, MT_Name_S, "
  86.   strSQL = strSQL & " COUNT(B_Count_N) AS StockTimes, "
  87.   strSQL = strSQL & " SUM(B_StockPrice_N * B_Count_N) AS TotalPrice "
  88.   strSQL = strSQL & " FROM Buy, Merchandise, MerchandiseType "
  89.   strSQL = strSQL & " WHERE "
  90.   strSQL = strSQL & " M_TypeId_N = MT_ID_N AND B_MerchandiseId_N=M_ID_N "
  91.   strSQL = strSQL & " GROUP BY M_ID_N, M_Name_S, MT_Name_S "
  92.   
  93.   '清空当前集合
  94.   Me.Clear
  95.   Set rs = g_Conn.Execute(strSQL)
  96.   '排序
  97.   rs.Sort = "TotalPrice " & strOrder
  98.   '往集合中添加前nCount条查询结果
  99.   nCount = IIf(nCount < rs.RecordCount, nCount, rs.RecordCount)
  100.   For index = 1 To nCount
  101.     Set obj = New clsBuy
  102.     With obj
  103.       '此时ID属性中仅存用于区分的商品ID,而非Sell表中的ID
  104.       .ID = rs("M_ID_N").Value
  105.       .MerchName = Trim(rs("M_Name_S").Value)
  106.       .TypeName = Trim(rs("MT_Name_S").Value)
  107.       .StockTimes = rs("StockTimes").Value
  108.       .TotalPrice = rs("TotalPrice").Value
  109.     End With
  110.     Me.AddEx obj
  111.     Set obj = Nothing
  112.     rs.MoveNext
  113.   Next index
  114.   
  115.   Set rs = Nothing
  116.   Set FindStorage = Me
  117. End Function
  118. Public Sub AddEx(obj As clsBuy)
  119.   mCol.Add obj, "A" & obj.ID
  120.   '在加入对象是,最好同时加入其“KEY”属性
  121.   '“KEY”属性不可以是数字型,因此在前面随便加
  122.   '一个字母,此处加了一个“A”
  123. End Sub
  124. '清除集合中的全部元素
  125. Public Sub Clear()
  126.   '注意!在清除时必须倒序清除,否则要出错!
  127.   Dim i As Long
  128.   For i = mCol.Count To 1 Step -1
  129.     mCol.Remove i
  130.   Next i
  131. End Sub
  132. Public Function Add(ID As Long, Optional sKey As String) As clsBuy
  133.     '创建新对象
  134.     Dim objNewMember As clsBuy
  135.     Set objNewMember = New clsBuy
  136.     '设置传入方法的属性
  137.     objNewMember.ID = ID
  138.     If Len(sKey) = 0 Then
  139.         mCol.Add objNewMember
  140.     Else
  141.         mCol.Add objNewMember, sKey
  142.     End If
  143.     '返回已创建的对象
  144.     Set Add = objNewMember
  145.     Set objNewMember = Nothing
  146. End Function
  147. Public Property Get Item(vntIndexKey As Variant) As clsBuy
  148.     '引用集合中的一个元素时使用。
  149.     'vntIndexKey 包含集合的索引或关键字,
  150.     '这是为什么要声明为 Variant 的原因
  151.     '语法:Set foo = x.Item(xyz) or Set foo = x.Item(5)
  152.   Set Item = mCol(vntIndexKey)
  153. End Property
  154. Public Property Get Count() As Long
  155.     '检索集合中的元素数时使用。语法:Debug.Print x.Count
  156.     Count = mCol.Count
  157. End Property
  158. Public Sub Remove(vntIndexKey As Variant)
  159.     '删除集合中的元素时使用。
  160.     'vntIndexKey 包含索引或关键字,这是为什么要声明为 Variant 的原因
  161.     '语法:x.Remove(xyz)
  162.     mCol.Remove vntIndexKey
  163. End Sub
  164. Public Property Get NewEnum() As IUnknown
  165. Attribute NewEnum.VB_UserMemId = -4
  166. Attribute NewEnum.VB_MemberFlags = "40"
  167.     '本属性允许用 For...Each 语法枚举该集合。
  168.     Set NewEnum = mCol.[_NewEnum]
  169. End Property
  170. Private Sub Class_Initialize()
  171.     '创建类后创建集合
  172.     Set mCol = New Collection
  173. End Sub
  174. Private Sub Class_Terminate()
  175.     '类终止后破坏集合
  176.     Set mCol = Nothing
  177. End Sub