2013-05-10 29 views
0

我有在SharePoint中持續輸入的數據;此表格鏈接在MS Access中,並且每月一次,我將凍結將數據從實時SharePoint數據庫複製到靜態Access數據庫中。我使用SQL查詢來做到這一點,並且效果很好。如何在執行之前創建一個可以在SQL查詢中設置變量的用戶表單?

下面是該查詢的要點(我簡化它,在這個例子中刪除字段):用於值:

INSERT INTO [CALL DATA] (FiscalMonth, FiscalYear, EncDateTime, TimeDuration) 
SELECT "07-Apr" AS FiscalMonth, "FY13" AS FiscalYear, 
CallAttempts.[Attempt Date & Time], CallAttempts.[Attempt Duration (Mins)] 
FROM CallAttempts 
WHERE ((CallAttempts.[Attempt Date & Time]>#4/1/2013#) AND 
     (CallAttempts.[Attempt Date & Time]<#5/1/2013#) AND 
     (CallAttempts.[Attempt Duration (Mins)] IS NOT NULL)); 

正如你所看到的,每個月,我必須手動更新此查詢的部分FiscalMonthFiscalYear以及日期和時間限制。這對我來說工作正常(我編碼),但我必須將其交給非技術人員。

我不熟悉Access - 我可以創建一個用戶表單來更新這個查詢,然後執行它(我正在考慮添加下拉選擇和數據選擇器來執行)嗎?這甚至可能嗎?

或者還有更好的方法去完成這個嗎?

+0

你可以用一個事件處理程序來實現一個用戶窗體。儘管這是2013年,Access事件處理程序仍然使用Visual Basic for Applications(VBA)編寫。這是過時的,但它的作品。 – Andomar 2013-05-10 14:49:44

回答

1

是的,你可以很容易。這應該讓你開始:

Private Sub cmdGo_Click() 
    Dim Mo As Integer 
    Dim Yr As Integer 
    Dim strSQL As String 
    Dim Mon As String 
    Dim DateStart As Date 
    Dim DateEnd As Date 

    strSQL = "" 
    strSQL = strSQL & "INSERT INTO [call data] " & vbCrLf 
    strSQL = strSQL & "   (fiscalmonth, " & vbCrLf 
    strSQL = strSQL & "    fiscalyear, " & vbCrLf 
    strSQL = strSQL & "    encdatetime, " & vbCrLf 
    strSQL = strSQL & "    timeduration) " & vbCrLf 
    strSQL = strSQL & "SELECT '[email protected]' AS FiscalMonth, " & vbCrLf 
    strSQL = strSQL & "  '[email protected]' AS FiscalYear, " & vbCrLf 
    strSQL = strSQL & "  callattempts.[attempt date & time], " & vbCrLf 
    strSQL = strSQL & "  callattempts.[attempt duration (mins)] " & vbCrLf 
    strSQL = strSQL & "FROM callattempts " & vbCrLf 
    strSQL = strSQL & "WHERE ((callattempts.[attempt date & time] >= #@DateStart#) " & vbCrLf 
    strSQL = strSQL & "   AND (callattempts.[attempt date & time] <#@DateEnd#) " & vbCrLf 
    strSQL = strSQL & "   AND (callattempts.[attempt duration (mins)] IS NOT NULL))" 

    Mo = Me.cboMonth.Value 
    Yr = Me.cboYear.Value 
    Mon = MonthName(Mo, True) 
    DateStart = DateSerial(Yr, Mo, 1) 
    DateEnd = DateAdd("m", 1, DateStart) 
    strSQL = Replace(strSQL, "@mon", Mon) 
    strSQL = Replace(strSQL, "@Yr", Yr) 
    strSQL = Replace(strSQL, "@DateStart", DateStart) 
    strSQL = Replace(strSQL, "@DateEnd", DateEnd) 

    'Debug.Print strSQL 
End Sub 
+0

我甚至不需要測試它就可以知道它會按照我的意願去做。非常感謝!將開始工作!谷歌搜索將讓我執行'strSQL'我敢肯定。 – thornomad 2013-05-10 19:14:11

相關問題