2012-04-04 51 views
2

我正在嘗試做一個循環,將更新表清理與表DataSelect的源代碼,如果條件與DataSelect表匹配。標準示例如果年份在2012年至2011年之間,Channel等於TM且MRC介於5和10之間。我創建DataSelect以容納所有不同類型的條件,我希望程序循環遍歷每個條件分配清理源代碼。到目前爲止,我總是得到一個「參數太少,期望1.運行時錯誤3061」。任何幫助將不勝感激。如何做一個更新查詢循環 - 訪問

感謝, 尼基

Private Sub doDataSegm_Click() 


Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Dim strSQL, strSearch, strReplace As String 

Set db = CurrentDb() 
Set rs = db.OpenRecordset("dataselect", dbOpenTable) 

If rs.RecordCount = 0 Then Exit Sub 
rs.MoveFirst 

    For i = 1 To rs.RecordCount 
    strChan = rs("Chan") 
    strDataCode = rs("code") 
    strMrcYrLow = rs("mrcyr_low") 
    strMrcYrhigh = rs("mrcyr_high") 
    strMrcLow = rs("mrc_low") 
    strMrchigh = rs("mrc_high") 
    strSQL = "UPDATE Cleaned SET [cleaned].[datacode]= " & _ 
       strDataCode & " where [CLEANED].[CHANNEL] Like '" & strChan & _ 
      "' AND [CLEANED].[MRC_YEAR] Between '" & strMrcYrLow & _ 
      "' And '" & strMrcYrhigh & "' AND CLEANED.MRC Between " & _ 
       strMrcLow & " And " & strMrchigh & ";" 

    db.Execute strSQL, dbFailOnError 
    rs.MoveNext 
    Next i 


End Sub 
+0

什麼線是給這個錯誤?如果它是'db.Execute ...',你是否嘗試過使用debug.print來顯示strSQL的內容,然後直接在Access中運行它?首先要做的是檢查你的數據類型是否與SQL中的引用匹配。例如,MRC_YEAR是不是一個數字字段? – 2012-04-04 19:54:13

+0

rs(「code」)'字段中是否有數字數據?如果不是,則需要引用標識符。與rs(「mrc_low」)和rs(「Mrc_high」)一樣。 – mellamokb 2012-04-04 21:33:57

回答

0

這樣的消息 「參數太少。預計1.運行時間錯誤3061」通常表示您的查詢包含未加引號的數據值,而Access正在將其解釋爲字段名稱。由於查詢中的唯一的不帶引號的標識符datacodeMRC,它看起來像你需要引用其中的一個:

UPDATE Cleaned SET [Cleaned].[datacode] = '" & strDataCode & "' ... 
             ^...add quotes...^
+0

感謝所有的反饋,在額外的「前面」添加似乎有所訣竅,還有一個問題,有沒有辦法將它設置爲按順序運行,例如,從第1行開始運行的數據選擇表到第10行。我應該如何設置程序來做到這一點? – user1313666 2012-04-04 22:04:28