在我尝试弄清access / SQL / vba时,非常感谢大家的帮助。
我有下面的代码,应该为特定的OPTION ID(默认可用性'N')的每个“当前”模型添加一条记录到[OPTIONS LIST MODELS]。
Private Sub btnAvailabilityAddTest_Click()
Dim f_strSQL As String
Dim model_strSQL As String
Dim optionID_strSQL As String
Dim modelRS As Recordset
Dim optionIDRS As Recordset
model_strSQL = "SELECT MODEL, [MODEL_NAME]" & _
" FROM T_MODELS_LIST" & _
" WHERE T_MODELS_LIST.Removed = 0"
optionID_strSQL = "SELECT OPTION_ID" & _
" FROM [OPTIONS LIST]" & _
" WHERE [PRICE PERIOD] = 'OCT18'"
Set optionIDRS = CurrentDb.OpenRecordset(optionID_strSQL, dbOpenForwardOnly)
Set modelRS = CurrentDb.OpenRecordset(model_strSQL, dbOpenForwardOnly)
' Availability add for new codes
Do While Not optionIDRS.EOF
'Check if Option ID exists in [OPTIONS LIST MODELS], if count = 0 then
If DCount("OPTION_ID", "[OPTIONS LIST MODELS]", "OPTION_ID = " & optionIDRS!OPTION_ID) = 0 Then
Do While Not modelRS.EOF
f_strSQL = "INSERT INTO [OPTIONS LIST MODELS] (OPTION_ID, MODEL, AVAILABILITY)" & _
" VALUES ('" & optionIDRS!OPTION_ID & "', '" & modelRS!MODEL & "', 'N')"
RunSQL f_strSQL
modelRS.MoveNext
Loop
End If
optionIDRS.MoveNext
Loop
MsgBox ("Availabilities Added")
End Sub
上面的代码有效,但只会添加第一个ID,而不会在[OPTIONS LIST MODELS]中输入任何内容,因此模型循环可按预期工作。如果我再次运行它,将不会添加任何内容。如果我删除刚添加的ID的条目并再次运行它,它将按预期再次添加该ID记录。
我怀疑使用DCount是一个逻辑问题,我一直在尝试定义DCount值并将其用作另一个循环,但是我没有成功。我添加了一个msgbox来显示计数和当前记录,当前记录按应有的方式移动,但是if语句不执行任何操作,代码的dcount为17(这应该是它们的值)。它只能在0上运行。
请忽略表名,我正在使用2002年制造的数据库,这真是一团糟...