0

我有一个不想在 Application.ExportXML 中使用的查询。但是查询需要一个参数,这个参数必须是我表单中文本框的值。现在我有这样的东西。

    sql = "SELECT * FROM Reports WHERE Reports.Ref_Q ='" & txtRef & "';"
    Set qd = CurrentDb.QueryDefs("getReports")
    qd.sql = sql
    Application.ExportXML acExportQuery, getReports, strPath

当我运行此代码时,我收到以下错误:

The command or action '|' isn't avaible now

我也试过这样做

Set qd = CurrentDb.QueryDefs("getReports")
qd.Parameters("prm") = txtRef.Value

但随后参数的提示屏幕不断出现在屏幕上。

4

1 回答 1

0

Set qd = CurrentDb.QueryDefs("getReports")期望找到一个名为 的已保存查询getReports,该查询可能不存在。

你需要类似的东西:

sql = "SELECT * FROM Reports WHERE Reports.Ref_Q ='" & txtRef & "';"
Set qd = CurrentDb.CreateQueryDef("getReports", sql)
DB.QueryDefs.Refresh
Application.ExportXML acExportQuery, getReports, strPath

或者:

sql = "SELECT * FROM Reports WHERE Reports.Ref_Q = [prm];"
Set qd = CurrentDb.CreateQueryDef("getReports", sql)
qd.Parameters("[prm]") = txtRef.Value
DB.QueryDefs.Refresh
Application.ExportXML acExportQuery, getReports, strPath

DB.QueryDefs.Refresh通常是必需的,因为没有它,Access 将找不到您新创建的查询。

当您需要使用不同的参数多次重用查询时,最好使用参数,因为创建查询比仅使用不同的参数调用它具有更多的开销。

DB.QueryDefs.Delete "getReports"如果您不希望查询闲置,您可能需要添加一个。

于 2013-09-02T23:25:04.733 回答