2012-04-04 47 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