2014-10-16 70 views
1

下面是一個函數,我目前使用它從發票日期減去20天,然後將該日期移至週一(如果週末)。下一步是檢查該日期是否在假期表中,以及是否相應地調整日期。問題是我正在對30K以上的記錄運行此檢查,並且需要很長時間。有沒有更快的方法來完成這個相同的任務?提前致謝。從VB6檢查日期是否存在假期表中存取

Public Function PrintDate(TheDate As Date) As Date 
    Dim OfficeClosed   As Integer 
    Dim CheckDate   As Date 
    Dim QSDate    As String 
    Dim QS     As String 

OfficeClosed = False 

TheDate = DateAdd("d", -20, TheDate) 

      Select Case Weekday(TheDate) 
      Case 1 
       CheckDate = DateAdd("d", 1, TheDate) 
      Case 7 
       CheckDate = DateAdd("d", 2, TheDate) 
      Case Else 
       CheckDate = TheDate 
     End Select 

QSDate = CheckDate 

QS = "" 
QS = QS & "SELECT holidaydate " 
QS = QS & "FROM tbl_holidays " 


Set ado_objConn = New ADODB.Connection 

ado_objConn.ConnectionTimeout = 130 
ado_objConn.CommandTimeout = 130 

ado_objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & _ 
    gl_AutoFinance_Data_Loc & "';Persist Security Info=False" 

ado_objConn.Open 
Set ado_objRs8 = New ADODB.Recordset 
ado_objRs8.Open QS, ado_objConn, , , adCmdText 
    With ado_objRs8 
     If Not .EOF Then 
      .MoveFirst 
      While Not .EOF 

         If ado_objRs8.Fields(0) = QSDate Then 
          OfficeClosed = True 
         End If 
      .MoveNext 
      Wend 
     End If 

    End With 

Set ado_objRs8 = Nothing 
Set ado_objConn = Nothing 

If OfficeClosed = True Then 
     Select Case Weekday(CheckDate) 
      Case 2 
       PrintDate = DateAdd("d", 1, CheckDate) 
      Case 3 
       PrintDate = DateAdd("d", 1, CheckDate) 
      Case 4 
       PrintDate = DateAdd("d", 1, CheckDate) 
      Case 5 
       PrintDate = DateAdd("d", 1, CheckDate) 
      Case 6 
       PrintDate = DateAdd("d", 3, CheckDate) 
     End Select 
Else 
PrintDate = CheckDate 
End If 

End Function 

回答

1

你應該包括從第一個條件:

QS = "" 
QS = QS & "SELECT holidaydate " 
QS = QS & "FROM tbl_holidays " 
QS = QS & "Where holidaydate = #" & QSDate & "#" 

如果記錄返回一些記錄,然後OfficeClosed =真。您必須在循環中刪除條件,這樣您不必通過記錄集