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
我收到一个错误:
"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