kqModule.bas
上传用户:djzm888
上传日期:2013-02-15
资源大小:867k
文件大小:18k
源码类别:

其他数据库

开发平台:

Visual Basic

  1. Attribute VB_Name = "kqMod"
  2. Public gDataBase As Database
  3. Public gTitle As String
  4. Public gMaxDay  As Integer
  5. Public Const gMAXITEM = 999
  6. Public Const gLATETIME = "07:55"
  7. Public Const gSTRPWD = "wsh2000"
  8. Public gMainDbName As String
  9. Public gLoginGrade As Integer
  10. Public gLoginName As String
  11. Public gPlanTableName As String
  12. Public Const gQRY = "Qry"
  13. Public gPlanQryName As String
  14. Public Const gRELEMPLOYEEPLAN = "EmployeePlan"
  15. Public Const gRELSHIFTPLAN = "ShiftPlan"
  16. Public gRelEmp As String
  17. Public gRelShift As String
  18. Public gOwnName As String
  19. Public gOwnAddress As String
  20. Public gOwnPhone As String
  21. Public gOwnFax As String
  22. Public gOwnPost As String
  23. Public gOwnOwner As String
  24. Public Const GSHIFTRESTID = 1 '休息
  25. Public Const GSHIFTLEAVEID = 2 '请假
  26. Public Const GSHIFTEVECTIONID = 3 '出差
  27. Public Const GSHIFTMONEYID = 4 '有薪假期
  28. Public Const GSHIFTRESTSTR = "休息"
  29. Public Const GSHIFTLEAVESTR = "请假"
  30. Public Const GSHIFTEVECTIONSTR = "出差"
  31. Public Const GSHIFTMONEYSTR = "有薪假期"
  32. Public Const GSHIFTRESTNAME = "*" '休息
  33. Public Const GSHIFTLEAVENAME = "#" '请假
  34. Public Const GSHIFTEVECTIONNAME = "@" '出差
  35. Public Const GSHIFTMONEYNAME = "$" '有薪假期
  36. Public Const gNOSHIFT = 0
  37. Public Const gNOSHIFTNAME = "未排班"
  38. Public Const gNOTINWORK = "旷工"
  39. Public Const gWORKLATE = "迟到"
  40. Public Const gNORMALKQSTR = "正常出勤"
  41. Public Const gALLDEPTNAME = "所有部门"
  42. Type OwnerShift
  43.     ID As Integer
  44.     ShiftName As String
  45.     Note As String
  46. End Type
  47. Public aInnerShift(1 To 4) As OwnerShift
  48. Type KQTemp
  49.     WorkNo As String
  50.     KqDate As String
  51.     KqTime As String
  52. End Type
  53. '----card status
  54. Public Const gNoCard = 0
  55. Public Const gHasCard = 1
  56. Public Const gMissCard = 2
  57. Public gPosNumber  As Integer
  58. Public gCommPort As Integer
  59. Public Type ItemStruc
  60.     ID As Integer
  61.     Name As String
  62. End Type
  63. Public Const mstrOpenCommErr = "无法打开串口!"
  64. Global aDepartment() As ItemStruc
  65. Global aTitle() As ItemStruc
  66. Global aLeaveType() As ItemStruc
  67. '*****编辑按钮索引
  68. Public Const gCMDAPPEND = 0
  69. Public Const gCMDSAVE = 1
  70. Public Const gCMDEDIT = 2
  71. Public Const gCMDDELETE = 3
  72. Public Const gCMDQUERY = 4
  73. Public Const gCMDRETURN = 5
  74. 'Private Const mRefresh = 6
  75. Public Const gCMDEDITNORMAL = 7 '正常的cmdEdit的状态
  76. Public Const gCMDEDITCANCEL = 8 '取消添加后刷新按钮
  77. '*****编辑按钮动态更新字串
  78. Public Const gSTRAPPEND = "添加"
  79. Public Const gSTRCANCEL = "取消"
  80. Public Const gSTRMODIFY = "修改"
  81. Public Const gSTRRESET = "还原"
  82. Global gUserID As String
  83. Const mMsg1 = "班次初始化有误,系统不能正常运行!"
  84. '区分从frmMDI进入frmMain常数
  85. Public Const gMAINCOLLECT = 0
  86. Public Const gMAINLEAVE = 1
  87. Public Const gMAINABSENT = 2
  88. Const modMsg2 = "新的月份已开始,本月是否沿用上月的排班表?"
  89. Const modMsg3 = "欢迎您进入新月份的排班!"
  90. Public Const gMsg3 = "该名称已经存在,请您换个名称!!"
  91. Public Const gMsg4 = "请选择要删除的记录!!"
  92. Public Const gMsg5 = "抱歉,保存未成功!"
  93. Public Const gMsg6 = "抱歉,删除未成功!"
  94. Public Const gMsg7 = "抱歉,添加未成功!"
  95. Public Const gMsg8 = "数据有改动,要保存吗?"
  96. Public Const gMsg9 = "恭喜,保存成功!!"
  97. Public Const gMsg10 = "您确定要删除该条记录吗?"
  98. Public Const gMsg11 = "请准备好打印机,按[确定]开始打印..."
  99. Public Const gMsg12 = "抱歉,打印未成功!"
  100. Public Function CreateATable(TableName As String) As Boolean
  101.     Dim Sql As String
  102.     Dim strPrevTableName As String
  103.     Dim strPrevMonth As String
  104.     Dim strPrevYear As String
  105.     Dim blnCreateNew As Boolean
  106.     Dim HasThisTD As Boolean
  107.     
  108.     On Error GoTo CreateErr
  109.     HasThisTD = False
  110.     strPrevYear = Year(Date)
  111.     strPrevMonth = Month(Date) - 1
  112.     If Val(strPrevMonth) = 0 Then
  113.         strPrevYear = Val(strPrevYear) - 1
  114.         strPrevMonth = 12
  115.     End If
  116.     strPrevTableName = Right(strPrevYear, 2) & strPrevMonth
  117.     
  118.     HasThisTD = HasThisTable(strPrevTableName)
  119.     blnCreateNew = True
  120.     If HasThisTD Then
  121. '        If MsgBox(modMsg2, vbQuestion + vbYesNo, gTitle) = vbYes Then '是否沿用
  122. '            Sql = "select * into " & TableName & " from " & strPrevTableName
  123. '            gDataBase.Execute Sql
  124. '            Sql = "delete * from " & TableName
  125. '            gDataBase.Execute Sql
  126. '            blnCreateNew = False
  127. '        Else
  128.             MsgBox modMsg3, vbInformation, gTitle
  129. '        End If
  130.     End If
  131.     If blnCreateNew Then
  132.         Sql = "select * into " & TableName & " from EmptyPlan"
  133.         gDataBase.Execute Sql
  134.     End If
  135.     
  136.     '创建关系
  137.     Dim Rel As Relation
  138.     Dim RelName As String
  139.     Dim HasRel As Boolean
  140.     
  141.     RelName = gRelShift
  142.     HasRel = HasThisRelation(RelName)
  143.     
  144.     If Not HasRel Then 'create relation
  145.         Set Rel = gDataBase.CreateRelation(RelName)
  146.         With Rel
  147.             .Table = "Shift"
  148.             .ForeignTable = TableName
  149.             .Fields.Append .CreateField("ID")
  150.             .Fields("ID").ForeignName = "F_Shift"
  151.             gDataBase.Relations.Append Rel
  152.         End With
  153.     End If
  154.     
  155.     Set Rel = Nothing
  156.     HasRel = False
  157.     RelName = gRelEmp
  158.     HasRel = HasThisRelation(RelName)
  159.     If Not HasRel Then
  160.         Set Rel = gDataBase.CreateRelation(RelName)
  161.         With Rel
  162.             .Table = "Employee"
  163.             .ForeignTable = TableName
  164.             .Fields.Append .CreateField("WorkNo")
  165.             .Fields("WorkNo").ForeignName = "WorkNo"
  166.             gDataBase.Relations.Append Rel
  167.         End With
  168.     End If
  169.     Set Rel = Nothing
  170.     
  171. '    Dim QD As QueryDef
  172.     Dim QDName As String
  173.     Dim HasThisQry As Boolean
  174.     QDName = gPlanQryName
  175.     HasThisQry = HasThisQuery(QDName)
  176.     If Not HasThisQry Then
  177.         Set QD = New QueryDef 'PARAMETERS DeptID Short;
  178.         QD.Sql = "select a.Name,a.DeptID," _
  179.             & "b.WorkNo," _
  180.             & "b.F_Day,c.ShiftName,c.ID" _
  181.             & " from Employee a," _
  182.             & TableName & " b,Shift c" _
  183.             & " where a.WorkNo=b.WorkNo " _
  184.             & "and b.F_Shift=c.ID and a.F_DelFlag=" & gFALSE _
  185.             & " order by b.WorkNo"
  186.         QD.Name = QDName
  187.         gDataBase.QueryDefs.Append QD
  188.     End If
  189.     QD.Close
  190.     Set QD = Nothing
  191.     CreateATable = True
  192.     Exit Function
  193. CreateErr:
  194.     Err.Clear
  195.     CreateATable = False
  196.     Exit Function
  197. End Function
  198. Public Function HasThisQuery(QryName As String) As Boolean
  199.     Dim QD As QueryDef
  200.     For Each QD In gDataBase.QueryDefs
  201.         If QD.Name = QryName Then
  202.             HasThisQuery = True
  203.             Exit Function
  204.         End If
  205.     Next
  206.     HasThisQuery = False
  207. End Function
  208. Public Function HasThisRelation(RelName As String) As Boolean
  209.     Dim Rel As Relation
  210.     For Each Rel In gDataBase.Relations
  211.         If Rel.Name = RelName Then
  212.             HasThisRelation = True
  213.             Exit Function
  214.         End If
  215.     Next
  216.     HasThisRelation = False
  217. End Function
  218. Function AsciiToVal(nAscii As Byte)
  219.   Select Case UCase(nAscii)
  220.   Case 48 To 57: AsciiToVal = nAscii - 48
  221.   Case 65 To 70: AsciiToVal = nAscii - 55
  222.   Case 97 To 102: AsciiToVal = nAscii - 87
  223.  End Select
  224. End Function
  225. Public Sub Main()
  226.     If App.PrevInstance Then Exit Sub
  227.     Dim Str As String
  228.     ChDrive Mid(App.Path, 1, 2)
  229.     ChDir App.Path
  230.     
  231.     GetRegister
  232.     gTitle = "考勤系统"
  233.     gMaxDay = GetMaxDayInAMonth(Year(Date), Month(Date))
  234.     gUserID = "Wsh"
  235.     Str = App.Path + "datakq.mdb"
  236.     gMainDbName = Str
  237.     On Error GoTo OpenErr
  238.     If Dir(Str) <> Empty Then
  239.         Set gDataBase = Workspaces(0).OpenDatabase(Str, False, False, ";pwd=" & gSTRPWD)
  240.     Else
  241.         MsgBox "找不到数据库!请您检查一下您的数据库路径!!", , gTitle
  242.         End
  243.     End If
  244.     
  245.     SetPlanTableName
  246.     
  247.     IniPort
  248.     IniItem "Department", aDepartment()
  249.     IniItem "LeaveType", aLeaveType()
  250.     IniItem "Title", aTitle()
  251.     IniShift
  252.     
  253.     aDepartment(0).Name = gALLDEPTNAME
  254.     aLeaveType(0).Name = "所有请假类型"
  255.     aTitle(0).Name = "所有职务"
  256.     
  257.     frmSplash.Show
  258.     'frmMonth.Show
  259.     'frmLookMan.Show 1
  260.     'frmEmploy.Show 1
  261.     'frmPlan.Show
  262.     
  263.     Exit Sub
  264. OpenErr:
  265.     MsgBox Err.Description, , gTitle
  266.     Err.Clear
  267.     EndSystem
  268. End Sub
  269. Private Sub IniPort()
  270.     gPosNumber = 1
  271.     gCommPort = 0
  272. End Sub
  273. Public Sub SetPlanTableName()
  274.     gPlanTableName = Right(Year(Date), 2) & Month(Date)
  275.     gPlanQryName = gQRY & gPlanTableName
  276.     gRelEmp = Trim(gPlanTableName) & gRELEMPLOYEEPLAN
  277.     gRelShift = Trim(gPlanTableName) & gRELSHIFTPLAN
  278. End Sub
  279. Private Sub IniShift()
  280.     With aInnerShift(1)
  281.         .ID = GSHIFTRESTID
  282.         .ShiftName = GSHIFTRESTNAME
  283.         .Note = GSHIFTRESTSTR
  284.     End With
  285.     
  286.     With aInnerShift(2)
  287.         .ID = GSHIFTLEAVEID
  288.         .ShiftName = GSHIFTLEAVENAME
  289.         .Note = GSHIFTLEAVESTR
  290.     End With
  291.     
  292.     With aInnerShift(3)
  293.         .ID = GSHIFTEVECTIONID
  294.         .ShiftName = GSHIFTEVECTIONNAME
  295.         .Note = GSHIFTEVECTIONSTR
  296.     End With
  297.     
  298.     With aInnerShift(4)
  299.         .ID = GSHIFTMONEYID
  300.         .ShiftName = GSHIFTMONEYNAME
  301.         .Note = GSHIFTMONEYSTR
  302.     End With
  303.     
  304.     Dim Rst As Recordset
  305.     Dim i As Integer
  306.     Dim Sql As String
  307.     Dim IsToDelete As Boolean
  308.     Dim isToAdd As Boolean
  309.     On Error GoTo ShiftErr
  310.     For i = 1 To UBound(aInnerShift)
  311.         With aInnerShift(i)
  312.             IsToDelete = False
  313.             isToAdd = True
  314.             Sql = "Select * from Shift where ID=" & .ID
  315.             Set Rst = gDataBase.OpenRecordset(Sql, dbOpenSnapshot)
  316.             If Rst.RecordCount > 0 Then
  317.                 If Rst!ShiftName <> Trim(.ShiftName) Then
  318.                     IsToDelete = True
  319.                 Else
  320.                     isToAdd = False
  321.                 End If
  322.             End If
  323.             Rst.Close
  324.             Set Rst = Nothing
  325.             If IsToDelete Then
  326.                 Sql = "delete * from Shift where ID=" & .ID
  327.                 gDataBase.Execute Sql
  328.             End If
  329.             If isToAdd Then
  330.                 Sql = "Insert into Shift (ID,ShiftName) values(" & .ID _
  331.                     & ",'" & .ShiftName & "')"
  332.                 gDataBase.Execute Sql
  333.             End If
  334.         End With
  335.     Next
  336.     Exit Sub
  337. ShiftErr:
  338.     Err.Clear
  339.     MsgBox mMsg1, vbExclamation, gTitle
  340.     EndSystem
  341. End Sub
  342. Public Sub EndSystem()
  343.     If Not gDataBase Is Nothing Then
  344.         gDataBase.Close
  345.         Set gDataBase = Nothing
  346.     End If
  347.     Dim Fr As Form
  348.     For Each Fr In Forms
  349.         Unload Fr
  350.     Next
  351. End Sub
  352. Private Sub IniItem(t_table As String, aArray() As ItemStruc)
  353.     ReDim aArray(0)
  354.     aArray(0).ID = gMAXITEM
  355.     
  356.     Dim Rst As Recordset
  357.     Dim i As Integer
  358.     Dim isSame As Boolean
  359.     
  360.     On Error GoTo ErrHandle
  361.     Set Rst = gDataBase.OpenRecordset("select * from " _
  362.         & Trim(t_table) & " Where F_DelFlag=" & gFALSE _
  363.         & " order by ID", dbOpenSnapshot)
  364.     
  365.     While Not Rst.EOF
  366.         isSame = False
  367.         For i = 0 To UBound(aArray)
  368.             If Rst!ID = aArray(i).ID Then
  369.                 isSame = True
  370.                 Exit For
  371.             End If
  372.         Next
  373.         If Not isSame Then
  374.             ReDim Preserve aArray(UBound(aArray) + 1)
  375.             With aArray(UBound(aArray))
  376.                 .ID = Rst!ID
  377.                 .Name = IIf(IsNull(Rst!Name), "", Trim(Rst!Name))
  378.             End With
  379.         End If
  380.         Rst.MoveNext
  381.     Wend
  382.     Rst.Close
  383.     Set Rst = Nothing
  384.     Exit Sub
  385. ErrHandle:
  386.     Dim er As Error
  387.     Dim MsgStr As String
  388.     For Each er In Errors
  389.         MsgStr = MsgStr & er.Description & er.Number & vbCrLf
  390.     Next
  391.     MsgBox MsgStr, , gTitle
  392.     Resume Next
  393. End Sub
  394. Public Sub RefreshButton(cmdEdit As Object, Optional intActionAfter As Integer = gCMDEDITNORMAL)
  395.     Dim i As Integer
  396.     Select Case intActionAfter
  397.         Case gCMDAPPEND
  398.             For i = 0 To cmdEdit.Count - 2
  399.                 With cmdEdit(i)
  400.                     Select Case i
  401.                         Case gCMDSAVE, gCMDRETURN, gCMDAPPEND
  402.                             If Not .Enabled Then .Enabled = True
  403.                         Case gCMDEDIT, gCMDDELETE, gCMDQUERY
  404.                             If .Enabled Then .Enabled = False
  405.                     End Select
  406.                 End With
  407.             Next
  408.         Case gCMDEDITNORMAL
  409.             For i = 0 To cmdEdit.Count - 2
  410.                 With cmdEdit(i)
  411.                     Select Case i
  412.                         Case gCMDAPPEND, gCMDQUERY, gCMDRETURN
  413.                             If Not .Enabled Then .Enabled = True
  414.                         Case gCMDSAVE, gCMDEDIT, gCMDDELETE
  415.                             If .Enabled Then .Enabled = False
  416.                     End Select
  417.                 End With
  418.             Next
  419.         Case gCMDEDIT
  420.             For i = 0 To cmdEdit.Count - 2
  421.                 With cmdEdit(i)
  422.                     Select Case i
  423.                         Case gCMDSAVE, gCMDEDIT
  424.                             If Not .Enabled Then .Enabled = True
  425.                         Case gCMDAPPEND, gCMDDELETE, gCMDQUERY, gCMDRETURN
  426.                             If .Enabled Then .Enabled = False
  427.                     End Select
  428.                 End With
  429.             Next
  430.         Case gCMDEDITCANCEL
  431.             If cmdEdit(gCMDSAVE).Enabled Then cmdEdit(gCMDSAVE).Enabled = False
  432.     End Select
  433. End Sub
  434. Public Sub ChangeBackColor(cn As Control, isEdit As Boolean)
  435.     If isEdit Then
  436.         cn.BackColor = vbWhite
  437.     Else
  438.         cn.BackColor = &H8000000F
  439.     End If
  440. End Sub
  441. Public Sub ClipToGrid(msfGrid As MSFlexGrid, ClipStr As String, intRows As Integer, intCols As Integer)
  442.     With msfGrid
  443.         On Error GoTo ClipErr
  444.         .Rows = .FixedRows
  445.         If intRows > .FixedRows Then
  446.             If .Redraw Then .Redraw = False
  447.             .Rows = intRows
  448.             .Cols = intCols
  449.             .row = .FixedRows
  450.             .col = .FixedCols
  451.             .RowSel = .Rows - 1
  452.             .ColSel = .Cols - 1
  453.             .Clip = ClipStr
  454.             .row = .FixedRows
  455.             .col = 0
  456.             .Redraw = True
  457.             .RowHeightMin = 300
  458.         End If
  459.     End With
  460.     Exit Sub
  461. ClipErr:
  462.     MsgBox Err.Description, vbExclamation, gTitle
  463.     Err.Clear
  464. End Sub
  465. Public Function HasThisTable(TableName As String) As Boolean
  466.     Dim TD As TableDef
  467.     For Each TD In gDataBase.TableDefs
  468.         If TD.Name = TableName Then
  469.             HasThisTable = True
  470.             Exit Function
  471.         End If
  472.     Next
  473.     HasThisTable = False
  474. End Function
  475. Public Function CreateAllRecord(TableName As String) As Boolean
  476.     Dim intEmp As Integer
  477.     Dim intDay As Integer
  478.     Dim Rst As Recordset
  479.     Dim strWorkNo As String
  480.     Dim bytDay As Byte
  481.     Dim bytShift As Byte
  482.     Dim Sql As String
  483.     
  484.     bytShift = gNOSHIFT '缺省的 无班次
  485.     
  486.     On Error GoTo CreateRecErr
  487.     Set Rst = gDataBase.OpenRecordset("select WorkNo from Employee" _
  488.         & " where F_DelFlag=" & gFALSE, dbOpenSnapshot)
  489.         
  490.     While Not Rst.EOF
  491.         strWorkNo = Trim(Rst!WorkNo)
  492.         For intDay = 1 To gMaxDay
  493.             bytDay = intDay
  494.             Sql = "Insert into " & TableName & _
  495.                 " (WorkNo,F_Day,F_Shift) values ('" _
  496.                 & strWorkNo & "'," & bytDay & "," & bytShift & ")"
  497.             gDataBase.Execute Sql
  498.         Next
  499.         Rst.MoveNext
  500.     Wend
  501.     
  502.     Rst.Close
  503.     Set Rst = Nothing
  504.     CreateAllRecord = True
  505.     Exit Function
  506. CreateRecErr:
  507.     Err.Clear
  508.     CreateAllRecord = False
  509. End Function
  510. Public Function CreatePlanTable() As Boolean
  511.     Dim strTableName As String
  512.     Dim HasThisTD As Boolean
  513.     Dim HasRecord As Boolean
  514.     Dim TD As TableDef
  515.     Dim Rst As Recordset
  516.     
  517.     strTableName = gPlanTableName
  518.     
  519.     HasThisTD = HasThisTable(strTableName)
  520.     
  521.     If Not HasThisTD Then '无此表
  522.         If Not CreateATable(strTableName) Then GoTo IniErr
  523.     End If
  524.     
  525.     Set Rst = gDataBase.OpenRecordset(strTableName)
  526.     If Rst.RecordCount > 0 Then HasRecord = True
  527.     Rst.Close
  528.     Set Rst = Nothing
  529.     
  530.     If Not HasRecord Then '无记录
  531.        If Not CreateAllRecord(strTableName) Then GoTo IniErr
  532.     End If
  533.     
  534.     CreatePlanTable = True
  535.     Exit Function
  536. IniErr:
  537.     CreatePlanTable = False
  538.     Exit Function
  539. End Function
  540. Public Sub GetPosToCbo(tmpCbo As ComboBox)
  541.     Dim mSql As String
  542.     Dim mRst As Recordset
  543.     
  544.     mSql = "select * from T_Pos order by PosNo"
  545.     Set mRst = gDataBase.OpenRecordset(mSql)
  546.     Dim Str As String
  547.     tmpCbo.Clear
  548.     While Not mRst.EOF
  549.         Str = IIf(IsNull(mRst!PosName), "", Trim(mRst!PosName))
  550.         tmpCbo.AddItem Str
  551.         tmpCbo.ItemData(tmpCbo.NewIndex) = mRst!PosNo
  552.         mRst.MoveNext
  553.     Wend
  554.     If tmpCbo.ListCount > 0 Then tmpCbo.ListIndex = 0
  555.     mRst.Close
  556.     Set mRst = Nothing
  557. End Sub
  558. Public Function IsNormalKq(IntShift As Integer, strWorkNo As String, strDate As String, strKqTime As String) As Boolean
  559.     Dim sKqTime As String
  560.     Dim tmpStr As String
  561.     Dim mSql As String
  562.     Dim mRst As Recordset
  563.     
  564.     strKqTime = Empty
  565.     mSql = "select F_1On from Shift where ID=" & IntShift _
  566.         & " and F_1OnIsKq=" & gTRUE '暂时只适合A段要求考勤的班次
  567.         '只要在KqHistory中添加F_Section(是哪段考勤)
  568.     Set mRst = gDataBase.OpenRecordset(mSql, dbOpenSnapshot)
  569.     If mRst.RecordCount > 0 Then
  570.         sKqTime = IIf(IsNull(mRst!F_1On), "", Trim(mRst!F_1On))
  571.     Else
  572.         IsNormalKq = False
  573.         Exit Function
  574.     End If
  575.     mRst.Close
  576.     Set mRst = Nothing
  577.     
  578.     If sKqTime = Empty Then
  579.         IsNormalKq = False
  580.         Exit Function
  581.     End If
  582.     
  583.     mSql = "select KqTime from KqHistory " _
  584.         & " where KqDate='" & strDate & "'" _
  585.         & " and WorkNo='" & strWorkNo & "'" _
  586.         & " order by KqTime"
  587.     Set mRst = gDataBase.OpenRecordset(mSql, dbOpenSnapshot)
  588.     If mRst.RecordCount > 0 Then
  589.         tmpStr = IIf(IsNull(mRst!KqTime), "", Trim(mRst!KqTime))
  590.     End If
  591.     mRst.Close
  592.     Set mRst = Nothing
  593.     
  594.     If tmpStr = Empty Then
  595.         IsNormalKq = False
  596.         'Exit Function
  597.     Else
  598.         If sKqTime < tmpStr Then
  599.             IsNormalKq = False
  600.         Else
  601.             IsNormalKq = True
  602.         End If
  603.     End If
  604.     strKqTime = tmpStr
  605. End Function