【发布时间】:2020-11-06 06:23:14
【问题描述】:
我不断收到此“运行时错误'3265':在此集合中找不到项目。”错误信息。
它出现的行是:If rs!Borings.[Custom Sampling Method] = False Then,这是被引用字段的第一个实例,所以这让我想知道 SQL 是否正确添加到字符串中。但是我将字符串打印到立即窗口,它说:
SELECT Borings.ProjectID, Borings.BoringID, Borings.HoleDepth, Samples.BoringID,
Samples.Number, Samples.Depth, Samples.Length, Borings.[Continuous To],
Borings.[Every Other], Borings.[Sample Length],
Borings.[Custom Sampling Method]
FROM Borings LEFT JOIN Samples ON Borings.BoringID = Samples.BoringID
WHERE Borings.ProjectID = 462
在我看来是正确的.. 是错的吗?我想知道最后的值是否应该用引号引起来?
如果我改为尝试使用Set rs = db.OpenRecordset("qryAddSamples"),则该方法不起作用。我最终得到一个不同的运行时错误“3061”参数太少。预期 1。我不知道那是什么意思。
为了理解代码应该做什么,它应该根据钻孔表中的采样信息为当前加载的项目的每个钻孔生成土壤样本。
Option Compare Database
Dim db As DAO.Database
Dim rs As DAO.Recordset
Private Sub Update_Samples_Click()
DoCmd.RunCommand acCmdSaveRecord
Dim strSQL As String
Dim sampleDepth As Integer
Dim sampleNumber As Integer
strSQL = "SELECT Borings.ProjectID, Borings.BoringID, Borings.HoleDepth, Samples.BoringID, " & _
"Samples.Number, Samples.Depth, Samples.Length, Borings.[Continuous To], " & _
"Borings.[Every Other], Borings.[Sample Length], Borings.[Custom Sampling Method] " & _
"FROM Borings LEFT JOIN Samples ON Borings.BoringID = Samples.BoringID " & _
"WHERE Borings.ProjectID = " & [TempVars]![tmpProjectID]
Debug.Print strSQL
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
sampleDepth = 0
sampleNumber = 1
Do While Not rs.EOF
If rs!Borings.[Custom Sampling Method] = False Then
Do While sampleDepth + rs!Borings.[Sample Length] <= rs!Borings.[Continuous To]
rs.AddNew
AddSamples
sampleNumber = sampleNumber + 1
sampleDepth = sampleDepth + rs!Samples.[Length]
Loop
Do While sampleDepth + rs!Borings.[Sample Length] <= rs!Borings.HoleDepth
rs.AddNew
AddSamples
sampleNumber = sampleNumber + 1
sampleDepth = sampleDepth + rs!Borings.[Every Other]
Loop
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
DoCmd.Close
DoCmd.OpenForm "Main"
End Sub
Private Sub AddSamples()
rs!Samples.[BoringID] = rs!Borings.BoringID
rs!Samples.[Sample Number] = sampleNumber
rs!Samples.[Depth] = sampleDepth
rs!Samples.[Length] = rs!Borings.[Sample Length]
rs.Update
End Sub
【问题讨论】:
-
不相关,但使用
Option Explicit,因此拼写错误不会创建新变量,并且Long而不是Integer,因为无论如何16位整数在内存中都是32位长整数,并且会发生静默转换。
标签: vba ms-access runtime-error recordset