【问题标题】:Changing Select Clause of an Access Query in a VBA loop在 VBA 循环中更改访问查询的选择子句
【发布时间】:2015-02-04 18:29:35
【问题描述】:

我正在尝试遍历 Access (2007-2010) 中的一些查询,第一个查询每次都从表中获取不同的字段。如何在 SQL 语句的 select 子句中放置一个“参数”,以便每次运行查询时都会获取正确的字段?如果我在字段名称周围加上 [ ] 以输入参数,它将无法识别字段名称 - 它只会在每条记录中输入该名称。

这是我试图描述的简化说明:

SELECT 
    Base.Trial, 
    Base.Timestep, 
    Base.Rate3, 
    Base.CashIndex  
FROM 
    Mthly20141231Base AS Base  
ORDER BY 
    Base.Trial, 
    Base.Timestep

每次 VBA 循环回第一个查询时,我希望它运行相同的东西,但我想要 Base.Rate12 而不是 Base.Rate3

我不想在 VBA 中键入 SQL 代码。

感谢您的帮助!

更新-这是我的替代代码,因为 Access 不支持我想要它做的事情:

Sub LoopTesting()

    Dim db As dao.Database
    Dim RS_Inputs As Recordset
    Dim increment As Long
    Dim increment_prev As Long
    Dim QueryString As String

    Set db = CurrentDb

    'This table has my increments I want to loop through
    Set RS_Inputs = db.OpenRecordset("Test Periods")

    RS_Inputs.MoveFirst
    increment_prev = RS_Inputs("Timestep Increments")

    Do Until RS_Inputs.EOF

        increment = RS_Inputs("Timestep Increments")
        QueryString = Replace(GetQueryStr("RatesbyTimestep"), increment_prev, increment)
        db.QueryDefs("RatesbyTimestep").SQL = QueryString
        increment_prev = increment
        Call DeleteTable
        db.Execute "Step 3 - MakeTable"
        Call UpdatePrice(increment)

        RS_Inputs.MoveNext

    Loop

    'reset query back to first increment
    QueryString = Replace(GetQueryStr("RatesbyTimestep"), 360, 3)
    db.QueryDefs("RatesbyTimestep").SQL = QueryString

End Sub

【问题讨论】:

  • 经过数小时的 Google 搜索后,我得出了同样的结论,即您无法做到这一点——请参阅我在上面更新的代码。我想我已经找到了解决办法。我的查询已设置,以便我可以在循环中使用 Replace 函数。所以在我的插图中,它将用 12 替换 3,依此类推,然后在最后替换回 3。到目前为止它正在工作。

标签: loops ms-access parameters vba


【解决方案1】:

我一直在进行 PTQ(直通查询),他们不会在创建时编辑列名而不是任何表,而是在运行时编辑。我可以拥有

ptq_xxx as  "Select ID,  @arg1, DTS  From myTable Where DTS >= @arg2."
sSQL = CurrentDb.QueryDefs("ptq_xxx").sql  
sSQL = Replace(sSQL, "@arg1", myNewFieldName)
sSQL = Replace(sSQL, "@arg2", myDateValue)
Dim rst As ADODB.Recordset, nRecAffected As Long
Set rst = myConn.Execute(sSQL, nRecAffected)

像魅力一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 2014-10-13
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多