querydef在exportxml中不起作用

时间:2013-09-02 11:32:13

标签: sql vba ms-access access-vba

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

    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

但是参数的提示屏幕一直在屏幕上显示。

1 个答案:

答案 0 :(得分: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"