MS Access - 执行 SQL 语句收到错误

MS Access - Execute SQL statement receives error

我收到一个错误:

"Object doesn't support this property or method"

...当我尝试 运行 此代码时:

Dim db As DAO.Database
Dim mySQL As String

Set db = currentdb
mySQL = "SELECT tbl1.pID, tbl1.sID, tbl1.Type, tbl1.Description, tbl1.Amount, tbl1.Delete, tbl1.Approve, tbl2.sName FROM tbl2 INNER JOIN tbl1 ON tbl2.sID = tbl1.sID WHERE pID = " & Forms.frmEdit1.cboP & " And Delete = False;"
db.Execute mySQL, dbFailOnError
Set db = Nothing

似乎错误在最后一行的某处(这是我使用立即数 window 时失败的地方)我还尝试了 'False'.

周围的单引号

编辑:有效的记录源

SELECT tbl1.[pID], 
       tbl1.[sID], 
       [tbl1].Type, 
       [tbl1].Description, 
       [tbl1].Amount, 
       [tbl1].Delete, 
       tbl1.Approve, 
       tbl2.sName 
 FROM tbl2 INNER JOIN tbl1 ON tbl2.sID = tbl1.sID 
WHERE pID = Forms![frmEdit1].cboP 
  And [Delete] = False;

从逻辑上讲,向 Execute 发送 SELECT 语句就是说,'select 值符合此标准,但 不要 让我知道结果',这没有多大意义。填充未绑定的子表单需要手动完成 - 这就是它的原因 'unbound':

Sub LoadByID(Optional ByVal ID)
  Dim RS As DAO.Recordset, SQL As String
  If IsMissing(ID) Then ID = Forms!frmEdit1.cboP
  SQL = " SELECT tbl1.sID, tbl1.Type, tbl1.Description, " + _
        "        tbl1.Amount, tbl1.Delete, tbl1.Approve, tbl2.sName " + _
        " FROM tbl2 INNER JOIN tbl1 ON tbl2.sID = tbl1.sID " + _
        " WHERE pID = " & ID & " And [Delete] = False;"
  Set RS = CurrentDb.OpenRecordset(SQL)
  ' Assuming no match is an error; if it isn't, rewrite accordingly
  If RS.EOF Then Err.Raise 999, "LoadByID", "Er, no selection..."
  txtID.Value = RS!ID
  txtDescription.Value = RS!Description
  ' and so on...
End Sub

我已经允许不通过组合框指定 ID,以使该方法更易于测试。另外,请注意,如果表单应该允许编辑,那么您将需要更多代码来保存任何更改的值。

编辑

以上假设只有一个 return 记录。如果不止一个,循环这样:

Sub LoadByID(Optional ByVal ID)
  Dim RS As DAO.Recordset, SQL As String
  If IsMissing(ID) Then ID = Forms!frmEdit1.cboP
  SQL = " SELECT tbl1.sID, tbl1.Type, tbl1.Description, " + _
        "        tbl1.Amount, tbl1.Delete, tbl1.Approve, tbl2.sName " + _
        " FROM tbl2 INNER JOIN tbl1 ON tbl2.sID = tbl1.sID " + _
        " WHERE pID = " & ID & " And [Delete] = False;"
  Set RS = CurrentDb.OpenRecordset(SQL)
  ' add code to clear current display here...
  While Not RS.EOF
    ' add code to load the individual values here...
    RS.MoveNext
  Wend
End Sub