【问题标题】:How to open a recordset from a recordset?如何从记录集中打开记录集?
【发布时间】:2017-09-20 20:47:16
【问题描述】:

我想用 VBA 从另一个记录集中打开一个记录集。

如果我编写 SQL 并将其保存到名为 new_entry 和 valid_unit 的查询中,这将有效

' valid_unit
SELECT *
FROM import_raw_data
WHERE unit_name IN (SELECT unit_name FROM unit);

' new_entry
SELECT *
FROM valid_unit
WHERE id NOT IN (SELECT id FROM serviceman);
WHERE

但是,我想只在 VBA 中执行此操作,而不是保存查询。

Sub testing()
    valid_unit_sql = _
        "SELECT * " _
      & "FROM import_raw_data"
      & "WHERE unit_name IN (SELECT unit_name FROM unit);

    new_entry_sql = _
        "SELECT * "
      & "FROM ( " & valid_unit_sql & ") " _
      & "WHERE id NOT IN (SELECT id FROM serviceman);"

    With CurrentDb
        Set valid_unit = .OpenRecordset(valid_unit_sql)
        ' valid_unit works great
        Set new_entry = .OpenRecordset(new_entry_sql)
        ' this doesnt, it errors out
    End With
End Sub

我可以知道我该怎么做吗?我应该保存我的 valid_unit 查询并改为 FROM valid_unit 吗?

【问题讨论】:

  • 您的代码无效,请更正并显示有效代码。然后阅读并申请:How to debug dynamic SQL in VBA——如果没有帮助,请将Debug.Print new_entry_sql 的输出添加到您的问题中。
  • 另外,"errors out" 不是很有帮助,请添加完整的错误消息。
  • 感谢您指出这一点,并对提供的错误代码和非描述性错误消息表示歉意。我会在以后的问题上记下这一点!

标签: vba ms-access


【解决方案1】:

您的引号" 和新行延续& _ 有点搞砸了。我不知道这是复制粘贴错误还是您的实际代码(无法编译)。

总之试试这个:

Sub testing()       
    valid_unit_sql = "SELECT * " & _
                     "FROM import_raw_data " & _
                     "WHERE unit_name IN (SELECT unit_name FROM unit)"

    new_entry_sql = "SELECT * " & _
                    "FROM (" & valid_unit_sql & ") AS T " & _
                    "WHERE T.id NOT IN (SELECT id FROM serviceman);"

    Debug.Print new_entry_sql

    With CurrentDb
        Set valid_unit = .OpenRecordset(valid_unit_sql)
        Set new_entry = .OpenRecordset(new_entry_sql)
    End With
End Sub

输出 SQL:

SELECT * 
FROM 
    (
        SELECT * 
        FROM import_raw_data 
        WHERE unit_name IN (SELECT unit_name FROM unit)
    ) AS T 
WHERE T.id NOT IN (SELECT id FROM serviceman);

【讨论】:

  • 非常感谢!我不知道我必须指定 FROM AS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多